From 70e3764011ea5942b9d43eb683c7796487708f85 Mon Sep 17 00:00:00 2001 From: zhuyiyi <649091362@qq.com> Date: Thu, 20 Feb 2025 15:14:38 +0800 Subject: [PATCH] first commit --- .gitignore | 2 + README.md | 0 pom.properties | 5 + pom.xml | 211 + .../java/lingtao/net/base/ActionMessage.java | 16 + src/main/java/lingtao/net/bean/Article.java | 125 + .../java/lingtao/net/bean/ArticleExample.java | 931 +++ src/main/java/lingtao/net/bean/Bug.java | 65 + .../java/lingtao/net/bean/CustomerAward.java | 129 + .../java/lingtao/net/bean/CustomerData.java | 241 + .../net/bean/CustomerTrainContent.java | 110 + .../net/bean/CustomerTrainKindLabel.java | 110 + .../net/bean/CustomerTrainProType.java | 100 + .../java/lingtao/net/bean/ExpressFee.java | 125 + src/main/java/lingtao/net/bean/Finance.java | 149 + .../lingtao/net/bean/FinanceDifference.java | 135 + .../java/lingtao/net/bean/FinanceExtract.java | 115 + .../java/lingtao/net/bean/Information.java | 85 + src/main/java/lingtao/net/bean/LoginIp.java | 86 + src/main/java/lingtao/net/bean/LoginLog.java | 54 + src/main/java/lingtao/net/bean/Msg.java | 102 + src/main/java/lingtao/net/bean/MyFile.java | 85 + .../java/lingtao/net/bean/MyFileExample.java | 731 +++ src/main/java/lingtao/net/bean/Product.java | 168 + .../java/lingtao/net/bean/ProductImg.java | 197 + src/main/java/lingtao/net/bean/Question.java | 146 + src/main/java/lingtao/net/bean/QuoteData.java | 429 ++ src/main/java/lingtao/net/bean/QuoteLog.java | 135 + .../java/lingtao/net/bean/SysDictProduct.java | 161 + .../lingtao/net/bean/SysDictSearchPro.java | 106 + .../java/lingtao/net/bean/SysPermission.java | 145 + src/main/java/lingtao/net/bean/SysRole.java | 95 + src/main/java/lingtao/net/bean/SysUser.java | 208 + src/main/java/lingtao/net/bean/UpdateLog.java | 97 + .../net/config/ResourceServerConfig.java | 21 + .../net/controller/AcountController.java | 197 + .../net/controller/ArticleController.java | 137 + .../lingtao/net/controller/BugController.java | 105 + .../controller/CustomerAwardController.java | 109 + .../net/controller/CustomerDataControlle.java | 129 + .../controller/CustomerTrainController.java | 243 + .../net/controller/ExpressFeeController.java | 75 + .../net/controller/FileController.java | 90 + .../net/controller/Finance2Controller.java | 104 + .../net/controller/Finance3Controller.java | 104 + .../net/controller/Finance4Controller.java | 104 + .../net/controller/Finance5Controller.java | 104 + .../net/controller/Finance6Controller.java | 104 + .../net/controller/Finance7Controller.java | 104 + .../net/controller/FinanceController.java | 104 + .../FinanceDifferenceController.java | 87 + .../controller/FinanceExtractController.java | 103 + .../net/controller/InformationController.java | 65 + .../net/controller/LoginIpController.java | 101 + .../net/controller/LoginLogController.java | 45 + .../net/controller/ProductController.java | 397 ++ .../net/controller/ProductImgController.java | 214 + .../net/controller/QuestionController.java | 122 + .../net/controller/QuoteDataController.java | 165 + .../net/controller/QuoteLogController.java | 39 + .../SysDictSearchProController.java | 67 + .../controller/SysPermissionController.java | 42 + .../net/controller/SysRoleController.java | 172 + .../net/controller/SysUserController.java | 240 + .../net/controller/UpdateLogControllef.java | 67 + .../java/lingtao/net/dao/ArticleMapper.java | 38 + src/main/java/lingtao/net/dao/BugMapper.java | 12 + src/main/java/lingtao/net/dao/CommonDao.java | 21 + .../lingtao/net/dao/CustomerAwardMapper.java | 23 + .../lingtao/net/dao/CustomerDataMapper.java | 28 + .../lingtao/net/dao/CustomerTrainMapper.java | 43 + .../lingtao/net/dao/ExpressFeeMapper.java | 33 + .../java/lingtao/net/dao/Finance2Mapper.java | 26 + .../java/lingtao/net/dao/Finance3Mapper.java | 52 + .../net/dao/FinanceDifferenceMapper.java | 17 + .../lingtao/net/dao/FinanceExtractMapper.java | 26 + .../java/lingtao/net/dao/FinanceMapper.java | 26 + .../lingtao/net/dao/InformationMapper.java | 19 + .../java/lingtao/net/dao/LoginIpMapper.java | 27 + .../java/lingtao/net/dao/LoginLogMapper.java | 16 + .../java/lingtao/net/dao/MyFileMapper.java | 32 + .../lingtao/net/dao/ProductImgMapper.java | 34 + .../java/lingtao/net/dao/ProductMapper.java | 60 + .../java/lingtao/net/dao/QuestionMapper.java | 25 + .../java/lingtao/net/dao/QuoteDataMapper.java | 42 + .../java/lingtao/net/dao/QuoteLogMapper.java | 12 + .../net/dao/SysDictSearchProMapper.java | 19 + .../lingtao/net/dao/SysPermissionMapper.java | 15 + .../java/lingtao/net/dao/SysRoleMapper.java | 37 + .../java/lingtao/net/dao/SysUserMapper.java | 73 + .../java/lingtao/net/dao/UpdateLogMapper.java | 22 + .../java/lingtao/net/entity/ClothingTag.java | 59 + .../net/entity/SelfAdhesiveSticker.java | 4 + .../lingtao/net/enums/ClothingTagMater.java | 23 + .../net/enums/ClothingTagTechEnum.java | 28 + .../java/lingtao/net/enums/ProductEnum.java | 25 + .../lingtao/net/enums/ProductMembrane.java | 24 + .../java/lingtao/net/enums/ProductSlice.java | 24 + src/main/java/lingtao/net/gui/LoginGui.java | 106 + src/main/java/lingtao/net/gui/PriceGui.java | 98 + .../net/handler/MapToVarcharTypeHandler.java | 46 + .../lingtao/net/mapper/ClothingTagMapper.java | 8 + .../java/lingtao/net/realm/ShiroRealm.java | 187 + .../lingtao/net/service/ArticleService.java | 64 + .../java/lingtao/net/service/BugService.java | 35 + .../net/service/CustomerAwardService.java | 677 +++ .../net/service/CustomerDataService.java | 132 + .../net/service/CustomerTrainService.java | 162 + .../net/service/ExpressFeeService.java | 113 + .../lingtao/net/service/Finance2Service.java | 401 ++ .../lingtao/net/service/Finance3Service.java | 388 ++ .../lingtao/net/service/Finance4Service.java | 393 ++ .../lingtao/net/service/Finance5Service.java | 399 ++ .../lingtao/net/service/Finance6Service.java | 399 ++ .../lingtao/net/service/Finance7Service.java | 399 ++ .../net/service/FinanceDifferenceService.java | 183 + .../net/service/FinanceExtractService.java | 368 ++ .../lingtao/net/service/FinanceService.java | 401 ++ .../net/service/InformationService.java | 62 + .../lingtao/net/service/InitComponent.java | 5 + .../lingtao/net/service/LoginIpService.java | 62 + .../lingtao/net/service/LoginLogService.java | 20 + .../lingtao/net/service/MyFileService.java | 93 + .../net/service/ProductImgService.java | 53 + .../lingtao/net/service/ProductService.java | 5056 +++++++++++++++++ .../lingtao/net/service/QuestionService.java | 68 + .../lingtao/net/service/QuoteDataService.java | 535 ++ .../lingtao/net/service/QuoteLogService.java | 247 + .../net/service/SysDictSearchProService.java | 66 + .../net/service/SysPermissionService.java | 29 + .../lingtao/net/service/SysRoleService.java | 85 + .../lingtao/net/service/SysUserService.java | 269 + .../lingtao/net/service/UpdateLogService.java | 64 + .../net/service/price/ClothingTagService.java | 6 + .../net/service/price/ProductService.java | 14 + .../price/SelfAdhesiveStickerService.java | 4 + .../price/impl/ClothingTagServiceImpl.java | 27 + .../service/price/impl/ProductContent.java | 32 + .../impl/SelfAdhesiveStickerServiceImpl.java | 20 + .../java/lingtao/net/util/AStickersPrice.java | 432 ++ .../lingtao/net/util/AYaMoStickersPrice.java | 116 + .../java/lingtao/net/util/AngClothUtil.java | 37 + src/main/java/lingtao/net/util/BqPrice.java | 53 + .../java/lingtao/net/util/CanopyUtil.java | 77 + src/main/java/lingtao/net/util/CardPrice.java | 187 + .../java/lingtao/net/util/CouponPrice.java | 212 + .../java/lingtao/net/util/CupHolderUtil.java | 62 + .../lingtao/net/util/DateFormatUtils.java | 164 + .../java/lingtao/net/util/ExcelUtils.java | 159 + .../java/lingtao/net/util/FerruleUtil.java | 32 + src/main/java/lingtao/net/util/FgqPrice.java | 66 + .../lingtao/net/util/GDZGMStickersPrice.java | 174 + src/main/java/lingtao/net/util/IPUtils.java | 134 + src/main/java/lingtao/net/util/KztPrice.java | 33 + .../lingtao/net/util/LaSiStickersPrice.java | 117 + .../lingtao/net/util/LunarCalendarUtil.java | 306 + src/main/java/lingtao/net/util/MD5Util.java | 19 + .../lingtao/net/util/NiuStickersPrice.java | 116 + .../lingtao/net/util/PVCStickersPrice.java | 212 + .../net/util/PVCYaMoStickersPrice.java | 120 + .../java/lingtao/net/util/PaperCupPrice.java | 24 + .../lingtao/net/util/PictureAlbumPrice.java | 303 + .../java/lingtao/net/util/PosterPrice.java | 754 +++ .../java/lingtao/net/util/PriceUtils.java | 3324 +++++++++++ .../java/lingtao/net/util/PublicMethods.java | 51 + .../lingtao/net/util/StickersDoublePrice.java | 108 + .../lingtao/net/util/SwzStickersPrice.java | 72 + .../lingtao/net/util/YaJinStickersPrice.java | 116 + .../lingtao/net/util/YaYinStickersPrice.java | 173 + .../lingtao/net/util/YiSBStickersPrice.java | 136 + .../lingtao/net/util/YinPGStickersPrice.java | 136 + src/main/java/lingtao/net/util/ZsPrice.java | 95 + src/main/resources/applicationContext.xml | 126 + src/main/resources/dbconfig.properties | 9 + src/main/resources/lib/jep-java-3.5-trial.jar | Bin 0 -> 451032 bytes src/main/resources/log4j.properties | 23 + src/main/resources/mapper/ArticleMapper.xml | 390 ++ src/main/resources/mapper/BugMapper.xml | 37 + .../resources/mapper/ClothingTagMapper.xml | 26 + .../resources/mapper/CustomerAwardMapper.xml | 49 + .../resources/mapper/CustomerDataMapper.xml | 155 + .../resources/mapper/CustomerTrainMapper.xml | 134 + .../resources/mapper/ExpressFeeMapper.xml | 53 + src/main/resources/mapper/Finance2Mapper.xml | 55 + src/main/resources/mapper/Finance3Mapper.xml | 252 + .../mapper/FinanceDifferenceMapper.xml | 46 + .../resources/mapper/FinanceExtractMapper.xml | 43 + src/main/resources/mapper/FinanceMapper.xml | 55 + .../resources/mapper/InformationMapper.xml | 59 + src/main/resources/mapper/LoginIpMapper.xml | 59 + src/main/resources/mapper/LoginLogMapper.xml | 17 + src/main/resources/mapper/MyFileMapper.xml | 273 + .../resources/mapper/ProductImgMapper.xml | 147 + src/main/resources/mapper/ProductMapper.xml | 328 ++ src/main/resources/mapper/QuestionMapper.xml | 96 + src/main/resources/mapper/QuoteDataMapper.xml | 414 ++ src/main/resources/mapper/QuoteLogMapper.xml | 67 + .../mapper/SysDictSearchProMapper.xml | 72 + .../resources/mapper/SysPermissionMapper.xml | 60 + src/main/resources/mapper/SysRoleMapper.xml | 124 + src/main/resources/mapper/SysUserMapper.xml | 246 + src/main/resources/mapper/UpdateLogMapper.xml | 46 + src/main/resources/mybatis-config.xml | 25 + src/main/resources/quote_price.sql | 587 ++ src/main/webapp/META-INF/MANIFEST.MF | 3 + src/main/webapp/WEB-INF/c-1_0-rt.tld | 393 ++ src/main/webapp/WEB-INF/c-1_0.tld | 416 ++ src/main/webapp/WEB-INF/c.tld | 563 ++ .../WEB-INF/dispatcherServlet-servlet.xml | 47 + src/main/webapp/WEB-INF/fmt-1_0-rt.tld | 403 ++ src/main/webapp/WEB-INF/fmt-1_0.tld | 442 ++ src/main/webapp/WEB-INF/fmt.tld | 671 +++ src/main/webapp/WEB-INF/fn.tld | 207 + src/main/webapp/WEB-INF/permittedTaglibs.tld | 34 + src/main/webapp/WEB-INF/scriptfree.tld | 51 + src/main/webapp/WEB-INF/sql-1_0-rt.tld | 188 + src/main/webapp/WEB-INF/sql-1_0.tld | 213 + src/main/webapp/WEB-INF/sql.tld | 289 + src/main/webapp/WEB-INF/web.xml | 99 + src/main/webapp/WEB-INF/x-1_0-rt.tld | 256 + src/main/webapp/WEB-INF/x-1_0.tld | 273 + src/main/webapp/WEB-INF/x.tld | 448 ++ src/main/webapp/favicon.ico | Bin 0 -> 15406 bytes .../webapp/file/领淘报价系统操作手册.docx | Bin 0 -> 1795953 bytes src/main/webapp/images/bg3.jpg | Bin 0 -> 3406655 bytes src/main/webapp/images/bg4.jpg | Bin 0 -> 4647184 bytes src/main/webapp/images/bg401.jpg | Bin 0 -> 128497 bytes src/main/webapp/images/birthDay.png | Bin 0 -> 8910777 bytes src/main/webapp/images/emoji/aru/1.png | Bin 0 -> 903 bytes src/main/webapp/images/emoji/aru/10.png | Bin 0 -> 796 bytes src/main/webapp/images/emoji/aru/100.png | Bin 0 -> 1126 bytes src/main/webapp/images/emoji/aru/101.png | Bin 0 -> 1060 bytes src/main/webapp/images/emoji/aru/102.png | Bin 0 -> 1096 bytes src/main/webapp/images/emoji/aru/103.png | Bin 0 -> 1207 bytes src/main/webapp/images/emoji/aru/104.png | Bin 0 -> 1593 bytes src/main/webapp/images/emoji/aru/105.png | Bin 0 -> 1520 bytes src/main/webapp/images/emoji/aru/106.png | Bin 0 -> 1820 bytes src/main/webapp/images/emoji/aru/107.png | Bin 0 -> 926 bytes src/main/webapp/images/emoji/aru/108.png | Bin 0 -> 1116 bytes src/main/webapp/images/emoji/aru/109.png | Bin 0 -> 1144 bytes src/main/webapp/images/emoji/aru/11.png | Bin 0 -> 944 bytes src/main/webapp/images/emoji/aru/110.png | Bin 0 -> 1203 bytes src/main/webapp/images/emoji/aru/111.png | Bin 0 -> 1225 bytes src/main/webapp/images/emoji/aru/112.png | Bin 0 -> 1282 bytes src/main/webapp/images/emoji/aru/113.png | Bin 0 -> 2212 bytes src/main/webapp/images/emoji/aru/114.png | Bin 0 -> 2003 bytes src/main/webapp/images/emoji/aru/115.png | Bin 0 -> 1962 bytes src/main/webapp/images/emoji/aru/116.png | Bin 0 -> 1906 bytes src/main/webapp/images/emoji/aru/117.png | Bin 0 -> 1909 bytes src/main/webapp/images/emoji/aru/118.png | Bin 0 -> 1995 bytes src/main/webapp/images/emoji/aru/119.png | Bin 0 -> 1776 bytes src/main/webapp/images/emoji/aru/12.png | Bin 0 -> 961 bytes src/main/webapp/images/emoji/aru/120.png | Bin 0 -> 2205 bytes src/main/webapp/images/emoji/aru/121.png | Bin 0 -> 1435 bytes src/main/webapp/images/emoji/aru/122.png | Bin 0 -> 1513 bytes src/main/webapp/images/emoji/aru/123.png | Bin 0 -> 1486 bytes src/main/webapp/images/emoji/aru/124.png | Bin 0 -> 1502 bytes src/main/webapp/images/emoji/aru/125.png | Bin 0 -> 1512 bytes src/main/webapp/images/emoji/aru/126.png | Bin 0 -> 1496 bytes src/main/webapp/images/emoji/aru/127.png | Bin 0 -> 1818 bytes src/main/webapp/images/emoji/aru/128.png | Bin 0 -> 2036 bytes src/main/webapp/images/emoji/aru/129.png | Bin 0 -> 1744 bytes src/main/webapp/images/emoji/aru/13.png | Bin 0 -> 935 bytes src/main/webapp/images/emoji/aru/130.png | Bin 0 -> 1529 bytes src/main/webapp/images/emoji/aru/131.png | Bin 0 -> 1531 bytes src/main/webapp/images/emoji/aru/132.png | Bin 0 -> 1548 bytes src/main/webapp/images/emoji/aru/133.png | Bin 0 -> 1515 bytes src/main/webapp/images/emoji/aru/134.png | Bin 0 -> 1708 bytes src/main/webapp/images/emoji/aru/135.png | Bin 0 -> 1483 bytes src/main/webapp/images/emoji/aru/136.png | Bin 0 -> 1570 bytes src/main/webapp/images/emoji/aru/137.png | Bin 0 -> 1435 bytes src/main/webapp/images/emoji/aru/138.png | Bin 0 -> 1414 bytes src/main/webapp/images/emoji/aru/139.png | Bin 0 -> 1630 bytes src/main/webapp/images/emoji/aru/14.png | Bin 0 -> 948 bytes src/main/webapp/images/emoji/aru/140.png | Bin 0 -> 1673 bytes src/main/webapp/images/emoji/aru/141.png | Bin 0 -> 1477 bytes src/main/webapp/images/emoji/aru/142.png | Bin 0 -> 1334 bytes src/main/webapp/images/emoji/aru/143.png | Bin 0 -> 1589 bytes src/main/webapp/images/emoji/aru/144.png | Bin 0 -> 1416 bytes src/main/webapp/images/emoji/aru/145.png | Bin 0 -> 1509 bytes src/main/webapp/images/emoji/aru/146.png | Bin 0 -> 1589 bytes src/main/webapp/images/emoji/aru/147.png | Bin 0 -> 1616 bytes src/main/webapp/images/emoji/aru/148.png | Bin 0 -> 1681 bytes src/main/webapp/images/emoji/aru/149.png | Bin 0 -> 1594 bytes src/main/webapp/images/emoji/aru/15.png | Bin 0 -> 1156 bytes src/main/webapp/images/emoji/aru/150.png | Bin 0 -> 2140 bytes src/main/webapp/images/emoji/aru/151.png | Bin 0 -> 1910 bytes src/main/webapp/images/emoji/aru/152.png | Bin 0 -> 2196 bytes src/main/webapp/images/emoji/aru/153.png | Bin 0 -> 2274 bytes src/main/webapp/images/emoji/aru/154.png | Bin 0 -> 1850 bytes src/main/webapp/images/emoji/aru/155.png | Bin 0 -> 2357 bytes src/main/webapp/images/emoji/aru/156.png | Bin 0 -> 1431 bytes src/main/webapp/images/emoji/aru/157.png | Bin 0 -> 2407 bytes src/main/webapp/images/emoji/aru/158.png | Bin 0 -> 1205 bytes src/main/webapp/images/emoji/aru/159.png | Bin 0 -> 2003 bytes src/main/webapp/images/emoji/aru/16.png | Bin 0 -> 1066 bytes src/main/webapp/images/emoji/aru/160.png | Bin 0 -> 2366 bytes src/main/webapp/images/emoji/aru/161.png | Bin 0 -> 1473 bytes src/main/webapp/images/emoji/aru/162.png | Bin 0 -> 1977 bytes src/main/webapp/images/emoji/aru/163.png | Bin 0 -> 2046 bytes src/main/webapp/images/emoji/aru/164.png | Bin 0 -> 1939 bytes src/main/webapp/images/emoji/aru/17.png | Bin 0 -> 1026 bytes src/main/webapp/images/emoji/aru/18.png | Bin 0 -> 1008 bytes src/main/webapp/images/emoji/aru/19.png | Bin 0 -> 969 bytes src/main/webapp/images/emoji/aru/2.png | Bin 0 -> 917 bytes src/main/webapp/images/emoji/aru/20.png | Bin 0 -> 910 bytes src/main/webapp/images/emoji/aru/21.png | Bin 0 -> 908 bytes src/main/webapp/images/emoji/aru/22.png | Bin 0 -> 941 bytes src/main/webapp/images/emoji/aru/23.png | Bin 0 -> 898 bytes src/main/webapp/images/emoji/aru/24.png | Bin 0 -> 1130 bytes src/main/webapp/images/emoji/aru/25.png | Bin 0 -> 988 bytes src/main/webapp/images/emoji/aru/26.png | Bin 0 -> 1077 bytes src/main/webapp/images/emoji/aru/27.png | Bin 0 -> 1082 bytes src/main/webapp/images/emoji/aru/28.png | Bin 0 -> 1018 bytes src/main/webapp/images/emoji/aru/29.png | Bin 0 -> 1122 bytes src/main/webapp/images/emoji/aru/3.png | Bin 0 -> 892 bytes src/main/webapp/images/emoji/aru/30.png | Bin 0 -> 1270 bytes src/main/webapp/images/emoji/aru/31.png | Bin 0 -> 1031 bytes src/main/webapp/images/emoji/aru/32.png | Bin 0 -> 926 bytes src/main/webapp/images/emoji/aru/33.png | Bin 0 -> 954 bytes src/main/webapp/images/emoji/aru/34.png | Bin 0 -> 1135 bytes src/main/webapp/images/emoji/aru/35.png | Bin 0 -> 901 bytes src/main/webapp/images/emoji/aru/36.png | Bin 0 -> 1061 bytes src/main/webapp/images/emoji/aru/37.png | Bin 0 -> 893 bytes src/main/webapp/images/emoji/aru/38.png | Bin 0 -> 1167 bytes src/main/webapp/images/emoji/aru/39.png | Bin 0 -> 1212 bytes src/main/webapp/images/emoji/aru/4.png | Bin 0 -> 883 bytes src/main/webapp/images/emoji/aru/40.png | Bin 0 -> 1327 bytes src/main/webapp/images/emoji/aru/41.png | Bin 0 -> 1001 bytes src/main/webapp/images/emoji/aru/42.png | Bin 0 -> 1687 bytes src/main/webapp/images/emoji/aru/43.png | Bin 0 -> 1103 bytes src/main/webapp/images/emoji/aru/44.png | Bin 0 -> 1349 bytes src/main/webapp/images/emoji/aru/45.png | Bin 0 -> 1678 bytes src/main/webapp/images/emoji/aru/46.png | Bin 0 -> 1845 bytes src/main/webapp/images/emoji/aru/47.png | Bin 0 -> 1283 bytes src/main/webapp/images/emoji/aru/48.png | Bin 0 -> 1274 bytes src/main/webapp/images/emoji/aru/49.png | Bin 0 -> 1057 bytes src/main/webapp/images/emoji/aru/5.png | Bin 0 -> 1005 bytes src/main/webapp/images/emoji/aru/50.png | Bin 0 -> 1511 bytes src/main/webapp/images/emoji/aru/51.png | Bin 0 -> 1151 bytes src/main/webapp/images/emoji/aru/52.png | Bin 0 -> 1106 bytes src/main/webapp/images/emoji/aru/53.png | Bin 0 -> 1150 bytes src/main/webapp/images/emoji/aru/54.png | Bin 0 -> 1092 bytes src/main/webapp/images/emoji/aru/55.png | Bin 0 -> 1151 bytes src/main/webapp/images/emoji/aru/56.png | Bin 0 -> 1086 bytes src/main/webapp/images/emoji/aru/57.png | Bin 0 -> 1076 bytes src/main/webapp/images/emoji/aru/58.png | Bin 0 -> 1014 bytes src/main/webapp/images/emoji/aru/59.png | Bin 0 -> 1223 bytes src/main/webapp/images/emoji/aru/6.png | Bin 0 -> 898 bytes src/main/webapp/images/emoji/aru/60.png | Bin 0 -> 1121 bytes src/main/webapp/images/emoji/aru/61.png | Bin 0 -> 1328 bytes src/main/webapp/images/emoji/aru/62.png | Bin 0 -> 1419 bytes src/main/webapp/images/emoji/aru/63.png | Bin 0 -> 1150 bytes src/main/webapp/images/emoji/aru/64.png | Bin 0 -> 1104 bytes src/main/webapp/images/emoji/aru/65.png | Bin 0 -> 1535 bytes src/main/webapp/images/emoji/aru/66.png | Bin 0 -> 1206 bytes src/main/webapp/images/emoji/aru/67.png | Bin 0 -> 1193 bytes src/main/webapp/images/emoji/aru/68.png | Bin 0 -> 614 bytes src/main/webapp/images/emoji/aru/69.png | Bin 0 -> 618 bytes src/main/webapp/images/emoji/aru/7.png | Bin 0 -> 954 bytes src/main/webapp/images/emoji/aru/70.png | Bin 0 -> 840 bytes src/main/webapp/images/emoji/aru/71.png | Bin 0 -> 655 bytes src/main/webapp/images/emoji/aru/72.png | Bin 0 -> 973 bytes src/main/webapp/images/emoji/aru/73.png | Bin 0 -> 652 bytes src/main/webapp/images/emoji/aru/74.png | Bin 0 -> 1158 bytes src/main/webapp/images/emoji/aru/75.png | Bin 0 -> 1433 bytes src/main/webapp/images/emoji/aru/76.png | Bin 0 -> 1184 bytes src/main/webapp/images/emoji/aru/77.png | Bin 0 -> 1197 bytes src/main/webapp/images/emoji/aru/78.png | Bin 0 -> 1288 bytes src/main/webapp/images/emoji/aru/79.png | Bin 0 -> 861 bytes src/main/webapp/images/emoji/aru/8.png | Bin 0 -> 833 bytes src/main/webapp/images/emoji/aru/80.png | Bin 0 -> 954 bytes src/main/webapp/images/emoji/aru/81.png | Bin 0 -> 998 bytes src/main/webapp/images/emoji/aru/82.png | Bin 0 -> 1110 bytes src/main/webapp/images/emoji/aru/83.png | Bin 0 -> 1061 bytes src/main/webapp/images/emoji/aru/84.png | Bin 0 -> 1516 bytes src/main/webapp/images/emoji/aru/85.png | Bin 0 -> 1239 bytes src/main/webapp/images/emoji/aru/86.png | Bin 0 -> 776 bytes src/main/webapp/images/emoji/aru/87.png | Bin 0 -> 1024 bytes src/main/webapp/images/emoji/aru/88.png | Bin 0 -> 1070 bytes src/main/webapp/images/emoji/aru/89.png | Bin 0 -> 1443 bytes src/main/webapp/images/emoji/aru/9.png | Bin 0 -> 907 bytes src/main/webapp/images/emoji/aru/90.png | Bin 0 -> 1660 bytes src/main/webapp/images/emoji/aru/91.png | Bin 0 -> 798 bytes src/main/webapp/images/emoji/aru/92.png | Bin 0 -> 995 bytes src/main/webapp/images/emoji/aru/93.png | Bin 0 -> 1071 bytes src/main/webapp/images/emoji/aru/94.png | Bin 0 -> 1174 bytes src/main/webapp/images/emoji/aru/95.png | Bin 0 -> 1222 bytes src/main/webapp/images/emoji/aru/96.png | Bin 0 -> 1130 bytes src/main/webapp/images/emoji/aru/97.png | Bin 0 -> 1510 bytes src/main/webapp/images/emoji/aru/98.png | Bin 0 -> 2007 bytes src/main/webapp/images/emoji/aru/99.png | Bin 0 -> 1038 bytes src/main/webapp/images/emoji/newtieba/OK.png | Bin 0 -> 2228 bytes .../webapp/images/emoji/newtieba/haha.png | Bin 0 -> 2244 bytes .../webapp/images/emoji/newtieba/what.png | Bin 0 -> 2597 bytes .../webapp/images/emoji/newtieba/不高兴.png | Bin 0 -> 2469 bytes src/main/webapp/images/emoji/newtieba/乖.png | Bin 0 -> 2626 bytes .../webapp/images/emoji/newtieba/你懂的.png | Bin 0 -> 2554 bytes .../webapp/images/emoji/newtieba/便便.png | Bin 0 -> 2134 bytes .../webapp/images/emoji/newtieba/勉强.png | Bin 0 -> 2620 bytes src/main/webapp/images/emoji/newtieba/吐.png | Bin 0 -> 2592 bytes .../webapp/images/emoji/newtieba/吐舌.png | Bin 0 -> 2631 bytes .../webapp/images/emoji/newtieba/呀咩爹.png | Bin 0 -> 2785 bytes .../webapp/images/emoji/newtieba/呵呵.png | Bin 0 -> 2451 bytes .../webapp/images/emoji/newtieba/哈哈.png | Bin 0 -> 2436 bytes src/main/webapp/images/emoji/newtieba/啊.png | Bin 0 -> 2655 bytes src/main/webapp/images/emoji/newtieba/喷.png | Bin 0 -> 2558 bytes .../webapp/images/emoji/newtieba/大拇指.png | Bin 0 -> 2051 bytes .../webapp/images/emoji/newtieba/太开心.png | Bin 0 -> 2646 bytes .../webapp/images/emoji/newtieba/太阳.png | Bin 0 -> 1838 bytes .../webapp/images/emoji/newtieba/委屈.png | Bin 0 -> 2553 bytes .../webapp/images/emoji/newtieba/小乖.png | Bin 0 -> 2552 bytes .../webapp/images/emoji/newtieba/小红脸.png | Bin 0 -> 2724 bytes .../webapp/images/emoji/newtieba/彩虹.png | Bin 0 -> 2069 bytes .../webapp/images/emoji/newtieba/心碎.png | Bin 0 -> 1943 bytes src/main/webapp/images/emoji/newtieba/怒.png | Bin 0 -> 2483 bytes .../webapp/images/emoji/newtieba/惊哭.png | Bin 0 -> 2541 bytes .../webapp/images/emoji/newtieba/惊讶.png | Bin 0 -> 2604 bytes .../webapp/images/emoji/newtieba/懒得理.png | Bin 0 -> 2575 bytes .../webapp/images/emoji/newtieba/手纸.png | Bin 0 -> 2494 bytes .../webapp/images/emoji/newtieba/挖鼻.png | Bin 0 -> 2549 bytes .../webapp/images/emoji/newtieba/捂嘴笑.png | Bin 0 -> 2618 bytes .../webapp/images/emoji/newtieba/星星月亮.png | Bin 0 -> 1470 bytes src/main/webapp/images/emoji/newtieba/汗.png | Bin 0 -> 2539 bytes .../webapp/images/emoji/newtieba/沙发.png | Bin 0 -> 1396 bytes src/main/webapp/images/emoji/newtieba/泪.png | Bin 0 -> 2584 bytes .../webapp/images/emoji/newtieba/滑稽.png | Bin 0 -> 2373 bytes .../webapp/images/emoji/newtieba/灯泡.png | Bin 0 -> 2582 bytes .../webapp/images/emoji/newtieba/爱心.png | Bin 0 -> 1219 bytes .../webapp/images/emoji/newtieba/犀利.png | Bin 0 -> 2580 bytes .../webapp/images/emoji/newtieba/狂汗.png | Bin 0 -> 2526 bytes .../webapp/images/emoji/newtieba/玫瑰.png | Bin 0 -> 2175 bytes .../webapp/images/emoji/newtieba/疑问.png | Bin 0 -> 2551 bytes .../webapp/images/emoji/newtieba/真棒.png | Bin 0 -> 2633 bytes .../webapp/images/emoji/newtieba/睡觉.png | Bin 0 -> 2577 bytes .../webapp/images/emoji/newtieba/礼物.png | Bin 0 -> 2089 bytes .../webapp/images/emoji/newtieba/笑尿.png | Bin 0 -> 2620 bytes .../webapp/images/emoji/newtieba/笑眼.png | Bin 0 -> 2736 bytes .../webapp/images/emoji/newtieba/红领巾.png | Bin 0 -> 1657 bytes .../webapp/images/emoji/newtieba/胜利.png | Bin 0 -> 2225 bytes .../webapp/images/emoji/newtieba/花心.png | Bin 0 -> 2722 bytes .../webapp/images/emoji/newtieba/茶杯.png | Bin 0 -> 2245 bytes .../webapp/images/emoji/newtieba/药丸.png | Bin 0 -> 1360 bytes .../webapp/images/emoji/newtieba/蛋糕.png | Bin 0 -> 2314 bytes .../webapp/images/emoji/newtieba/蜡烛.png | Bin 0 -> 2224 bytes .../webapp/images/emoji/newtieba/鄙视.png | Bin 0 -> 2623 bytes src/main/webapp/images/emoji/newtieba/酷.png | Bin 0 -> 2694 bytes .../webapp/images/emoji/newtieba/酸爽.png | Bin 0 -> 2672 bytes .../webapp/images/emoji/newtieba/钱币.png | Bin 0 -> 2196 bytes .../webapp/images/emoji/newtieba/阴险.png | Bin 0 -> 2676 bytes .../webapp/images/emoji/newtieba/音乐.png | Bin 0 -> 1759 bytes .../webapp/images/emoji/newtieba/香蕉.png | Bin 0 -> 2386 bytes .../webapp/images/emoji/newtieba/黑线.png | Bin 0 -> 2590 bytes src/main/webapp/images/emoji/qq/K歌.gif | Bin 0 -> 1205 bytes src/main/webapp/images/emoji/qq/NO.gif | Bin 0 -> 6913 bytes src/main/webapp/images/emoji/qq/OK.gif | Bin 0 -> 1263 bytes src/main/webapp/images/emoji/qq/下雨.gif | Bin 0 -> 1305 bytes src/main/webapp/images/emoji/qq/乒乓.gif | Bin 0 -> 1886 bytes src/main/webapp/images/emoji/qq/亲亲.gif | Bin 0 -> 2679 bytes src/main/webapp/images/emoji/qq/便便.gif | Bin 0 -> 14782 bytes src/main/webapp/images/emoji/qq/偷笑.gif | Bin 0 -> 2393 bytes src/main/webapp/images/emoji/qq/傲慢.gif | Bin 0 -> 1973 bytes src/main/webapp/images/emoji/qq/再见.gif | Bin 0 -> 7258 bytes src/main/webapp/images/emoji/qq/冷汗.gif | Bin 0 -> 6844 bytes src/main/webapp/images/emoji/qq/凋谢.gif | Bin 0 -> 1124 bytes src/main/webapp/images/emoji/qq/刀.gif | Bin 0 -> 5466 bytes src/main/webapp/images/emoji/qq/勾引.gif | Bin 0 -> 9164 bytes src/main/webapp/images/emoji/qq/发呆.gif | Bin 0 -> 7740 bytes src/main/webapp/images/emoji/qq/发怒.gif | Bin 0 -> 16195 bytes src/main/webapp/images/emoji/qq/发抖.gif | Bin 0 -> 2119 bytes src/main/webapp/images/emoji/qq/发财.gif | Bin 0 -> 1214 bytes src/main/webapp/images/emoji/qq/可怜.gif | Bin 0 -> 2680 bytes src/main/webapp/images/emoji/qq/可爱.gif | Bin 0 -> 4399 bytes src/main/webapp/images/emoji/qq/右哼哼.gif | Bin 0 -> 13226 bytes src/main/webapp/images/emoji/qq/右太极.gif | Bin 0 -> 7665 bytes src/main/webapp/images/emoji/qq/吐.gif | Bin 0 -> 19718 bytes src/main/webapp/images/emoji/qq/吓.gif | Bin 0 -> 13361 bytes src/main/webapp/images/emoji/qq/吻.gif | Bin 0 -> 4667 bytes src/main/webapp/images/emoji/qq/呲牙.gif | Bin 0 -> 2531 bytes src/main/webapp/images/emoji/qq/咒骂.gif | Bin 0 -> 11778 bytes src/main/webapp/images/emoji/qq/咖啡.gif | Bin 0 -> 9328 bytes src/main/webapp/images/emoji/qq/哈欠.gif | Bin 0 -> 20636 bytes src/main/webapp/images/emoji/qq/啤酒.gif | Bin 0 -> 13837 bytes src/main/webapp/images/emoji/qq/喝彩.gif | Bin 0 -> 1353 bytes src/main/webapp/images/emoji/qq/嗅大了.gif | Bin 0 -> 10732 bytes src/main/webapp/images/emoji/qq/嘘.gif | Bin 0 -> 3672 bytes src/main/webapp/images/emoji/qq/囍.gif | Bin 0 -> 1231 bytes src/main/webapp/images/emoji/qq/回头.gif | Bin 0 -> 16429 bytes src/main/webapp/images/emoji/qq/困.gif | Bin 0 -> 8274 bytes src/main/webapp/images/emoji/qq/坏笑.gif | Bin 0 -> 4955 bytes src/main/webapp/images/emoji/qq/多云.gif | Bin 0 -> 1164 bytes src/main/webapp/images/emoji/qq/夜晚.gif | Bin 0 -> 1232 bytes src/main/webapp/images/emoji/qq/大兵.gif | Bin 0 -> 13312 bytes src/main/webapp/images/emoji/qq/大哭.gif | Bin 0 -> 9497 bytes src/main/webapp/images/emoji/qq/太阳.gif | Bin 0 -> 1268 bytes src/main/webapp/images/emoji/qq/奋斗.gif | Bin 0 -> 3677 bytes src/main/webapp/images/emoji/qq/奶瓶.gif | Bin 0 -> 1007 bytes src/main/webapp/images/emoji/qq/委屈.gif | Bin 0 -> 23454 bytes src/main/webapp/images/emoji/qq/害羞.gif | Bin 0 -> 7738 bytes src/main/webapp/images/emoji/qq/尴尬.gif | Bin 0 -> 5911 bytes src/main/webapp/images/emoji/qq/左哼哼.gif | Bin 0 -> 13264 bytes src/main/webapp/images/emoji/qq/左太极.gif | Bin 0 -> 7920 bytes src/main/webapp/images/emoji/qq/差劲.gif | Bin 0 -> 5275 bytes src/main/webapp/images/emoji/qq/帅.gif | Bin 0 -> 1412 bytes src/main/webapp/images/emoji/qq/弱.gif | Bin 0 -> 6655 bytes src/main/webapp/images/emoji/qq/强.gif | Bin 0 -> 6266 bytes src/main/webapp/images/emoji/qq/得意.gif | Bin 0 -> 4311 bytes src/main/webapp/images/emoji/qq/微笑.gif | Bin 0 -> 2024 bytes src/main/webapp/images/emoji/qq/心.gif | Bin 0 -> 1082 bytes src/main/webapp/images/emoji/qq/心碎.gif | Bin 0 -> 6596 bytes src/main/webapp/images/emoji/qq/快哭了.gif | Bin 0 -> 3353 bytes src/main/webapp/images/emoji/qq/怄火.gif | Bin 0 -> 10397 bytes src/main/webapp/images/emoji/qq/惊恐.gif | Bin 0 -> 11019 bytes src/main/webapp/images/emoji/qq/惊讶.gif | Bin 0 -> 17339 bytes src/main/webapp/images/emoji/qq/憨笑.gif | Bin 0 -> 9068 bytes src/main/webapp/images/emoji/qq/戒指.gif | Bin 0 -> 1060 bytes src/main/webapp/images/emoji/qq/抓狂.gif | Bin 0 -> 10847 bytes src/main/webapp/images/emoji/qq/折磨.gif | Bin 0 -> 18594 bytes src/main/webapp/images/emoji/qq/抠鼻.gif | Bin 0 -> 18955 bytes src/main/webapp/images/emoji/qq/抱拳.gif | Bin 0 -> 5458 bytes src/main/webapp/images/emoji/qq/拥抱.gif | Bin 0 -> 5800 bytes src/main/webapp/images/emoji/qq/拳头.gif | Bin 0 -> 5301 bytes src/main/webapp/images/emoji/qq/挥动.gif | Bin 0 -> 21113 bytes src/main/webapp/images/emoji/qq/握手.gif | Bin 0 -> 5994 bytes src/main/webapp/images/emoji/qq/撇嘴.gif | Bin 0 -> 7838 bytes src/main/webapp/images/emoji/qq/擦汗.gif | Bin 0 -> 26077 bytes src/main/webapp/images/emoji/qq/敲打.gif | Bin 0 -> 3545 bytes src/main/webapp/images/emoji/qq/晕.gif | Bin 0 -> 7458 bytes src/main/webapp/images/emoji/qq/枪.gif | Bin 0 -> 913 bytes src/main/webapp/images/emoji/qq/棒棒糖.gif | Bin 0 -> 1101 bytes src/main/webapp/images/emoji/qq/气球.gif | Bin 0 -> 1157 bytes src/main/webapp/images/emoji/qq/沙发.gif | Bin 0 -> 975 bytes src/main/webapp/images/emoji/qq/流汗.gif | Bin 0 -> 9678 bytes src/main/webapp/images/emoji/qq/流泪.gif | Bin 0 -> 16918 bytes src/main/webapp/images/emoji/qq/激动.gif | Bin 0 -> 8109 bytes src/main/webapp/images/emoji/qq/灯.gif | Bin 0 -> 1192 bytes src/main/webapp/images/emoji/qq/灯笼.gif | Bin 0 -> 1286 bytes src/main/webapp/images/emoji/qq/炸弹.gif | Bin 0 -> 1016 bytes src/main/webapp/images/emoji/qq/熊猫.gif | Bin 0 -> 1389 bytes src/main/webapp/images/emoji/qq/爆筋.gif | Bin 0 -> 1112 bytes src/main/webapp/images/emoji/qq/爱你.gif | Bin 0 -> 6102 bytes src/main/webapp/images/emoji/qq/爱情.gif | Bin 0 -> 8995 bytes src/main/webapp/images/emoji/qq/猪头.gif | Bin 0 -> 1185 bytes src/main/webapp/images/emoji/qq/献吻.gif | Bin 0 -> 3532 bytes src/main/webapp/images/emoji/qq/玫瑰.gif | Bin 0 -> 1059 bytes src/main/webapp/images/emoji/qq/瓢虫.gif | Bin 0 -> 4600 bytes src/main/webapp/images/emoji/qq/疑问.gif | Bin 0 -> 11199 bytes src/main/webapp/images/emoji/qq/白眼.gif | Bin 0 -> 8516 bytes src/main/webapp/images/emoji/qq/睡.gif | Bin 0 -> 6265 bytes src/main/webapp/images/emoji/qq/磕头.gif | Bin 0 -> 6896 bytes src/main/webapp/images/emoji/qq/礼物.gif | Bin 0 -> 1205 bytes src/main/webapp/images/emoji/qq/篮球.gif | Bin 0 -> 4724 bytes src/main/webapp/images/emoji/qq/纸巾.gif | Bin 0 -> 1114 bytes src/main/webapp/images/emoji/qq/胜利.gif | Bin 0 -> 6022 bytes src/main/webapp/images/emoji/qq/色.gif | Bin 0 -> 5821 bytes src/main/webapp/images/emoji/qq/药丸.gif | Bin 0 -> 1051 bytes src/main/webapp/images/emoji/qq/菜刀.gif | Bin 0 -> 7401 bytes src/main/webapp/images/emoji/qq/蛋糕.gif | Bin 0 -> 4329 bytes src/main/webapp/images/emoji/qq/蜡烛.gif | Bin 0 -> 5911 bytes src/main/webapp/images/emoji/qq/街舞.gif | Bin 0 -> 7832 bytes src/main/webapp/images/emoji/qq/衰.gif | Bin 0 -> 3949 bytes src/main/webapp/images/emoji/qq/西瓜.gif | Bin 0 -> 1162 bytes src/main/webapp/images/emoji/qq/调皮.gif | Bin 0 -> 22344 bytes src/main/webapp/images/emoji/qq/购物.gif | Bin 0 -> 1077 bytes src/main/webapp/images/emoji/qq/足球.gif | Bin 0 -> 6933 bytes src/main/webapp/images/emoji/qq/跳绳.gif | Bin 0 -> 5488 bytes src/main/webapp/images/emoji/qq/跳跳.gif | Bin 0 -> 3666 bytes src/main/webapp/images/emoji/qq/车.gif | Bin 0 -> 1209 bytes src/main/webapp/images/emoji/qq/车厢.gif | Bin 0 -> 993 bytes src/main/webapp/images/emoji/qq/转圈.gif | Bin 0 -> 22942 bytes src/main/webapp/images/emoji/qq/邮件.gif | Bin 0 -> 919 bytes src/main/webapp/images/emoji/qq/鄙视.gif | Bin 0 -> 4840 bytes src/main/webapp/images/emoji/qq/酷.gif | Bin 0 -> 3246 bytes src/main/webapp/images/emoji/qq/钱.gif | Bin 0 -> 1529 bytes src/main/webapp/images/emoji/qq/闪电.gif | Bin 0 -> 895 bytes src/main/webapp/images/emoji/qq/闭嘴.gif | Bin 0 -> 14554 bytes src/main/webapp/images/emoji/qq/闹钟.gif | Bin 0 -> 1224 bytes src/main/webapp/images/emoji/qq/阴险.gif | Bin 0 -> 10508 bytes src/main/webapp/images/emoji/qq/难过.gif | Bin 0 -> 1951 bytes src/main/webapp/images/emoji/qq/雨伞.gif | Bin 0 -> 1071 bytes src/main/webapp/images/emoji/qq/青蛙.gif | Bin 0 -> 1489 bytes src/main/webapp/images/emoji/qq/面条.gif | Bin 0 -> 1236 bytes src/main/webapp/images/emoji/qq/鞭炮.gif | Bin 0 -> 1201 bytes src/main/webapp/images/emoji/qq/风车.gif | Bin 0 -> 1200 bytes src/main/webapp/images/emoji/qq/飞吻.gif | Bin 0 -> 1614 bytes src/main/webapp/images/emoji/qq/飞机.gif | Bin 0 -> 1253 bytes src/main/webapp/images/emoji/qq/饥饿.gif | Bin 0 -> 7384 bytes src/main/webapp/images/emoji/qq/饭.gif | Bin 0 -> 1302 bytes src/main/webapp/images/emoji/qq/香蕉.gif | Bin 0 -> 940 bytes src/main/webapp/images/emoji/qq/骷髅.gif | Bin 0 -> 1364 bytes .../webapp/images/emoji/qq/高铁右车头.gif | Bin 0 -> 1011 bytes .../webapp/images/emoji/qq/高铁左车头.gif | Bin 0 -> 959 bytes src/main/webapp/images/emoji/qq/鼓掌.gif | Bin 0 -> 25613 bytes src/main/webapp/images/emoji/tieba/haha.png | Bin 0 -> 2228 bytes src/main/webapp/images/emoji/tieba/不高兴.png | Bin 0 -> 3031 bytes src/main/webapp/images/emoji/tieba/乖.png | Bin 0 -> 3013 bytes src/main/webapp/images/emoji/tieba/冷.png | Bin 0 -> 3008 bytes src/main/webapp/images/emoji/tieba/勉强.png | Bin 0 -> 3040 bytes src/main/webapp/images/emoji/tieba/吐.png | Bin 0 -> 2909 bytes src/main/webapp/images/emoji/tieba/吐舌.png | Bin 0 -> 3131 bytes src/main/webapp/images/emoji/tieba/呵呵.png | Bin 0 -> 3117 bytes src/main/webapp/images/emoji/tieba/呼.png | Bin 0 -> 3085 bytes src/main/webapp/images/emoji/tieba/咦.png | Bin 0 -> 3053 bytes src/main/webapp/images/emoji/tieba/哈哈.png | Bin 0 -> 2956 bytes src/main/webapp/images/emoji/tieba/啊.png | Bin 0 -> 3021 bytes src/main/webapp/images/emoji/tieba/喷.png | Bin 0 -> 3084 bytes src/main/webapp/images/emoji/tieba/大拇指.png | Bin 0 -> 2007 bytes src/main/webapp/images/emoji/tieba/太开心.png | Bin 0 -> 3230 bytes src/main/webapp/images/emoji/tieba/委屈.png | Bin 0 -> 3117 bytes src/main/webapp/images/emoji/tieba/开心.png | Bin 0 -> 3098 bytes src/main/webapp/images/emoji/tieba/弱.png | Bin 0 -> 1769 bytes src/main/webapp/images/emoji/tieba/彩虹.png | Bin 0 -> 2083 bytes src/main/webapp/images/emoji/tieba/怒.png | Bin 0 -> 2785 bytes src/main/webapp/images/emoji/tieba/惊哭.png | Bin 0 -> 2916 bytes src/main/webapp/images/emoji/tieba/惊讶.png | Bin 0 -> 3137 bytes src/main/webapp/images/emoji/tieba/汗.png | Bin 0 -> 2979 bytes src/main/webapp/images/emoji/tieba/泪.png | Bin 0 -> 3151 bytes src/main/webapp/images/emoji/tieba/滑稽.png | Bin 0 -> 3098 bytes src/main/webapp/images/emoji/tieba/灯泡.png | Bin 0 -> 2075 bytes src/main/webapp/images/emoji/tieba/狂汗.png | Bin 0 -> 3078 bytes src/main/webapp/images/emoji/tieba/玫瑰.png | Bin 0 -> 2554 bytes src/main/webapp/images/emoji/tieba/生气.png | Bin 0 -> 3244 bytes src/main/webapp/images/emoji/tieba/疑问.png | Bin 0 -> 3080 bytes src/main/webapp/images/emoji/tieba/真棒.png | Bin 0 -> 3168 bytes src/main/webapp/images/emoji/tieba/睡觉.png | Bin 0 -> 3114 bytes src/main/webapp/images/emoji/tieba/礼物.png | Bin 0 -> 2278 bytes src/main/webapp/images/emoji/tieba/笑眼.png | Bin 0 -> 3142 bytes src/main/webapp/images/emoji/tieba/胜利.png | Bin 0 -> 2288 bytes src/main/webapp/images/emoji/tieba/花心.png | Bin 0 -> 3155 bytes src/main/webapp/images/emoji/tieba/茶杯.png | Bin 0 -> 2187 bytes src/main/webapp/images/emoji/tieba/鄙视.png | Bin 0 -> 3118 bytes src/main/webapp/images/emoji/tieba/酷.png | Bin 0 -> 3164 bytes src/main/webapp/images/emoji/tieba/钱.png | Bin 0 -> 3059 bytes src/main/webapp/images/emoji/tieba/钱币.png | Bin 0 -> 2532 bytes src/main/webapp/images/emoji/tieba/阴险.png | Bin 0 -> 3100 bytes src/main/webapp/images/emoji/tieba/音乐.png | Bin 0 -> 2272 bytes src/main/webapp/images/emoji/tieba/黑线.png | Bin 0 -> 3116 bytes src/main/webapp/images/emoji/weibo/aini.png | Bin 0 -> 2873 bytes .../webapp/images/emoji/weibo/aoteman.png | Bin 0 -> 2754 bytes src/main/webapp/images/emoji/weibo/baibai.png | Bin 0 -> 2726 bytes .../webapp/images/emoji/weibo/beishang.png | Bin 0 -> 2673 bytes src/main/webapp/images/emoji/weibo/bishi.png | Bin 0 -> 2777 bytes src/main/webapp/images/emoji/weibo/bizui.png | Bin 0 -> 2835 bytes .../webapp/images/emoji/weibo/chanzui.png | Bin 0 -> 2798 bytes .../webapp/images/emoji/weibo/chijing.png | Bin 0 -> 2866 bytes src/main/webapp/images/emoji/weibo/dahaqi.png | Bin 0 -> 2836 bytes src/main/webapp/images/emoji/weibo/dalian.png | Bin 0 -> 3059 bytes src/main/webapp/images/emoji/weibo/ding.png | Bin 0 -> 2309 bytes src/main/webapp/images/emoji/weibo/dog1.png | Bin 0 -> 3297 bytes src/main/webapp/images/emoji/weibo/dog10.png | Bin 0 -> 3130 bytes src/main/webapp/images/emoji/weibo/dog11.png | Bin 0 -> 2883 bytes src/main/webapp/images/emoji/weibo/dog12.png | Bin 0 -> 2926 bytes src/main/webapp/images/emoji/weibo/dog13.png | Bin 0 -> 3273 bytes src/main/webapp/images/emoji/weibo/dog14.png | Bin 0 -> 2580 bytes src/main/webapp/images/emoji/weibo/dog15.png | Bin 0 -> 3119 bytes src/main/webapp/images/emoji/weibo/dog2.png | Bin 0 -> 2840 bytes src/main/webapp/images/emoji/weibo/dog3.png | Bin 0 -> 3330 bytes src/main/webapp/images/emoji/weibo/dog4.png | Bin 0 -> 3298 bytes src/main/webapp/images/emoji/weibo/dog5.png | Bin 0 -> 3226 bytes src/main/webapp/images/emoji/weibo/dog6.png | Bin 0 -> 3281 bytes src/main/webapp/images/emoji/weibo/dog7.png | Bin 0 -> 3208 bytes src/main/webapp/images/emoji/weibo/dog8.png | Bin 0 -> 3180 bytes src/main/webapp/images/emoji/weibo/dog9.png | Bin 0 -> 3260 bytes src/main/webapp/images/emoji/weibo/doge.png | Bin 0 -> 3224 bytes src/main/webapp/images/emoji/weibo/erha.png | Bin 0 -> 5388 bytes src/main/webapp/images/emoji/weibo/feizao.png | Bin 0 -> 3112 bytes src/main/webapp/images/emoji/weibo/ganmao.png | Bin 0 -> 2742 bytes src/main/webapp/images/emoji/weibo/geili.png | Bin 0 -> 2449 bytes .../webapp/images/emoji/weibo/guzhang.png | Bin 0 -> 3015 bytes src/main/webapp/images/emoji/weibo/haha.png | Bin 0 -> 2660 bytes src/main/webapp/images/emoji/weibo/haixiu.png | Bin 0 -> 2845 bytes src/main/webapp/images/emoji/weibo/hehe.png | Bin 0 -> 2749 bytes .../webapp/images/emoji/weibo/heixian.png | Bin 0 -> 2734 bytes src/main/webapp/images/emoji/weibo/heng.png | Bin 0 -> 2642 bytes src/main/webapp/images/emoji/weibo/huaxin.png | Bin 0 -> 2794 bytes src/main/webapp/images/emoji/weibo/hufen.png | Bin 0 -> 2776 bytes src/main/webapp/images/emoji/weibo/jiong.png | Bin 0 -> 2537 bytes src/main/webapp/images/emoji/weibo/jiyan.png | Bin 0 -> 2789 bytes src/main/webapp/images/emoji/weibo/keai.png | Bin 0 -> 2810 bytes src/main/webapp/images/emoji/weibo/kelian.png | Bin 0 -> 2867 bytes src/main/webapp/images/emoji/weibo/ku.png | Bin 0 -> 2830 bytes src/main/webapp/images/emoji/weibo/kun.png | Bin 0 -> 2739 bytes .../webapp/images/emoji/weibo/landelini.png | Bin 0 -> 2804 bytes src/main/webapp/images/emoji/weibo/lei.png | Bin 0 -> 2946 bytes src/main/webapp/images/emoji/weibo/meng.png | Bin 0 -> 2258 bytes src/main/webapp/images/emoji/weibo/miao.png | Bin 0 -> 3229 bytes .../webapp/images/emoji/weibo/nanhaier.png | Bin 0 -> 2349 bytes src/main/webapp/images/emoji/weibo/nu.png | Bin 0 -> 2769 bytes src/main/webapp/images/emoji/weibo/numa.png | Bin 0 -> 2766 bytes .../webapp/images/emoji/weibo/nvhaier.png | Bin 0 -> 2918 bytes src/main/webapp/images/emoji/weibo/qian.png | Bin 0 -> 2774 bytes src/main/webapp/images/emoji/weibo/qinqin.png | Bin 0 -> 2863 bytes src/main/webapp/images/emoji/weibo/shayan.png | Bin 0 -> 2749 bytes .../webapp/images/emoji/weibo/shengbing.png | Bin 0 -> 2328 bytes src/main/webapp/images/emoji/weibo/shenma.png | Bin 0 -> 2947 bytes .../webapp/images/emoji/weibo/shenshou.png | Bin 0 -> 3244 bytes .../webapp/images/emoji/weibo/shiwang.png | Bin 0 -> 2700 bytes src/main/webapp/images/emoji/weibo/shuai.png | Bin 0 -> 2845 bytes .../webapp/images/emoji/weibo/shuijiao.png | Bin 0 -> 2622 bytes src/main/webapp/images/emoji/weibo/sikao.png | Bin 0 -> 2900 bytes .../webapp/images/emoji/weibo/taikaixin.png | Bin 0 -> 2893 bytes .../webapp/images/emoji/weibo/touxiao.png | Bin 0 -> 2848 bytes src/main/webapp/images/emoji/weibo/tu.png | Bin 0 -> 2575 bytes src/main/webapp/images/emoji/weibo/tuzi.png | Bin 0 -> 2695 bytes src/main/webapp/images/emoji/weibo/v5.png | Bin 0 -> 2080 bytes .../webapp/images/emoji/weibo/wabishi.png | Bin 0 -> 2779 bytes src/main/webapp/images/emoji/weibo/weiqu.png | Bin 0 -> 2835 bytes src/main/webapp/images/emoji/weibo/xi.png | Bin 0 -> 1826 bytes src/main/webapp/images/emoji/weibo/xiaoku.png | Bin 0 -> 2722 bytes .../webapp/images/emoji/weibo/xiongmao.png | Bin 0 -> 2521 bytes src/main/webapp/images/emoji/weibo/xixi.png | Bin 0 -> 2725 bytes src/main/webapp/images/emoji/weibo/xu.png | Bin 0 -> 2782 bytes .../webapp/images/emoji/weibo/yinxian.png | Bin 0 -> 2828 bytes src/main/webapp/images/emoji/weibo/yiwen.png | Bin 0 -> 2752 bytes .../webapp/images/emoji/weibo/youhengheng.png | Bin 0 -> 2646 bytes src/main/webapp/images/emoji/weibo/yun.png | Bin 0 -> 2803 bytes src/main/webapp/images/emoji/weibo/zhi.png | Bin 0 -> 3583 bytes .../webapp/images/emoji/weibo/zhuakuang.png | Bin 0 -> 2821 bytes src/main/webapp/images/emoji/weibo/zhutou.png | Bin 0 -> 2807 bytes src/main/webapp/images/emoji/weibo/zuiyou.png | Bin 0 -> 343 bytes .../webapp/images/emoji/weibo/zuohengheng.png | Bin 0 -> 2638 bytes src/main/webapp/images/lingtao.jpg | Bin 0 -> 45174 bytes src/main/webapp/images/login.jpg | Bin 0 -> 11177 bytes src/main/webapp/images/timg.jpg | Bin 0 -> 12497 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes src/main/webapp/img/bg3.jpg | Bin 0 -> 3406655 bytes src/main/webapp/img/bg401.jpg | Bin 0 -> 128497 bytes src/main/webapp/img/handle.jpg | Bin 0 -> 157682 bytes src/main/webapp/img/logo.jpg | Bin 0 -> 6656 bytes src/main/webapp/js/acountExpressFee.js | 66 + .../webapp/js/acountExpressFeeTooWeight.js | 66 + src/main/webapp/js/article.js | 178 + src/main/webapp/js/bug.js | 87 + src/main/webapp/js/carousel.js | 43 + src/main/webapp/js/customerAward.js | 274 + src/main/webapp/js/customerData.js | 277 + src/main/webapp/js/difference.js | 228 + src/main/webapp/js/draggabilly.pkgd.min.js | 26 + src/main/webapp/js/echartBar_kefu.js | 185 + src/main/webapp/js/echartBar_summary.js | 343 ++ src/main/webapp/js/expressFee.js | 167 + src/main/webapp/js/extract.js | 267 + src/main/webapp/js/file.js | 252 + src/main/webapp/js/finance.js | 282 + src/main/webapp/js/finance2.js | 282 + src/main/webapp/js/finance3.js | 281 + src/main/webapp/js/finance4.js | 281 + src/main/webapp/js/finance5.js | 281 + src/main/webapp/js/finance6.js | 281 + src/main/webapp/js/finance7.js | 281 + src/main/webapp/js/getTrainData.js | 44 + src/main/webapp/js/imgUpload.js | 132 + src/main/webapp/js/information.js | 145 + src/main/webapp/js/kefu.js | 71 + src/main/webapp/js/loginIp.js | 210 + src/main/webapp/js/packery.pkgd.min.js | 13 + src/main/webapp/js/product.js | 136 + src/main/webapp/js/question.js | 184 + src/main/webapp/js/remark.js | 69 + src/main/webapp/js/role.js | 188 + src/main/webapp/js/searchPro.js | 154 + src/main/webapp/js/updateLog.js | 164 + src/main/webapp/js/user.js | 286 + src/main/webapp/login.jsp | 392 ++ src/main/webapp/static/css/adminLogin.css | 149 + src/main/webapp/static/css/formSelects-v4.css | 174 + src/main/webapp/static/css/jquery-ui.min.css | 4 + .../static/css/metroStyle/img/line_conn.png | Bin 0 -> 933 bytes .../static/css/metroStyle/img/loading.gif | Bin 0 -> 381 bytes .../static/css/metroStyle/img/metro.gif | Bin 0 -> 4679 bytes .../static/css/metroStyle/img/metro.png | Bin 0 -> 5283 bytes .../static/css/metroStyle/metroStyle.css | 96 + src/main/webapp/static/css/style.css | 54 + src/main/webapp/static/js/bootstrap.min.js | 7 + src/main/webapp/static/js/dateUtil.js | 409 ++ src/main/webapp/static/js/echarts.min.js | 22 + src/main/webapp/static/js/formSelects-v4.js | 1791 ++++++ src/main/webapp/static/js/jquery-ui.min.js | 13 + src/main/webapp/static/js/jquery.min.js | 4 + .../webapp/static/js/jquery.table2excel.js | 267 + src/main/webapp/static/js/jquery.ztree.all.js | 3835 +++++++++++++ .../webapp/static/js/jquery.ztree.all.min.js | 166 + .../webapp/static/js/jquery.ztree.core.js | 1983 +++++++ .../webapp/static/js/jquery.ztree.core.min.js | 75 + .../webapp/static/js/jquery.ztree.excheck.js | 648 +++ .../static/js/jquery.ztree.excheck.min.js | 34 + .../webapp/static/js/jquery.ztree.exedit.js | 1203 ++++ .../static/js/jquery.ztree.exedit.min.js | 53 + .../webapp/static/js/jquery.ztree.exhide.js | 400 ++ .../static/js/jquery.ztree.exhide.min.js | 23 + src/main/webapp/static/js/treeGrid.js | 1473 +++++ src/main/webapp/static/js/xm-select.js | 8 + src/main/webapp/static/layui/css/layui.css | 2 + .../webapp/static/layui/css/layui.mobile.css | 2 + .../webapp/static/layui/css/modules/code.css | 2 + .../css/modules/laydate/default/laydate.css | 2 + .../css/modules/layer/default/icon-ext.png | Bin 0 -> 5911 bytes .../layui/css/modules/layer/default/icon.png | Bin 0 -> 11493 bytes .../layui/css/modules/layer/default/layer.css | 2 + .../css/modules/layer/default/loading-0.gif | Bin 0 -> 5793 bytes .../css/modules/layer/default/loading-1.gif | Bin 0 -> 701 bytes .../css/modules/layer/default/loading-2.gif | Bin 0 -> 1787 bytes .../webapp/static/layui/font/iconfont.eot | Bin 0 -> 46684 bytes .../webapp/static/layui/font/iconfont.svg | 554 ++ .../webapp/static/layui/font/iconfont.ttf | Bin 0 -> 46508 bytes .../webapp/static/layui/font/iconfont.woff | Bin 0 -> 30628 bytes .../webapp/static/layui/font/iconfont.woff2 | Bin 0 -> 25964 bytes .../webapp/static/layui/images/face/0.gif | Bin 0 -> 2689 bytes .../webapp/static/layui/images/face/1.gif | Bin 0 -> 5514 bytes .../webapp/static/layui/images/face/10.gif | Bin 0 -> 2797 bytes .../webapp/static/layui/images/face/11.gif | Bin 0 -> 4121 bytes .../webapp/static/layui/images/face/12.gif | Bin 0 -> 3361 bytes .../webapp/static/layui/images/face/13.gif | Bin 0 -> 7425 bytes .../webapp/static/layui/images/face/14.gif | Bin 0 -> 2375 bytes .../webapp/static/layui/images/face/15.gif | Bin 0 -> 1793 bytes .../webapp/static/layui/images/face/16.gif | Bin 0 -> 6721 bytes .../webapp/static/layui/images/face/17.gif | Bin 0 -> 4439 bytes .../webapp/static/layui/images/face/18.gif | Bin 0 -> 3017 bytes .../webapp/static/layui/images/face/19.gif | Bin 0 -> 3040 bytes .../webapp/static/layui/images/face/2.gif | Bin 0 -> 3222 bytes .../webapp/static/layui/images/face/20.gif | Bin 0 -> 5144 bytes .../webapp/static/layui/images/face/21.gif | Bin 0 -> 5191 bytes .../webapp/static/layui/images/face/22.gif | Bin 0 -> 9823 bytes .../webapp/static/layui/images/face/23.gif | Bin 0 -> 3792 bytes .../webapp/static/layui/images/face/24.gif | Bin 0 -> 8096 bytes .../webapp/static/layui/images/face/25.gif | Bin 0 -> 3127 bytes .../webapp/static/layui/images/face/26.gif | Bin 0 -> 3291 bytes .../webapp/static/layui/images/face/27.gif | Bin 0 -> 4377 bytes .../webapp/static/layui/images/face/28.gif | Bin 0 -> 2793 bytes .../webapp/static/layui/images/face/29.gif | Bin 0 -> 4854 bytes .../webapp/static/layui/images/face/3.gif | Bin 0 -> 4017 bytes .../webapp/static/layui/images/face/30.gif | Bin 0 -> 2555 bytes .../webapp/static/layui/images/face/31.gif | Bin 0 -> 2002 bytes .../webapp/static/layui/images/face/32.gif | Bin 0 -> 3481 bytes .../webapp/static/layui/images/face/33.gif | Bin 0 -> 2454 bytes .../webapp/static/layui/images/face/34.gif | Bin 0 -> 3700 bytes .../webapp/static/layui/images/face/35.gif | Bin 0 -> 1800 bytes .../webapp/static/layui/images/face/36.gif | Bin 0 -> 2331 bytes .../webapp/static/layui/images/face/37.gif | Bin 0 -> 1513 bytes .../webapp/static/layui/images/face/38.gif | Bin 0 -> 3615 bytes .../webapp/static/layui/images/face/39.gif | Bin 0 -> 6495 bytes .../webapp/static/layui/images/face/4.gif | Bin 0 -> 5689 bytes .../webapp/static/layui/images/face/40.gif | Bin 0 -> 3154 bytes .../webapp/static/layui/images/face/41.gif | Bin 0 -> 3644 bytes .../webapp/static/layui/images/face/42.gif | Bin 0 -> 5305 bytes .../webapp/static/layui/images/face/43.gif | Bin 0 -> 2674 bytes .../webapp/static/layui/images/face/44.gif | Bin 0 -> 4126 bytes .../webapp/static/layui/images/face/45.gif | Bin 0 -> 3417 bytes .../webapp/static/layui/images/face/46.gif | Bin 0 -> 3007 bytes .../webapp/static/layui/images/face/47.gif | Bin 0 -> 2333 bytes .../webapp/static/layui/images/face/48.gif | Bin 0 -> 2689 bytes .../webapp/static/layui/images/face/49.gif | Bin 0 -> 2315 bytes .../webapp/static/layui/images/face/5.gif | Bin 0 -> 4567 bytes .../webapp/static/layui/images/face/50.gif | Bin 0 -> 5866 bytes .../webapp/static/layui/images/face/51.gif | Bin 0 -> 2785 bytes .../webapp/static/layui/images/face/52.gif | Bin 0 -> 777 bytes .../webapp/static/layui/images/face/53.gif | Bin 0 -> 2127 bytes .../webapp/static/layui/images/face/54.gif | Bin 0 -> 2196 bytes .../webapp/static/layui/images/face/55.gif | Bin 0 -> 1971 bytes .../webapp/static/layui/images/face/56.gif | Bin 0 -> 2034 bytes .../webapp/static/layui/images/face/57.gif | Bin 0 -> 2705 bytes .../webapp/static/layui/images/face/58.gif | Bin 0 -> 2258 bytes .../webapp/static/layui/images/face/59.gif | Bin 0 -> 10311 bytes .../webapp/static/layui/images/face/6.gif | Bin 0 -> 2213 bytes .../webapp/static/layui/images/face/60.gif | Bin 0 -> 3245 bytes .../webapp/static/layui/images/face/61.gif | Bin 0 -> 2495 bytes .../webapp/static/layui/images/face/62.gif | Bin 0 -> 2017 bytes .../webapp/static/layui/images/face/63.gif | Bin 0 -> 5871 bytes .../webapp/static/layui/images/face/64.gif | Bin 0 -> 6448 bytes .../webapp/static/layui/images/face/65.gif | Bin 0 -> 3576 bytes .../webapp/static/layui/images/face/66.gif | Bin 0 -> 3029 bytes .../webapp/static/layui/images/face/67.gif | Bin 0 -> 2701 bytes .../webapp/static/layui/images/face/68.gif | Bin 0 -> 1424 bytes .../webapp/static/layui/images/face/69.gif | Bin 0 -> 2431 bytes .../webapp/static/layui/images/face/7.gif | Bin 0 -> 3398 bytes .../webapp/static/layui/images/face/70.gif | Bin 0 -> 4590 bytes .../webapp/static/layui/images/face/71.gif | Bin 0 -> 5304 bytes .../webapp/static/layui/images/face/8.gif | Bin 0 -> 4050 bytes .../webapp/static/layui/images/face/9.gif | Bin 0 -> 4221 bytes .../static/layui/lay/modules/carousel.js | 2 + .../webapp/static/layui/lay/modules/code.js | 2 + .../static/layui/lay/modules/colorpicker.js | 2 + .../static/layui/lay/modules/element.js | 482 ++ .../webapp/static/layui/lay/modules/flow.js | 2 + .../webapp/static/layui/lay/modules/form.js | 2 + .../webapp/static/layui/lay/modules/jquery.js | 5 + .../static/layui/lay/modules/laydate.js | 2 + .../static/layui/lay/modules/layedit.js | 2 + .../webapp/static/layui/lay/modules/layer.js | 2 + .../static/layui/lay/modules/laypage.js | 2 + .../webapp/static/layui/lay/modules/laytpl.js | 2 + .../webapp/static/layui/lay/modules/mobile.js | 2 + .../webapp/static/layui/lay/modules/rate.js | 2 + .../webapp/static/layui/lay/modules/slider.js | 2 + .../webapp/static/layui/lay/modules/table.js | 2 + .../static/layui/lay/modules/transfer.js | 2 + .../webapp/static/layui/lay/modules/tree.js | 2 + .../webapp/static/layui/lay/modules/upload.js | 2 + .../webapp/static/layui/lay/modules/util.js | 2 + src/main/webapp/static/layui/layui.all.js | 5 + src/main/webapp/static/layui/layui.js | 270 + src/main/webapp/views/acountExpressFee.jsp | 37 + .../views/acountExpressFeeTooWeight.jsp | 33 + src/main/webapp/views/addBirthDay.jsp | 96 + src/main/webapp/views/article/addArticle.jsp | 123 + src/main/webapp/views/article/fileImport.jsp | 527 ++ src/main/webapp/views/article/infoArticle.jsp | 85 + .../webapp/views/article/updateArticle.jsp | 113 + src/main/webapp/views/common.jsp | 7 + src/main/webapp/views/copyResult.jsp | 27 + src/main/webapp/views/errorQuestion.jsp | 62 + src/main/webapp/views/information.jsp | 163 + src/main/webapp/views/main.jsp | 946 +++ src/main/webapp/views/product/acidTags.jsp | 208 + src/main/webapp/views/product/angingCloth.jsp | 277 + src/main/webapp/views/product/banqi.jsp | 271 + src/main/webapp/views/product/blackCard.jsp | 311 + src/main/webapp/views/product/canopy.jsp | 332 ++ src/main/webapp/views/product/canvas.jsp | 330 ++ src/main/webapp/views/product/card.jsp | 445 ++ src/main/webapp/views/product/chuanqi.jsp | 192 + src/main/webapp/views/product/clothes.jsp | 603 ++ src/main/webapp/views/product/coaster.jsp | 314 + .../webapp/views/product/colorEnvelope.jsp | 466 ++ src/main/webapp/views/product/copyPaper.jsp | 279 + src/main/webapp/views/product/coupon.jsp | 3089 ++++++++++ src/main/webapp/views/product/coupon1.jsp | 1559 +++++ src/main/webapp/views/product/coupon22.jsp | 112 + src/main/webapp/views/product/credentials.jsp | 334 ++ src/main/webapp/views/product/cupHolder.jsp | 313 + src/main/webapp/views/product/cupSet.jsp | 569 ++ src/main/webapp/views/product/deskSticker.jsp | 311 + src/main/webapp/views/product/diploma.jsp | 178 + src/main/webapp/views/product/disu.jsp | 261 + src/main/webapp/views/product/doorList.jsp | 45 + src/main/webapp/views/product/envelope.jsp | 314 + src/main/webapp/views/product/envelopeCG.jsp | 36 + src/main/webapp/views/product/envelopeZDY.jsp | 34 + src/main/webapp/views/product/fan.jsp | 379 ++ src/main/webapp/views/product/fgq.jsp | 231 + src/main/webapp/views/product/fileCover.jsp | 271 + src/main/webapp/views/product/flags.jsp | 333 ++ src/main/webapp/views/product/flyer.jsp | 382 ++ src/main/webapp/views/product/freehand.jsp | 268 + src/main/webapp/views/product/girdle.jsp | 58 + src/main/webapp/views/product/greetCard.jsp | 115 + src/main/webapp/views/product/handBag.jsp | 754 +++ src/main/webapp/views/product/handBagCG.jsp | 53 + src/main/webapp/views/product/handBagTJ.jsp | 38 + src/main/webapp/views/product/handBagZDY.jsp | 25 + src/main/webapp/views/product/hykkt.jsp | 291 + src/main/webapp/views/product/insertCard.jsp | 360 ++ src/main/webapp/views/product/katie.jsp | 290 + src/main/webapp/views/product/kzt.jsp | 200 + src/main/webapp/views/product/lotteryCard.jsp | 111 + src/main/webapp/views/product/lsz.jsp | 381 ++ src/main/webapp/views/product/medal.jsp | 591 ++ .../webapp/views/product/metal - 副本.jsp | 405 ++ src/main/webapp/views/product/metal.jsp | 461 ++ src/main/webapp/views/product/msd.jsp | 260 + src/main/webapp/views/product/notePaper.jsp | 533 ++ src/main/webapp/views/product/otherCard.jsp | 37 + src/main/webapp/views/product/packingBox.jsp | 244 + src/main/webapp/views/product/paperCup.jsp | 205 + src/main/webapp/views/product/parkingCard.jsp | 111 + .../webapp/views/product/pictureAlbum.jsp | 412 ++ src/main/webapp/views/product/placeMat.jsp | 220 + src/main/webapp/views/product/pointCard.jsp | 111 + src/main/webapp/views/product/poster.jsp | 1745 ++++++ src/main/webapp/views/product/praiseCard.jsp | 111 + src/main/webapp/views/product/programCard.jsp | 235 + src/main/webapp/views/product/pvcCard.jsp | 375 ++ src/main/webapp/views/product/pvcfigure.jsp | 335 ++ src/main/webapp/views/product/rollLabel.jsp | 320 ++ src/main/webapp/views/product/roomCard.jsp | 294 + src/main/webapp/views/product/roomCardCG.jsp | 30 + src/main/webapp/views/product/roomCardZDY.jsp | 25 + src/main/webapp/views/product/scratchCard.jsp | 116 + src/main/webapp/views/product/slq.jsp | 234 + src/main/webapp/views/product/specialCard.jsp | 90 + .../webapp/views/product/specialCard2.jsp | 704 +++ .../webapp/views/product/stickers - 副本.jsp | 1347 +++++ src/main/webapp/views/product/stickers.jsp | 1741 ++++++ .../webapp/views/product/stickersdouble.jsp | 35 + src/main/webapp/views/product/tablecolth.jsp | 250 + src/main/webapp/views/product/tag.jsp | 84 + src/main/webapp/views/product/tagClothes.jsp | 845 +++ src/main/webapp/views/product/tags.jsp | 444 ++ src/main/webapp/views/product/timeCard.jsp | 113 + src/main/webapp/views/product/warmSticker.jsp | 232 + src/main/webapp/views/product/weddingCard.jsp | 302 + src/main/webapp/views/product/wineCard.jsp | 110 + src/main/webapp/views/product/ykl.jsp | 261 + .../webapp/views/productImg/addImgUpload.jsp | 176 + .../webapp/views/productImg/imgUpload.jsp | 73 + .../views/productImg/updateImgUpload.jsp | 111 + src/main/webapp/views/readme.jsp | 228 + src/main/webapp/views/system/bug/addBug.jsp | 126 + src/main/webapp/views/system/bug/bug.jsp | 51 + .../system/customerAward/customerAward.jsp | 109 + .../system/customerData/addCustomerData.jsp | 159 + .../system/customerData/customerData.jsp | 176 + .../customerData/updateCustomerData.jsp | 131 + .../content/addCustomerAttitudeContent.jsp | 111 + .../content/customerAttitudeContent.jsp | 253 + .../content/updateCustomerAttitudeContent.jsp | 173 + .../addCustomerAttitudeKindLabel.jsp | 88 + .../kindLabel/customerAttitudeKindLabel.jsp | 213 + .../updateCustomerAttitudeKindLabel.jsp | 88 + .../proType/addCustomerAttitudeProType.jsp | 86 + .../proType/customerAttitudeProType.jsp | 243 + .../proType/updateCustomerAttitudeProType.jsp | 88 + .../attitude/showCustomerAttitudeContent.jsp | 129 + .../content/addCustomerBottomLineContent.jsp | 111 + .../content/customerBottomLineContent.jsp | 253 + .../updateCustomerBottomLineContent.jsp | 173 + .../addCustomerBottomLineKindLabel.jsp | 88 + .../kindLabel/customerBottomLineKindLabel.jsp | 213 + .../updateCustomerBottomLineKindLabel.jsp | 88 + .../proType/addCustomerBottomLineProType.jsp | 86 + .../proType/customerBottomLineProType.jsp | 243 + .../updateCustomerBottomLineProType.jsp | 88 + .../showCustomerBottomLineContent.jsp | 129 + .../content/addCustomerIntroduceContent.jsp | 111 + .../content/customerIntroduceContent.jsp | 253 + .../updateCustomerIntroduceContent.jsp | 173 + .../addCustomerIntroduceKindLabel.jsp | 88 + .../kindLabel/customerIntroduceKindLabel.jsp | 213 + .../updateCustomerIntroduceKindLabel.jsp | 88 + .../proType/addCustomerIntroduceProType.jsp | 86 + .../proType/customerIntroduceProType.jsp | 243 + .../updateCustomerIntroduceProType.jsp | 88 + .../showCustomerIntroduceContent.jsp | 129 + .../content/addCustomerKnowledgeContent.jsp | 124 + .../content/customerKnowledgeContent.jsp | 253 + .../updateCustomerKnowledgeContent.jsp | 185 + .../addCustomerKnowledgeKindLabel.jsp | 88 + .../kindLabel/customerKnowledgeKindLabel.jsp | 213 + .../updateCustomerKnowledgeKindLabel.jsp | 88 + .../proType/addCustomerKnowledgeProType.jsp | 86 + .../proType/customerKnowledgeProType.jsp | 243 + .../updateCustomerKnowledgeProType.jsp | 88 + .../showCustomerKnowledgeContent.jsp | 129 + .../content/addCustomerSaleSkillContent.jsp | 111 + .../content/customerSaleSkillContent.jsp | 253 + .../updateCustomerSaleSkillContent.jsp | 172 + .../addCustomerSaleSkillKindLabel.jsp | 88 + .../kindLabel/customerSaleSkillKindLabel.jsp | 213 + .../updateCustomerSaleSkillKindLabel.jsp | 88 + .../proType/addCustomerSaleSkillProType.jsp | 86 + .../proType/customerSaleSkillProType.jsp | 243 + .../updateCustomerSaleSkillProType.jsp | 88 + .../showCustomerSaleSkillContent.jsp | 129 + .../skill/content/addCustomerSkillContent.jsp | 111 + .../skill/content/customerSkillContent.jsp | 253 + .../content/updateCustomerSkillContent.jsp | 173 + .../kindLabel/addCustomerSkillKindLabel.jsp | 88 + .../kindLabel/customerSkillKindLabel.jsp | 213 + .../updateCustomerSkillKindLabel.jsp | 88 + .../skill/proType/addCustomerSkillProType.jsp | 86 + .../skill/proType/customerSkillProType.jsp | 243 + .../proType/updateCustomerSkillProType.jsp | 88 + .../skill/showCustomerSkillContent.jsp | 129 + .../views/system/expressFee/addExpressFee.jsp | 81 + .../views/system/expressFee/expressFee.jsp | 69 + .../system/expressFee/updateExpressFee.jsp | 75 + .../views/system/finance/extract/extract.jsp | 84 + .../webapp/views/system/finance/finance.jsp | 84 + .../webapp/views/system/finance/finance2.jsp | 84 + .../webapp/views/system/finance/finance3.jsp | 86 + .../webapp/views/system/finance/finance4.jsp | 85 + .../webapp/views/system/finance/finance5.jsp | 86 + .../webapp/views/system/finance/finance6.jsp | 86 + .../webapp/views/system/finance/finance7.jsp | 86 + .../system/financeDifference/difference.jsp | 83 + .../system/information/addInformation.jsp | 81 + .../views/system/information/information.jsp | 70 + .../system/information/updateInformation.jsp | 75 + .../views/system/loginIp/addLoginIp.jsp | 101 + .../webapp/views/system/loginIp/loginIp.jsp | 71 + .../views/system/loginIp/updateLoginIp.jsp | 93 + .../webapp/views/system/loginLog/loginLog.jsp | 122 + .../webapp/views/system/permission/index.jsp | 56 + .../webapp/views/system/product/product.jsp | 65 + .../views/system/question/addQuestion.jsp | 112 + .../webapp/views/system/question/question.jsp | 77 + .../views/system/question/updateQuestion.jsp | 107 + .../views/system/quoteData/addOrderNumber.jsp | 112 + .../views/system/quoteData/kefuTotal.jsp | 138 + .../views/system/quoteData/quoteData.jsp | 628 ++ .../webapp/views/system/quoteData/summary.jsp | 141 + .../webapp/views/system/quoteLog/quoteLog.jsp | 212 + src/main/webapp/views/system/role/addRole.jsp | 98 + src/main/webapp/views/system/role/role.jsp | 99 + .../webapp/views/system/role/updateRole.jsp | 79 + .../views/system/searchPro/addSearchPro.jsp | 105 + .../views/system/searchPro/searchPro.jsp | 59 + .../webapp/views/system/updateLog/addLog.jsp | 109 + .../webapp/views/system/updateLog/log.jsp | 67 + .../views/system/updateLog/updateLog.jsp | 98 + src/main/webapp/views/system/user/addUser.jsp | 214 + .../views/system/user/updatePassword.jsp | 134 + .../webapp/views/system/user/updateUser.jsp | 198 + src/main/webapp/views/system/user/user.jsp | 194 + src/main/webapp/views/testPaper.jsp | 434 ++ src/main/webapp/views/videoPaper.jsp | 155 + .../java/quote_price/LunarToSolarTest.java | 39 + src/test/java/quote_price/StringSubTest.java | 20 + src/test/java/quote_price/Test.java | 60 + src/test/java/quote_price/TestMaxMin.java | 91 + src/test/java/quote_price/TestStickers.java | 22 + 1113 files changed, 107789 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 pom.properties create mode 100644 pom.xml create mode 100644 src/main/java/lingtao/net/base/ActionMessage.java create mode 100644 src/main/java/lingtao/net/bean/Article.java create mode 100644 src/main/java/lingtao/net/bean/ArticleExample.java create mode 100644 src/main/java/lingtao/net/bean/Bug.java create mode 100644 src/main/java/lingtao/net/bean/CustomerAward.java create mode 100644 src/main/java/lingtao/net/bean/CustomerData.java create mode 100644 src/main/java/lingtao/net/bean/CustomerTrainContent.java create mode 100644 src/main/java/lingtao/net/bean/CustomerTrainKindLabel.java create mode 100644 src/main/java/lingtao/net/bean/CustomerTrainProType.java create mode 100644 src/main/java/lingtao/net/bean/ExpressFee.java create mode 100644 src/main/java/lingtao/net/bean/Finance.java create mode 100644 src/main/java/lingtao/net/bean/FinanceDifference.java create mode 100644 src/main/java/lingtao/net/bean/FinanceExtract.java create mode 100644 src/main/java/lingtao/net/bean/Information.java create mode 100644 src/main/java/lingtao/net/bean/LoginIp.java create mode 100644 src/main/java/lingtao/net/bean/LoginLog.java create mode 100644 src/main/java/lingtao/net/bean/Msg.java create mode 100644 src/main/java/lingtao/net/bean/MyFile.java create mode 100644 src/main/java/lingtao/net/bean/MyFileExample.java create mode 100644 src/main/java/lingtao/net/bean/Product.java create mode 100644 src/main/java/lingtao/net/bean/ProductImg.java create mode 100644 src/main/java/lingtao/net/bean/Question.java create mode 100644 src/main/java/lingtao/net/bean/QuoteData.java create mode 100644 src/main/java/lingtao/net/bean/QuoteLog.java create mode 100644 src/main/java/lingtao/net/bean/SysDictProduct.java create mode 100644 src/main/java/lingtao/net/bean/SysDictSearchPro.java create mode 100644 src/main/java/lingtao/net/bean/SysPermission.java create mode 100644 src/main/java/lingtao/net/bean/SysRole.java create mode 100644 src/main/java/lingtao/net/bean/SysUser.java create mode 100644 src/main/java/lingtao/net/bean/UpdateLog.java create mode 100644 src/main/java/lingtao/net/config/ResourceServerConfig.java create mode 100644 src/main/java/lingtao/net/controller/AcountController.java create mode 100644 src/main/java/lingtao/net/controller/ArticleController.java create mode 100644 src/main/java/lingtao/net/controller/BugController.java create mode 100644 src/main/java/lingtao/net/controller/CustomerAwardController.java create mode 100644 src/main/java/lingtao/net/controller/CustomerDataControlle.java create mode 100644 src/main/java/lingtao/net/controller/CustomerTrainController.java create mode 100644 src/main/java/lingtao/net/controller/ExpressFeeController.java create mode 100644 src/main/java/lingtao/net/controller/FileController.java create mode 100644 src/main/java/lingtao/net/controller/Finance2Controller.java create mode 100644 src/main/java/lingtao/net/controller/Finance3Controller.java create mode 100644 src/main/java/lingtao/net/controller/Finance4Controller.java create mode 100644 src/main/java/lingtao/net/controller/Finance5Controller.java create mode 100644 src/main/java/lingtao/net/controller/Finance6Controller.java create mode 100644 src/main/java/lingtao/net/controller/Finance7Controller.java create mode 100644 src/main/java/lingtao/net/controller/FinanceController.java create mode 100644 src/main/java/lingtao/net/controller/FinanceDifferenceController.java create mode 100644 src/main/java/lingtao/net/controller/FinanceExtractController.java create mode 100644 src/main/java/lingtao/net/controller/InformationController.java create mode 100644 src/main/java/lingtao/net/controller/LoginIpController.java create mode 100644 src/main/java/lingtao/net/controller/LoginLogController.java create mode 100644 src/main/java/lingtao/net/controller/ProductController.java create mode 100644 src/main/java/lingtao/net/controller/ProductImgController.java create mode 100644 src/main/java/lingtao/net/controller/QuestionController.java create mode 100644 src/main/java/lingtao/net/controller/QuoteDataController.java create mode 100644 src/main/java/lingtao/net/controller/QuoteLogController.java create mode 100644 src/main/java/lingtao/net/controller/SysDictSearchProController.java create mode 100644 src/main/java/lingtao/net/controller/SysPermissionController.java create mode 100644 src/main/java/lingtao/net/controller/SysRoleController.java create mode 100644 src/main/java/lingtao/net/controller/SysUserController.java create mode 100644 src/main/java/lingtao/net/controller/UpdateLogControllef.java create mode 100644 src/main/java/lingtao/net/dao/ArticleMapper.java create mode 100644 src/main/java/lingtao/net/dao/BugMapper.java create mode 100644 src/main/java/lingtao/net/dao/CommonDao.java create mode 100644 src/main/java/lingtao/net/dao/CustomerAwardMapper.java create mode 100644 src/main/java/lingtao/net/dao/CustomerDataMapper.java create mode 100644 src/main/java/lingtao/net/dao/CustomerTrainMapper.java create mode 100644 src/main/java/lingtao/net/dao/ExpressFeeMapper.java create mode 100644 src/main/java/lingtao/net/dao/Finance2Mapper.java create mode 100644 src/main/java/lingtao/net/dao/Finance3Mapper.java create mode 100644 src/main/java/lingtao/net/dao/FinanceDifferenceMapper.java create mode 100644 src/main/java/lingtao/net/dao/FinanceExtractMapper.java create mode 100644 src/main/java/lingtao/net/dao/FinanceMapper.java create mode 100644 src/main/java/lingtao/net/dao/InformationMapper.java create mode 100644 src/main/java/lingtao/net/dao/LoginIpMapper.java create mode 100644 src/main/java/lingtao/net/dao/LoginLogMapper.java create mode 100644 src/main/java/lingtao/net/dao/MyFileMapper.java create mode 100644 src/main/java/lingtao/net/dao/ProductImgMapper.java create mode 100644 src/main/java/lingtao/net/dao/ProductMapper.java create mode 100644 src/main/java/lingtao/net/dao/QuestionMapper.java create mode 100644 src/main/java/lingtao/net/dao/QuoteDataMapper.java create mode 100644 src/main/java/lingtao/net/dao/QuoteLogMapper.java create mode 100644 src/main/java/lingtao/net/dao/SysDictSearchProMapper.java create mode 100644 src/main/java/lingtao/net/dao/SysPermissionMapper.java create mode 100644 src/main/java/lingtao/net/dao/SysRoleMapper.java create mode 100644 src/main/java/lingtao/net/dao/SysUserMapper.java create mode 100644 src/main/java/lingtao/net/dao/UpdateLogMapper.java create mode 100644 src/main/java/lingtao/net/entity/ClothingTag.java create mode 100644 src/main/java/lingtao/net/entity/SelfAdhesiveSticker.java create mode 100644 src/main/java/lingtao/net/enums/ClothingTagMater.java create mode 100644 src/main/java/lingtao/net/enums/ClothingTagTechEnum.java create mode 100644 src/main/java/lingtao/net/enums/ProductEnum.java create mode 100644 src/main/java/lingtao/net/enums/ProductMembrane.java create mode 100644 src/main/java/lingtao/net/enums/ProductSlice.java create mode 100644 src/main/java/lingtao/net/gui/LoginGui.java create mode 100644 src/main/java/lingtao/net/gui/PriceGui.java create mode 100644 src/main/java/lingtao/net/handler/MapToVarcharTypeHandler.java create mode 100644 src/main/java/lingtao/net/mapper/ClothingTagMapper.java create mode 100644 src/main/java/lingtao/net/realm/ShiroRealm.java create mode 100644 src/main/java/lingtao/net/service/ArticleService.java create mode 100644 src/main/java/lingtao/net/service/BugService.java create mode 100644 src/main/java/lingtao/net/service/CustomerAwardService.java create mode 100644 src/main/java/lingtao/net/service/CustomerDataService.java create mode 100644 src/main/java/lingtao/net/service/CustomerTrainService.java create mode 100644 src/main/java/lingtao/net/service/ExpressFeeService.java create mode 100644 src/main/java/lingtao/net/service/Finance2Service.java create mode 100644 src/main/java/lingtao/net/service/Finance3Service.java create mode 100644 src/main/java/lingtao/net/service/Finance4Service.java create mode 100644 src/main/java/lingtao/net/service/Finance5Service.java create mode 100644 src/main/java/lingtao/net/service/Finance6Service.java create mode 100644 src/main/java/lingtao/net/service/Finance7Service.java create mode 100644 src/main/java/lingtao/net/service/FinanceDifferenceService.java create mode 100644 src/main/java/lingtao/net/service/FinanceExtractService.java create mode 100644 src/main/java/lingtao/net/service/FinanceService.java create mode 100644 src/main/java/lingtao/net/service/InformationService.java create mode 100644 src/main/java/lingtao/net/service/InitComponent.java create mode 100644 src/main/java/lingtao/net/service/LoginIpService.java create mode 100644 src/main/java/lingtao/net/service/LoginLogService.java create mode 100644 src/main/java/lingtao/net/service/MyFileService.java create mode 100644 src/main/java/lingtao/net/service/ProductImgService.java create mode 100644 src/main/java/lingtao/net/service/ProductService.java create mode 100644 src/main/java/lingtao/net/service/QuestionService.java create mode 100644 src/main/java/lingtao/net/service/QuoteDataService.java create mode 100644 src/main/java/lingtao/net/service/QuoteLogService.java create mode 100644 src/main/java/lingtao/net/service/SysDictSearchProService.java create mode 100644 src/main/java/lingtao/net/service/SysPermissionService.java create mode 100644 src/main/java/lingtao/net/service/SysRoleService.java create mode 100644 src/main/java/lingtao/net/service/SysUserService.java create mode 100644 src/main/java/lingtao/net/service/UpdateLogService.java create mode 100644 src/main/java/lingtao/net/service/price/ClothingTagService.java create mode 100644 src/main/java/lingtao/net/service/price/ProductService.java create mode 100644 src/main/java/lingtao/net/service/price/SelfAdhesiveStickerService.java create mode 100644 src/main/java/lingtao/net/service/price/impl/ClothingTagServiceImpl.java create mode 100644 src/main/java/lingtao/net/service/price/impl/ProductContent.java create mode 100644 src/main/java/lingtao/net/service/price/impl/SelfAdhesiveStickerServiceImpl.java create mode 100644 src/main/java/lingtao/net/util/AStickersPrice.java create mode 100644 src/main/java/lingtao/net/util/AYaMoStickersPrice.java create mode 100644 src/main/java/lingtao/net/util/AngClothUtil.java create mode 100644 src/main/java/lingtao/net/util/BqPrice.java create mode 100644 src/main/java/lingtao/net/util/CanopyUtil.java create mode 100644 src/main/java/lingtao/net/util/CardPrice.java create mode 100644 src/main/java/lingtao/net/util/CouponPrice.java create mode 100644 src/main/java/lingtao/net/util/CupHolderUtil.java create mode 100644 src/main/java/lingtao/net/util/DateFormatUtils.java create mode 100644 src/main/java/lingtao/net/util/ExcelUtils.java create mode 100644 src/main/java/lingtao/net/util/FerruleUtil.java create mode 100644 src/main/java/lingtao/net/util/FgqPrice.java create mode 100644 src/main/java/lingtao/net/util/GDZGMStickersPrice.java create mode 100644 src/main/java/lingtao/net/util/IPUtils.java create mode 100644 src/main/java/lingtao/net/util/KztPrice.java create mode 100644 src/main/java/lingtao/net/util/LaSiStickersPrice.java create mode 100644 src/main/java/lingtao/net/util/LunarCalendarUtil.java create mode 100644 src/main/java/lingtao/net/util/MD5Util.java create mode 100644 src/main/java/lingtao/net/util/NiuStickersPrice.java create mode 100644 src/main/java/lingtao/net/util/PVCStickersPrice.java create mode 100644 src/main/java/lingtao/net/util/PVCYaMoStickersPrice.java create mode 100644 src/main/java/lingtao/net/util/PaperCupPrice.java create mode 100644 src/main/java/lingtao/net/util/PictureAlbumPrice.java create mode 100644 src/main/java/lingtao/net/util/PosterPrice.java create mode 100644 src/main/java/lingtao/net/util/PriceUtils.java create mode 100644 src/main/java/lingtao/net/util/PublicMethods.java create mode 100644 src/main/java/lingtao/net/util/StickersDoublePrice.java create mode 100644 src/main/java/lingtao/net/util/SwzStickersPrice.java create mode 100644 src/main/java/lingtao/net/util/YaJinStickersPrice.java create mode 100644 src/main/java/lingtao/net/util/YaYinStickersPrice.java create mode 100644 src/main/java/lingtao/net/util/YiSBStickersPrice.java create mode 100644 src/main/java/lingtao/net/util/YinPGStickersPrice.java create mode 100644 src/main/java/lingtao/net/util/ZsPrice.java create mode 100644 src/main/resources/applicationContext.xml create mode 100644 src/main/resources/dbconfig.properties create mode 100644 src/main/resources/lib/jep-java-3.5-trial.jar create mode 100644 src/main/resources/log4j.properties create mode 100644 src/main/resources/mapper/ArticleMapper.xml create mode 100644 src/main/resources/mapper/BugMapper.xml create mode 100644 src/main/resources/mapper/ClothingTagMapper.xml create mode 100644 src/main/resources/mapper/CustomerAwardMapper.xml create mode 100644 src/main/resources/mapper/CustomerDataMapper.xml create mode 100644 src/main/resources/mapper/CustomerTrainMapper.xml create mode 100644 src/main/resources/mapper/ExpressFeeMapper.xml create mode 100644 src/main/resources/mapper/Finance2Mapper.xml create mode 100644 src/main/resources/mapper/Finance3Mapper.xml create mode 100644 src/main/resources/mapper/FinanceDifferenceMapper.xml create mode 100644 src/main/resources/mapper/FinanceExtractMapper.xml create mode 100644 src/main/resources/mapper/FinanceMapper.xml create mode 100644 src/main/resources/mapper/InformationMapper.xml create mode 100644 src/main/resources/mapper/LoginIpMapper.xml create mode 100644 src/main/resources/mapper/LoginLogMapper.xml create mode 100644 src/main/resources/mapper/MyFileMapper.xml create mode 100644 src/main/resources/mapper/ProductImgMapper.xml create mode 100644 src/main/resources/mapper/ProductMapper.xml create mode 100644 src/main/resources/mapper/QuestionMapper.xml create mode 100644 src/main/resources/mapper/QuoteDataMapper.xml create mode 100644 src/main/resources/mapper/QuoteLogMapper.xml create mode 100644 src/main/resources/mapper/SysDictSearchProMapper.xml create mode 100644 src/main/resources/mapper/SysPermissionMapper.xml create mode 100644 src/main/resources/mapper/SysRoleMapper.xml create mode 100644 src/main/resources/mapper/SysUserMapper.xml create mode 100644 src/main/resources/mapper/UpdateLogMapper.xml create mode 100644 src/main/resources/mybatis-config.xml create mode 100644 src/main/resources/quote_price.sql create mode 100644 src/main/webapp/META-INF/MANIFEST.MF create mode 100644 src/main/webapp/WEB-INF/c-1_0-rt.tld create mode 100644 src/main/webapp/WEB-INF/c-1_0.tld create mode 100644 src/main/webapp/WEB-INF/c.tld create mode 100644 src/main/webapp/WEB-INF/dispatcherServlet-servlet.xml create mode 100644 src/main/webapp/WEB-INF/fmt-1_0-rt.tld create mode 100644 src/main/webapp/WEB-INF/fmt-1_0.tld create mode 100644 src/main/webapp/WEB-INF/fmt.tld create mode 100644 src/main/webapp/WEB-INF/fn.tld create mode 100644 src/main/webapp/WEB-INF/permittedTaglibs.tld create mode 100644 src/main/webapp/WEB-INF/scriptfree.tld create mode 100644 src/main/webapp/WEB-INF/sql-1_0-rt.tld create mode 100644 src/main/webapp/WEB-INF/sql-1_0.tld create mode 100644 src/main/webapp/WEB-INF/sql.tld create mode 100644 src/main/webapp/WEB-INF/web.xml create mode 100644 src/main/webapp/WEB-INF/x-1_0-rt.tld create mode 100644 src/main/webapp/WEB-INF/x-1_0.tld create mode 100644 src/main/webapp/WEB-INF/x.tld create mode 100644 src/main/webapp/favicon.ico create mode 100644 src/main/webapp/file/领淘报价系统操作手册.docx create mode 100644 src/main/webapp/images/bg3.jpg create mode 100644 src/main/webapp/images/bg4.jpg create mode 100644 src/main/webapp/images/bg401.jpg create mode 100644 src/main/webapp/images/birthDay.png create mode 100644 src/main/webapp/images/emoji/aru/1.png create mode 100644 src/main/webapp/images/emoji/aru/10.png create mode 100644 src/main/webapp/images/emoji/aru/100.png create mode 100644 src/main/webapp/images/emoji/aru/101.png create mode 100644 src/main/webapp/images/emoji/aru/102.png create mode 100644 src/main/webapp/images/emoji/aru/103.png create mode 100644 src/main/webapp/images/emoji/aru/104.png create mode 100644 src/main/webapp/images/emoji/aru/105.png create mode 100644 src/main/webapp/images/emoji/aru/106.png create mode 100644 src/main/webapp/images/emoji/aru/107.png create mode 100644 src/main/webapp/images/emoji/aru/108.png create mode 100644 src/main/webapp/images/emoji/aru/109.png create mode 100644 src/main/webapp/images/emoji/aru/11.png create mode 100644 src/main/webapp/images/emoji/aru/110.png create mode 100644 src/main/webapp/images/emoji/aru/111.png create mode 100644 src/main/webapp/images/emoji/aru/112.png create mode 100644 src/main/webapp/images/emoji/aru/113.png create mode 100644 src/main/webapp/images/emoji/aru/114.png create mode 100644 src/main/webapp/images/emoji/aru/115.png create mode 100644 src/main/webapp/images/emoji/aru/116.png create mode 100644 src/main/webapp/images/emoji/aru/117.png create mode 100644 src/main/webapp/images/emoji/aru/118.png create mode 100644 src/main/webapp/images/emoji/aru/119.png create mode 100644 src/main/webapp/images/emoji/aru/12.png create mode 100644 src/main/webapp/images/emoji/aru/120.png create mode 100644 src/main/webapp/images/emoji/aru/121.png create mode 100644 src/main/webapp/images/emoji/aru/122.png create mode 100644 src/main/webapp/images/emoji/aru/123.png create mode 100644 src/main/webapp/images/emoji/aru/124.png create mode 100644 src/main/webapp/images/emoji/aru/125.png create mode 100644 src/main/webapp/images/emoji/aru/126.png create mode 100644 src/main/webapp/images/emoji/aru/127.png create mode 100644 src/main/webapp/images/emoji/aru/128.png create mode 100644 src/main/webapp/images/emoji/aru/129.png create mode 100644 src/main/webapp/images/emoji/aru/13.png create mode 100644 src/main/webapp/images/emoji/aru/130.png create mode 100644 src/main/webapp/images/emoji/aru/131.png create mode 100644 src/main/webapp/images/emoji/aru/132.png create mode 100644 src/main/webapp/images/emoji/aru/133.png create mode 100644 src/main/webapp/images/emoji/aru/134.png create mode 100644 src/main/webapp/images/emoji/aru/135.png create mode 100644 src/main/webapp/images/emoji/aru/136.png create mode 100644 src/main/webapp/images/emoji/aru/137.png create mode 100644 src/main/webapp/images/emoji/aru/138.png create mode 100644 src/main/webapp/images/emoji/aru/139.png create mode 100644 src/main/webapp/images/emoji/aru/14.png create mode 100644 src/main/webapp/images/emoji/aru/140.png create mode 100644 src/main/webapp/images/emoji/aru/141.png create mode 100644 src/main/webapp/images/emoji/aru/142.png create mode 100644 src/main/webapp/images/emoji/aru/143.png create mode 100644 src/main/webapp/images/emoji/aru/144.png create mode 100644 src/main/webapp/images/emoji/aru/145.png create mode 100644 src/main/webapp/images/emoji/aru/146.png create mode 100644 src/main/webapp/images/emoji/aru/147.png create mode 100644 src/main/webapp/images/emoji/aru/148.png create mode 100644 src/main/webapp/images/emoji/aru/149.png create mode 100644 src/main/webapp/images/emoji/aru/15.png create mode 100644 src/main/webapp/images/emoji/aru/150.png create mode 100644 src/main/webapp/images/emoji/aru/151.png create mode 100644 src/main/webapp/images/emoji/aru/152.png create mode 100644 src/main/webapp/images/emoji/aru/153.png create mode 100644 src/main/webapp/images/emoji/aru/154.png create mode 100644 src/main/webapp/images/emoji/aru/155.png create mode 100644 src/main/webapp/images/emoji/aru/156.png create mode 100644 src/main/webapp/images/emoji/aru/157.png create mode 100644 src/main/webapp/images/emoji/aru/158.png create mode 100644 src/main/webapp/images/emoji/aru/159.png create mode 100644 src/main/webapp/images/emoji/aru/16.png create mode 100644 src/main/webapp/images/emoji/aru/160.png create mode 100644 src/main/webapp/images/emoji/aru/161.png create mode 100644 src/main/webapp/images/emoji/aru/162.png create mode 100644 src/main/webapp/images/emoji/aru/163.png create mode 100644 src/main/webapp/images/emoji/aru/164.png create mode 100644 src/main/webapp/images/emoji/aru/17.png create mode 100644 src/main/webapp/images/emoji/aru/18.png create mode 100644 src/main/webapp/images/emoji/aru/19.png create mode 100644 src/main/webapp/images/emoji/aru/2.png create mode 100644 src/main/webapp/images/emoji/aru/20.png create mode 100644 src/main/webapp/images/emoji/aru/21.png create mode 100644 src/main/webapp/images/emoji/aru/22.png create mode 100644 src/main/webapp/images/emoji/aru/23.png create mode 100644 src/main/webapp/images/emoji/aru/24.png create mode 100644 src/main/webapp/images/emoji/aru/25.png create mode 100644 src/main/webapp/images/emoji/aru/26.png create mode 100644 src/main/webapp/images/emoji/aru/27.png create mode 100644 src/main/webapp/images/emoji/aru/28.png create mode 100644 src/main/webapp/images/emoji/aru/29.png create mode 100644 src/main/webapp/images/emoji/aru/3.png create mode 100644 src/main/webapp/images/emoji/aru/30.png create mode 100644 src/main/webapp/images/emoji/aru/31.png create mode 100644 src/main/webapp/images/emoji/aru/32.png create mode 100644 src/main/webapp/images/emoji/aru/33.png create mode 100644 src/main/webapp/images/emoji/aru/34.png create mode 100644 src/main/webapp/images/emoji/aru/35.png create mode 100644 src/main/webapp/images/emoji/aru/36.png create mode 100644 src/main/webapp/images/emoji/aru/37.png create mode 100644 src/main/webapp/images/emoji/aru/38.png create mode 100644 src/main/webapp/images/emoji/aru/39.png create mode 100644 src/main/webapp/images/emoji/aru/4.png create mode 100644 src/main/webapp/images/emoji/aru/40.png create mode 100644 src/main/webapp/images/emoji/aru/41.png create mode 100644 src/main/webapp/images/emoji/aru/42.png create mode 100644 src/main/webapp/images/emoji/aru/43.png create mode 100644 src/main/webapp/images/emoji/aru/44.png create mode 100644 src/main/webapp/images/emoji/aru/45.png create mode 100644 src/main/webapp/images/emoji/aru/46.png create mode 100644 src/main/webapp/images/emoji/aru/47.png create mode 100644 src/main/webapp/images/emoji/aru/48.png create mode 100644 src/main/webapp/images/emoji/aru/49.png create mode 100644 src/main/webapp/images/emoji/aru/5.png create mode 100644 src/main/webapp/images/emoji/aru/50.png create mode 100644 src/main/webapp/images/emoji/aru/51.png create mode 100644 src/main/webapp/images/emoji/aru/52.png create mode 100644 src/main/webapp/images/emoji/aru/53.png create mode 100644 src/main/webapp/images/emoji/aru/54.png create mode 100644 src/main/webapp/images/emoji/aru/55.png create mode 100644 src/main/webapp/images/emoji/aru/56.png create mode 100644 src/main/webapp/images/emoji/aru/57.png create mode 100644 src/main/webapp/images/emoji/aru/58.png create mode 100644 src/main/webapp/images/emoji/aru/59.png create mode 100644 src/main/webapp/images/emoji/aru/6.png create mode 100644 src/main/webapp/images/emoji/aru/60.png create mode 100644 src/main/webapp/images/emoji/aru/61.png create mode 100644 src/main/webapp/images/emoji/aru/62.png create mode 100644 src/main/webapp/images/emoji/aru/63.png create mode 100644 src/main/webapp/images/emoji/aru/64.png create mode 100644 src/main/webapp/images/emoji/aru/65.png create mode 100644 src/main/webapp/images/emoji/aru/66.png create mode 100644 src/main/webapp/images/emoji/aru/67.png create mode 100644 src/main/webapp/images/emoji/aru/68.png create mode 100644 src/main/webapp/images/emoji/aru/69.png create mode 100644 src/main/webapp/images/emoji/aru/7.png create mode 100644 src/main/webapp/images/emoji/aru/70.png create mode 100644 src/main/webapp/images/emoji/aru/71.png create mode 100644 src/main/webapp/images/emoji/aru/72.png create mode 100644 src/main/webapp/images/emoji/aru/73.png create mode 100644 src/main/webapp/images/emoji/aru/74.png create mode 100644 src/main/webapp/images/emoji/aru/75.png create mode 100644 src/main/webapp/images/emoji/aru/76.png create mode 100644 src/main/webapp/images/emoji/aru/77.png create mode 100644 src/main/webapp/images/emoji/aru/78.png create mode 100644 src/main/webapp/images/emoji/aru/79.png create mode 100644 src/main/webapp/images/emoji/aru/8.png create mode 100644 src/main/webapp/images/emoji/aru/80.png create mode 100644 src/main/webapp/images/emoji/aru/81.png create mode 100644 src/main/webapp/images/emoji/aru/82.png create mode 100644 src/main/webapp/images/emoji/aru/83.png create mode 100644 src/main/webapp/images/emoji/aru/84.png create mode 100644 src/main/webapp/images/emoji/aru/85.png create mode 100644 src/main/webapp/images/emoji/aru/86.png create mode 100644 src/main/webapp/images/emoji/aru/87.png create mode 100644 src/main/webapp/images/emoji/aru/88.png create mode 100644 src/main/webapp/images/emoji/aru/89.png create mode 100644 src/main/webapp/images/emoji/aru/9.png create mode 100644 src/main/webapp/images/emoji/aru/90.png create mode 100644 src/main/webapp/images/emoji/aru/91.png create mode 100644 src/main/webapp/images/emoji/aru/92.png create mode 100644 src/main/webapp/images/emoji/aru/93.png create mode 100644 src/main/webapp/images/emoji/aru/94.png create mode 100644 src/main/webapp/images/emoji/aru/95.png create mode 100644 src/main/webapp/images/emoji/aru/96.png create mode 100644 src/main/webapp/images/emoji/aru/97.png create mode 100644 src/main/webapp/images/emoji/aru/98.png create mode 100644 src/main/webapp/images/emoji/aru/99.png create mode 100644 src/main/webapp/images/emoji/newtieba/OK.png create mode 100644 src/main/webapp/images/emoji/newtieba/haha.png create mode 100644 src/main/webapp/images/emoji/newtieba/what.png create mode 100644 src/main/webapp/images/emoji/newtieba/不高兴.png create mode 100644 src/main/webapp/images/emoji/newtieba/乖.png create mode 100644 src/main/webapp/images/emoji/newtieba/你懂的.png create mode 100644 src/main/webapp/images/emoji/newtieba/便便.png create mode 100644 src/main/webapp/images/emoji/newtieba/勉强.png create mode 100644 src/main/webapp/images/emoji/newtieba/吐.png create mode 100644 src/main/webapp/images/emoji/newtieba/吐舌.png create mode 100644 src/main/webapp/images/emoji/newtieba/呀咩爹.png create mode 100644 src/main/webapp/images/emoji/newtieba/呵呵.png create mode 100644 src/main/webapp/images/emoji/newtieba/哈哈.png create mode 100644 src/main/webapp/images/emoji/newtieba/啊.png create mode 100644 src/main/webapp/images/emoji/newtieba/喷.png create mode 100644 src/main/webapp/images/emoji/newtieba/大拇指.png create mode 100644 src/main/webapp/images/emoji/newtieba/太开心.png create mode 100644 src/main/webapp/images/emoji/newtieba/太阳.png create mode 100644 src/main/webapp/images/emoji/newtieba/委屈.png create mode 100644 src/main/webapp/images/emoji/newtieba/小乖.png create mode 100644 src/main/webapp/images/emoji/newtieba/小红脸.png create mode 100644 src/main/webapp/images/emoji/newtieba/彩虹.png create mode 100644 src/main/webapp/images/emoji/newtieba/心碎.png create mode 100644 src/main/webapp/images/emoji/newtieba/怒.png create mode 100644 src/main/webapp/images/emoji/newtieba/惊哭.png create mode 100644 src/main/webapp/images/emoji/newtieba/惊讶.png create mode 100644 src/main/webapp/images/emoji/newtieba/懒得理.png create mode 100644 src/main/webapp/images/emoji/newtieba/手纸.png create mode 100644 src/main/webapp/images/emoji/newtieba/挖鼻.png create mode 100644 src/main/webapp/images/emoji/newtieba/捂嘴笑.png create mode 100644 src/main/webapp/images/emoji/newtieba/星星月亮.png create mode 100644 src/main/webapp/images/emoji/newtieba/汗.png create mode 100644 src/main/webapp/images/emoji/newtieba/沙发.png create mode 100644 src/main/webapp/images/emoji/newtieba/泪.png create mode 100644 src/main/webapp/images/emoji/newtieba/滑稽.png create mode 100644 src/main/webapp/images/emoji/newtieba/灯泡.png create mode 100644 src/main/webapp/images/emoji/newtieba/爱心.png create mode 100644 src/main/webapp/images/emoji/newtieba/犀利.png create mode 100644 src/main/webapp/images/emoji/newtieba/狂汗.png create mode 100644 src/main/webapp/images/emoji/newtieba/玫瑰.png create mode 100644 src/main/webapp/images/emoji/newtieba/疑问.png create mode 100644 src/main/webapp/images/emoji/newtieba/真棒.png create mode 100644 src/main/webapp/images/emoji/newtieba/睡觉.png create mode 100644 src/main/webapp/images/emoji/newtieba/礼物.png create mode 100644 src/main/webapp/images/emoji/newtieba/笑尿.png create mode 100644 src/main/webapp/images/emoji/newtieba/笑眼.png create mode 100644 src/main/webapp/images/emoji/newtieba/红领巾.png create mode 100644 src/main/webapp/images/emoji/newtieba/胜利.png create mode 100644 src/main/webapp/images/emoji/newtieba/花心.png create mode 100644 src/main/webapp/images/emoji/newtieba/茶杯.png create mode 100644 src/main/webapp/images/emoji/newtieba/药丸.png create mode 100644 src/main/webapp/images/emoji/newtieba/蛋糕.png create mode 100644 src/main/webapp/images/emoji/newtieba/蜡烛.png create mode 100644 src/main/webapp/images/emoji/newtieba/鄙视.png create mode 100644 src/main/webapp/images/emoji/newtieba/酷.png create mode 100644 src/main/webapp/images/emoji/newtieba/酸爽.png create mode 100644 src/main/webapp/images/emoji/newtieba/钱币.png create mode 100644 src/main/webapp/images/emoji/newtieba/阴险.png create mode 100644 src/main/webapp/images/emoji/newtieba/音乐.png create mode 100644 src/main/webapp/images/emoji/newtieba/香蕉.png create mode 100644 src/main/webapp/images/emoji/newtieba/黑线.png create mode 100644 src/main/webapp/images/emoji/qq/K歌.gif create mode 100644 src/main/webapp/images/emoji/qq/NO.gif create mode 100644 src/main/webapp/images/emoji/qq/OK.gif create mode 100644 src/main/webapp/images/emoji/qq/下雨.gif create mode 100644 src/main/webapp/images/emoji/qq/乒乓.gif create mode 100644 src/main/webapp/images/emoji/qq/亲亲.gif create mode 100644 src/main/webapp/images/emoji/qq/便便.gif create mode 100644 src/main/webapp/images/emoji/qq/偷笑.gif create mode 100644 src/main/webapp/images/emoji/qq/傲慢.gif create mode 100644 src/main/webapp/images/emoji/qq/再见.gif create mode 100644 src/main/webapp/images/emoji/qq/冷汗.gif create mode 100644 src/main/webapp/images/emoji/qq/凋谢.gif create mode 100644 src/main/webapp/images/emoji/qq/刀.gif create mode 100644 src/main/webapp/images/emoji/qq/勾引.gif create mode 100644 src/main/webapp/images/emoji/qq/发呆.gif create mode 100644 src/main/webapp/images/emoji/qq/发怒.gif create mode 100644 src/main/webapp/images/emoji/qq/发抖.gif create mode 100644 src/main/webapp/images/emoji/qq/发财.gif create mode 100644 src/main/webapp/images/emoji/qq/可怜.gif create mode 100644 src/main/webapp/images/emoji/qq/可爱.gif create mode 100644 src/main/webapp/images/emoji/qq/右哼哼.gif create mode 100644 src/main/webapp/images/emoji/qq/右太极.gif create mode 100644 src/main/webapp/images/emoji/qq/吐.gif create mode 100644 src/main/webapp/images/emoji/qq/吓.gif create mode 100644 src/main/webapp/images/emoji/qq/吻.gif create mode 100644 src/main/webapp/images/emoji/qq/呲牙.gif create mode 100644 src/main/webapp/images/emoji/qq/咒骂.gif create mode 100644 src/main/webapp/images/emoji/qq/咖啡.gif create mode 100644 src/main/webapp/images/emoji/qq/哈欠.gif create mode 100644 src/main/webapp/images/emoji/qq/啤酒.gif create mode 100644 src/main/webapp/images/emoji/qq/喝彩.gif create mode 100644 src/main/webapp/images/emoji/qq/嗅大了.gif create mode 100644 src/main/webapp/images/emoji/qq/嘘.gif create mode 100644 src/main/webapp/images/emoji/qq/囍.gif create mode 100644 src/main/webapp/images/emoji/qq/回头.gif create mode 100644 src/main/webapp/images/emoji/qq/困.gif create mode 100644 src/main/webapp/images/emoji/qq/坏笑.gif create mode 100644 src/main/webapp/images/emoji/qq/多云.gif create mode 100644 src/main/webapp/images/emoji/qq/夜晚.gif create mode 100644 src/main/webapp/images/emoji/qq/大兵.gif create mode 100644 src/main/webapp/images/emoji/qq/大哭.gif create mode 100644 src/main/webapp/images/emoji/qq/太阳.gif create mode 100644 src/main/webapp/images/emoji/qq/奋斗.gif create mode 100644 src/main/webapp/images/emoji/qq/奶瓶.gif create mode 100644 src/main/webapp/images/emoji/qq/委屈.gif create mode 100644 src/main/webapp/images/emoji/qq/害羞.gif create mode 100644 src/main/webapp/images/emoji/qq/尴尬.gif create mode 100644 src/main/webapp/images/emoji/qq/左哼哼.gif create mode 100644 src/main/webapp/images/emoji/qq/左太极.gif create mode 100644 src/main/webapp/images/emoji/qq/差劲.gif create mode 100644 src/main/webapp/images/emoji/qq/帅.gif create mode 100644 src/main/webapp/images/emoji/qq/弱.gif create mode 100644 src/main/webapp/images/emoji/qq/强.gif create mode 100644 src/main/webapp/images/emoji/qq/得意.gif create mode 100644 src/main/webapp/images/emoji/qq/微笑.gif create mode 100644 src/main/webapp/images/emoji/qq/心.gif create mode 100644 src/main/webapp/images/emoji/qq/心碎.gif create mode 100644 src/main/webapp/images/emoji/qq/快哭了.gif create mode 100644 src/main/webapp/images/emoji/qq/怄火.gif create mode 100644 src/main/webapp/images/emoji/qq/惊恐.gif create mode 100644 src/main/webapp/images/emoji/qq/惊讶.gif create mode 100644 src/main/webapp/images/emoji/qq/憨笑.gif create mode 100644 src/main/webapp/images/emoji/qq/戒指.gif create mode 100644 src/main/webapp/images/emoji/qq/抓狂.gif create mode 100644 src/main/webapp/images/emoji/qq/折磨.gif create mode 100644 src/main/webapp/images/emoji/qq/抠鼻.gif create mode 100644 src/main/webapp/images/emoji/qq/抱拳.gif create mode 100644 src/main/webapp/images/emoji/qq/拥抱.gif create mode 100644 src/main/webapp/images/emoji/qq/拳头.gif create mode 100644 src/main/webapp/images/emoji/qq/挥动.gif create mode 100644 src/main/webapp/images/emoji/qq/握手.gif create mode 100644 src/main/webapp/images/emoji/qq/撇嘴.gif create mode 100644 src/main/webapp/images/emoji/qq/擦汗.gif create mode 100644 src/main/webapp/images/emoji/qq/敲打.gif create mode 100644 src/main/webapp/images/emoji/qq/晕.gif create mode 100644 src/main/webapp/images/emoji/qq/枪.gif create mode 100644 src/main/webapp/images/emoji/qq/棒棒糖.gif create mode 100644 src/main/webapp/images/emoji/qq/气球.gif create mode 100644 src/main/webapp/images/emoji/qq/沙发.gif create mode 100644 src/main/webapp/images/emoji/qq/流汗.gif create mode 100644 src/main/webapp/images/emoji/qq/流泪.gif create mode 100644 src/main/webapp/images/emoji/qq/激动.gif create mode 100644 src/main/webapp/images/emoji/qq/灯.gif create mode 100644 src/main/webapp/images/emoji/qq/灯笼.gif create mode 100644 src/main/webapp/images/emoji/qq/炸弹.gif create mode 100644 src/main/webapp/images/emoji/qq/熊猫.gif create mode 100644 src/main/webapp/images/emoji/qq/爆筋.gif create mode 100644 src/main/webapp/images/emoji/qq/爱你.gif create mode 100644 src/main/webapp/images/emoji/qq/爱情.gif create mode 100644 src/main/webapp/images/emoji/qq/猪头.gif create mode 100644 src/main/webapp/images/emoji/qq/献吻.gif create mode 100644 src/main/webapp/images/emoji/qq/玫瑰.gif create mode 100644 src/main/webapp/images/emoji/qq/瓢虫.gif create mode 100644 src/main/webapp/images/emoji/qq/疑问.gif create mode 100644 src/main/webapp/images/emoji/qq/白眼.gif create mode 100644 src/main/webapp/images/emoji/qq/睡.gif create mode 100644 src/main/webapp/images/emoji/qq/磕头.gif create mode 100644 src/main/webapp/images/emoji/qq/礼物.gif create mode 100644 src/main/webapp/images/emoji/qq/篮球.gif create mode 100644 src/main/webapp/images/emoji/qq/纸巾.gif create mode 100644 src/main/webapp/images/emoji/qq/胜利.gif create mode 100644 src/main/webapp/images/emoji/qq/色.gif create mode 100644 src/main/webapp/images/emoji/qq/药丸.gif create mode 100644 src/main/webapp/images/emoji/qq/菜刀.gif create mode 100644 src/main/webapp/images/emoji/qq/蛋糕.gif create mode 100644 src/main/webapp/images/emoji/qq/蜡烛.gif create mode 100644 src/main/webapp/images/emoji/qq/街舞.gif create mode 100644 src/main/webapp/images/emoji/qq/衰.gif create mode 100644 src/main/webapp/images/emoji/qq/西瓜.gif create mode 100644 src/main/webapp/images/emoji/qq/调皮.gif create mode 100644 src/main/webapp/images/emoji/qq/购物.gif create mode 100644 src/main/webapp/images/emoji/qq/足球.gif create mode 100644 src/main/webapp/images/emoji/qq/跳绳.gif create mode 100644 src/main/webapp/images/emoji/qq/跳跳.gif create mode 100644 src/main/webapp/images/emoji/qq/车.gif create mode 100644 src/main/webapp/images/emoji/qq/车厢.gif create mode 100644 src/main/webapp/images/emoji/qq/转圈.gif create mode 100644 src/main/webapp/images/emoji/qq/邮件.gif create mode 100644 src/main/webapp/images/emoji/qq/鄙视.gif create mode 100644 src/main/webapp/images/emoji/qq/酷.gif create mode 100644 src/main/webapp/images/emoji/qq/钱.gif create mode 100644 src/main/webapp/images/emoji/qq/闪电.gif create mode 100644 src/main/webapp/images/emoji/qq/闭嘴.gif create mode 100644 src/main/webapp/images/emoji/qq/闹钟.gif create mode 100644 src/main/webapp/images/emoji/qq/阴险.gif create mode 100644 src/main/webapp/images/emoji/qq/难过.gif create mode 100644 src/main/webapp/images/emoji/qq/雨伞.gif create mode 100644 src/main/webapp/images/emoji/qq/青蛙.gif create mode 100644 src/main/webapp/images/emoji/qq/面条.gif create mode 100644 src/main/webapp/images/emoji/qq/鞭炮.gif create mode 100644 src/main/webapp/images/emoji/qq/风车.gif create mode 100644 src/main/webapp/images/emoji/qq/飞吻.gif create mode 100644 src/main/webapp/images/emoji/qq/飞机.gif create mode 100644 src/main/webapp/images/emoji/qq/饥饿.gif create mode 100644 src/main/webapp/images/emoji/qq/饭.gif create mode 100644 src/main/webapp/images/emoji/qq/香蕉.gif create mode 100644 src/main/webapp/images/emoji/qq/骷髅.gif create mode 100644 src/main/webapp/images/emoji/qq/高铁右车头.gif create mode 100644 src/main/webapp/images/emoji/qq/高铁左车头.gif create mode 100644 src/main/webapp/images/emoji/qq/鼓掌.gif create mode 100644 src/main/webapp/images/emoji/tieba/haha.png create mode 100644 src/main/webapp/images/emoji/tieba/不高兴.png create mode 100644 src/main/webapp/images/emoji/tieba/乖.png create mode 100644 src/main/webapp/images/emoji/tieba/冷.png create mode 100644 src/main/webapp/images/emoji/tieba/勉强.png create mode 100644 src/main/webapp/images/emoji/tieba/吐.png create mode 100644 src/main/webapp/images/emoji/tieba/吐舌.png create mode 100644 src/main/webapp/images/emoji/tieba/呵呵.png create mode 100644 src/main/webapp/images/emoji/tieba/呼.png create mode 100644 src/main/webapp/images/emoji/tieba/咦.png create mode 100644 src/main/webapp/images/emoji/tieba/哈哈.png create mode 100644 src/main/webapp/images/emoji/tieba/啊.png create mode 100644 src/main/webapp/images/emoji/tieba/喷.png create mode 100644 src/main/webapp/images/emoji/tieba/大拇指.png create mode 100644 src/main/webapp/images/emoji/tieba/太开心.png create mode 100644 src/main/webapp/images/emoji/tieba/委屈.png create mode 100644 src/main/webapp/images/emoji/tieba/开心.png create mode 100644 src/main/webapp/images/emoji/tieba/弱.png create mode 100644 src/main/webapp/images/emoji/tieba/彩虹.png create mode 100644 src/main/webapp/images/emoji/tieba/怒.png create mode 100644 src/main/webapp/images/emoji/tieba/惊哭.png create mode 100644 src/main/webapp/images/emoji/tieba/惊讶.png create mode 100644 src/main/webapp/images/emoji/tieba/汗.png create mode 100644 src/main/webapp/images/emoji/tieba/泪.png create mode 100644 src/main/webapp/images/emoji/tieba/滑稽.png create mode 100644 src/main/webapp/images/emoji/tieba/灯泡.png create mode 100644 src/main/webapp/images/emoji/tieba/狂汗.png create mode 100644 src/main/webapp/images/emoji/tieba/玫瑰.png create mode 100644 src/main/webapp/images/emoji/tieba/生气.png create mode 100644 src/main/webapp/images/emoji/tieba/疑问.png create mode 100644 src/main/webapp/images/emoji/tieba/真棒.png create mode 100644 src/main/webapp/images/emoji/tieba/睡觉.png create mode 100644 src/main/webapp/images/emoji/tieba/礼物.png create mode 100644 src/main/webapp/images/emoji/tieba/笑眼.png create mode 100644 src/main/webapp/images/emoji/tieba/胜利.png create mode 100644 src/main/webapp/images/emoji/tieba/花心.png create mode 100644 src/main/webapp/images/emoji/tieba/茶杯.png create mode 100644 src/main/webapp/images/emoji/tieba/鄙视.png create mode 100644 src/main/webapp/images/emoji/tieba/酷.png create mode 100644 src/main/webapp/images/emoji/tieba/钱.png create mode 100644 src/main/webapp/images/emoji/tieba/钱币.png create mode 100644 src/main/webapp/images/emoji/tieba/阴险.png create mode 100644 src/main/webapp/images/emoji/tieba/音乐.png create mode 100644 src/main/webapp/images/emoji/tieba/黑线.png create mode 100644 src/main/webapp/images/emoji/weibo/aini.png create mode 100644 src/main/webapp/images/emoji/weibo/aoteman.png create mode 100644 src/main/webapp/images/emoji/weibo/baibai.png create mode 100644 src/main/webapp/images/emoji/weibo/beishang.png create mode 100644 src/main/webapp/images/emoji/weibo/bishi.png create mode 100644 src/main/webapp/images/emoji/weibo/bizui.png create mode 100644 src/main/webapp/images/emoji/weibo/chanzui.png create mode 100644 src/main/webapp/images/emoji/weibo/chijing.png create mode 100644 src/main/webapp/images/emoji/weibo/dahaqi.png create mode 100644 src/main/webapp/images/emoji/weibo/dalian.png create mode 100644 src/main/webapp/images/emoji/weibo/ding.png create mode 100644 src/main/webapp/images/emoji/weibo/dog1.png create mode 100644 src/main/webapp/images/emoji/weibo/dog10.png create mode 100644 src/main/webapp/images/emoji/weibo/dog11.png create mode 100644 src/main/webapp/images/emoji/weibo/dog12.png create mode 100644 src/main/webapp/images/emoji/weibo/dog13.png create mode 100644 src/main/webapp/images/emoji/weibo/dog14.png create mode 100644 src/main/webapp/images/emoji/weibo/dog15.png create mode 100644 src/main/webapp/images/emoji/weibo/dog2.png create mode 100644 src/main/webapp/images/emoji/weibo/dog3.png create mode 100644 src/main/webapp/images/emoji/weibo/dog4.png create mode 100644 src/main/webapp/images/emoji/weibo/dog5.png create mode 100644 src/main/webapp/images/emoji/weibo/dog6.png create mode 100644 src/main/webapp/images/emoji/weibo/dog7.png create mode 100644 src/main/webapp/images/emoji/weibo/dog8.png create mode 100644 src/main/webapp/images/emoji/weibo/dog9.png create mode 100644 src/main/webapp/images/emoji/weibo/doge.png create mode 100644 src/main/webapp/images/emoji/weibo/erha.png create mode 100644 src/main/webapp/images/emoji/weibo/feizao.png create mode 100644 src/main/webapp/images/emoji/weibo/ganmao.png create mode 100644 src/main/webapp/images/emoji/weibo/geili.png create mode 100644 src/main/webapp/images/emoji/weibo/guzhang.png create mode 100644 src/main/webapp/images/emoji/weibo/haha.png create mode 100644 src/main/webapp/images/emoji/weibo/haixiu.png create mode 100644 src/main/webapp/images/emoji/weibo/hehe.png create mode 100644 src/main/webapp/images/emoji/weibo/heixian.png create mode 100644 src/main/webapp/images/emoji/weibo/heng.png create mode 100644 src/main/webapp/images/emoji/weibo/huaxin.png create mode 100644 src/main/webapp/images/emoji/weibo/hufen.png create mode 100644 src/main/webapp/images/emoji/weibo/jiong.png create mode 100644 src/main/webapp/images/emoji/weibo/jiyan.png create mode 100644 src/main/webapp/images/emoji/weibo/keai.png create mode 100644 src/main/webapp/images/emoji/weibo/kelian.png create mode 100644 src/main/webapp/images/emoji/weibo/ku.png create mode 100644 src/main/webapp/images/emoji/weibo/kun.png create mode 100644 src/main/webapp/images/emoji/weibo/landelini.png create mode 100644 src/main/webapp/images/emoji/weibo/lei.png create mode 100644 src/main/webapp/images/emoji/weibo/meng.png create mode 100644 src/main/webapp/images/emoji/weibo/miao.png create mode 100644 src/main/webapp/images/emoji/weibo/nanhaier.png create mode 100644 src/main/webapp/images/emoji/weibo/nu.png create mode 100644 src/main/webapp/images/emoji/weibo/numa.png create mode 100644 src/main/webapp/images/emoji/weibo/nvhaier.png create mode 100644 src/main/webapp/images/emoji/weibo/qian.png create mode 100644 src/main/webapp/images/emoji/weibo/qinqin.png create mode 100644 src/main/webapp/images/emoji/weibo/shayan.png create mode 100644 src/main/webapp/images/emoji/weibo/shengbing.png create mode 100644 src/main/webapp/images/emoji/weibo/shenma.png create mode 100644 src/main/webapp/images/emoji/weibo/shenshou.png create mode 100644 src/main/webapp/images/emoji/weibo/shiwang.png create mode 100644 src/main/webapp/images/emoji/weibo/shuai.png create mode 100644 src/main/webapp/images/emoji/weibo/shuijiao.png create mode 100644 src/main/webapp/images/emoji/weibo/sikao.png create mode 100644 src/main/webapp/images/emoji/weibo/taikaixin.png create mode 100644 src/main/webapp/images/emoji/weibo/touxiao.png create mode 100644 src/main/webapp/images/emoji/weibo/tu.png create mode 100644 src/main/webapp/images/emoji/weibo/tuzi.png create mode 100644 src/main/webapp/images/emoji/weibo/v5.png create mode 100644 src/main/webapp/images/emoji/weibo/wabishi.png create mode 100644 src/main/webapp/images/emoji/weibo/weiqu.png create mode 100644 src/main/webapp/images/emoji/weibo/xi.png create mode 100644 src/main/webapp/images/emoji/weibo/xiaoku.png create mode 100644 src/main/webapp/images/emoji/weibo/xiongmao.png create mode 100644 src/main/webapp/images/emoji/weibo/xixi.png create mode 100644 src/main/webapp/images/emoji/weibo/xu.png create mode 100644 src/main/webapp/images/emoji/weibo/yinxian.png create mode 100644 src/main/webapp/images/emoji/weibo/yiwen.png create mode 100644 src/main/webapp/images/emoji/weibo/youhengheng.png create mode 100644 src/main/webapp/images/emoji/weibo/yun.png create mode 100644 src/main/webapp/images/emoji/weibo/zhi.png create mode 100644 src/main/webapp/images/emoji/weibo/zhuakuang.png create mode 100644 src/main/webapp/images/emoji/weibo/zhutou.png create mode 100644 src/main/webapp/images/emoji/weibo/zuiyou.png create mode 100644 src/main/webapp/images/emoji/weibo/zuohengheng.png create mode 100644 src/main/webapp/images/lingtao.jpg create mode 100644 src/main/webapp/images/login.jpg create mode 100644 src/main/webapp/images/timg.jpg create mode 100644 src/main/webapp/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 src/main/webapp/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 src/main/webapp/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 src/main/webapp/img/bg3.jpg create mode 100644 src/main/webapp/img/bg401.jpg create mode 100644 src/main/webapp/img/handle.jpg create mode 100644 src/main/webapp/img/logo.jpg create mode 100644 src/main/webapp/js/acountExpressFee.js create mode 100644 src/main/webapp/js/acountExpressFeeTooWeight.js create mode 100644 src/main/webapp/js/article.js create mode 100644 src/main/webapp/js/bug.js create mode 100644 src/main/webapp/js/carousel.js create mode 100644 src/main/webapp/js/customerAward.js create mode 100644 src/main/webapp/js/customerData.js create mode 100644 src/main/webapp/js/difference.js create mode 100644 src/main/webapp/js/draggabilly.pkgd.min.js create mode 100644 src/main/webapp/js/echartBar_kefu.js create mode 100644 src/main/webapp/js/echartBar_summary.js create mode 100644 src/main/webapp/js/expressFee.js create mode 100644 src/main/webapp/js/extract.js create mode 100644 src/main/webapp/js/file.js create mode 100644 src/main/webapp/js/finance.js create mode 100644 src/main/webapp/js/finance2.js create mode 100644 src/main/webapp/js/finance3.js create mode 100644 src/main/webapp/js/finance4.js create mode 100644 src/main/webapp/js/finance5.js create mode 100644 src/main/webapp/js/finance6.js create mode 100644 src/main/webapp/js/finance7.js create mode 100644 src/main/webapp/js/getTrainData.js create mode 100644 src/main/webapp/js/imgUpload.js create mode 100644 src/main/webapp/js/information.js create mode 100644 src/main/webapp/js/kefu.js create mode 100644 src/main/webapp/js/loginIp.js create mode 100644 src/main/webapp/js/packery.pkgd.min.js create mode 100644 src/main/webapp/js/product.js create mode 100644 src/main/webapp/js/question.js create mode 100644 src/main/webapp/js/remark.js create mode 100644 src/main/webapp/js/role.js create mode 100644 src/main/webapp/js/searchPro.js create mode 100644 src/main/webapp/js/updateLog.js create mode 100644 src/main/webapp/js/user.js create mode 100644 src/main/webapp/login.jsp create mode 100644 src/main/webapp/static/css/adminLogin.css create mode 100644 src/main/webapp/static/css/formSelects-v4.css create mode 100644 src/main/webapp/static/css/jquery-ui.min.css create mode 100644 src/main/webapp/static/css/metroStyle/img/line_conn.png create mode 100644 src/main/webapp/static/css/metroStyle/img/loading.gif create mode 100644 src/main/webapp/static/css/metroStyle/img/metro.gif create mode 100644 src/main/webapp/static/css/metroStyle/img/metro.png create mode 100644 src/main/webapp/static/css/metroStyle/metroStyle.css create mode 100644 src/main/webapp/static/css/style.css create mode 100644 src/main/webapp/static/js/bootstrap.min.js create mode 100644 src/main/webapp/static/js/dateUtil.js create mode 100644 src/main/webapp/static/js/echarts.min.js create mode 100644 src/main/webapp/static/js/formSelects-v4.js create mode 100644 src/main/webapp/static/js/jquery-ui.min.js create mode 100644 src/main/webapp/static/js/jquery.min.js create mode 100644 src/main/webapp/static/js/jquery.table2excel.js create mode 100644 src/main/webapp/static/js/jquery.ztree.all.js create mode 100644 src/main/webapp/static/js/jquery.ztree.all.min.js create mode 100644 src/main/webapp/static/js/jquery.ztree.core.js create mode 100644 src/main/webapp/static/js/jquery.ztree.core.min.js create mode 100644 src/main/webapp/static/js/jquery.ztree.excheck.js create mode 100644 src/main/webapp/static/js/jquery.ztree.excheck.min.js create mode 100644 src/main/webapp/static/js/jquery.ztree.exedit.js create mode 100644 src/main/webapp/static/js/jquery.ztree.exedit.min.js create mode 100644 src/main/webapp/static/js/jquery.ztree.exhide.js create mode 100644 src/main/webapp/static/js/jquery.ztree.exhide.min.js create mode 100644 src/main/webapp/static/js/treeGrid.js create mode 100644 src/main/webapp/static/js/xm-select.js create mode 100644 src/main/webapp/static/layui/css/layui.css create mode 100644 src/main/webapp/static/layui/css/layui.mobile.css create mode 100644 src/main/webapp/static/layui/css/modules/code.css create mode 100644 src/main/webapp/static/layui/css/modules/laydate/default/laydate.css create mode 100644 src/main/webapp/static/layui/css/modules/layer/default/icon-ext.png create mode 100644 src/main/webapp/static/layui/css/modules/layer/default/icon.png create mode 100644 src/main/webapp/static/layui/css/modules/layer/default/layer.css create mode 100644 src/main/webapp/static/layui/css/modules/layer/default/loading-0.gif create mode 100644 src/main/webapp/static/layui/css/modules/layer/default/loading-1.gif create mode 100644 src/main/webapp/static/layui/css/modules/layer/default/loading-2.gif create mode 100644 src/main/webapp/static/layui/font/iconfont.eot create mode 100644 src/main/webapp/static/layui/font/iconfont.svg create mode 100644 src/main/webapp/static/layui/font/iconfont.ttf create mode 100644 src/main/webapp/static/layui/font/iconfont.woff create mode 100644 src/main/webapp/static/layui/font/iconfont.woff2 create mode 100644 src/main/webapp/static/layui/images/face/0.gif create mode 100644 src/main/webapp/static/layui/images/face/1.gif create mode 100644 src/main/webapp/static/layui/images/face/10.gif create mode 100644 src/main/webapp/static/layui/images/face/11.gif create mode 100644 src/main/webapp/static/layui/images/face/12.gif create mode 100644 src/main/webapp/static/layui/images/face/13.gif create mode 100644 src/main/webapp/static/layui/images/face/14.gif create mode 100644 src/main/webapp/static/layui/images/face/15.gif create mode 100644 src/main/webapp/static/layui/images/face/16.gif create mode 100644 src/main/webapp/static/layui/images/face/17.gif create mode 100644 src/main/webapp/static/layui/images/face/18.gif create mode 100644 src/main/webapp/static/layui/images/face/19.gif create mode 100644 src/main/webapp/static/layui/images/face/2.gif create mode 100644 src/main/webapp/static/layui/images/face/20.gif create mode 100644 src/main/webapp/static/layui/images/face/21.gif create mode 100644 src/main/webapp/static/layui/images/face/22.gif create mode 100644 src/main/webapp/static/layui/images/face/23.gif create mode 100644 src/main/webapp/static/layui/images/face/24.gif create mode 100644 src/main/webapp/static/layui/images/face/25.gif create mode 100644 src/main/webapp/static/layui/images/face/26.gif create mode 100644 src/main/webapp/static/layui/images/face/27.gif create mode 100644 src/main/webapp/static/layui/images/face/28.gif create mode 100644 src/main/webapp/static/layui/images/face/29.gif create mode 100644 src/main/webapp/static/layui/images/face/3.gif create mode 100644 src/main/webapp/static/layui/images/face/30.gif create mode 100644 src/main/webapp/static/layui/images/face/31.gif create mode 100644 src/main/webapp/static/layui/images/face/32.gif create mode 100644 src/main/webapp/static/layui/images/face/33.gif create mode 100644 src/main/webapp/static/layui/images/face/34.gif create mode 100644 src/main/webapp/static/layui/images/face/35.gif create mode 100644 src/main/webapp/static/layui/images/face/36.gif create mode 100644 src/main/webapp/static/layui/images/face/37.gif create mode 100644 src/main/webapp/static/layui/images/face/38.gif create mode 100644 src/main/webapp/static/layui/images/face/39.gif create mode 100644 src/main/webapp/static/layui/images/face/4.gif create mode 100644 src/main/webapp/static/layui/images/face/40.gif create mode 100644 src/main/webapp/static/layui/images/face/41.gif create mode 100644 src/main/webapp/static/layui/images/face/42.gif create mode 100644 src/main/webapp/static/layui/images/face/43.gif create mode 100644 src/main/webapp/static/layui/images/face/44.gif create mode 100644 src/main/webapp/static/layui/images/face/45.gif create mode 100644 src/main/webapp/static/layui/images/face/46.gif create mode 100644 src/main/webapp/static/layui/images/face/47.gif create mode 100644 src/main/webapp/static/layui/images/face/48.gif create mode 100644 src/main/webapp/static/layui/images/face/49.gif create mode 100644 src/main/webapp/static/layui/images/face/5.gif create mode 100644 src/main/webapp/static/layui/images/face/50.gif create mode 100644 src/main/webapp/static/layui/images/face/51.gif create mode 100644 src/main/webapp/static/layui/images/face/52.gif create mode 100644 src/main/webapp/static/layui/images/face/53.gif create mode 100644 src/main/webapp/static/layui/images/face/54.gif create mode 100644 src/main/webapp/static/layui/images/face/55.gif create mode 100644 src/main/webapp/static/layui/images/face/56.gif create mode 100644 src/main/webapp/static/layui/images/face/57.gif create mode 100644 src/main/webapp/static/layui/images/face/58.gif create mode 100644 src/main/webapp/static/layui/images/face/59.gif create mode 100644 src/main/webapp/static/layui/images/face/6.gif create mode 100644 src/main/webapp/static/layui/images/face/60.gif create mode 100644 src/main/webapp/static/layui/images/face/61.gif create mode 100644 src/main/webapp/static/layui/images/face/62.gif create mode 100644 src/main/webapp/static/layui/images/face/63.gif create mode 100644 src/main/webapp/static/layui/images/face/64.gif create mode 100644 src/main/webapp/static/layui/images/face/65.gif create mode 100644 src/main/webapp/static/layui/images/face/66.gif create mode 100644 src/main/webapp/static/layui/images/face/67.gif create mode 100644 src/main/webapp/static/layui/images/face/68.gif create mode 100644 src/main/webapp/static/layui/images/face/69.gif create mode 100644 src/main/webapp/static/layui/images/face/7.gif create mode 100644 src/main/webapp/static/layui/images/face/70.gif create mode 100644 src/main/webapp/static/layui/images/face/71.gif create mode 100644 src/main/webapp/static/layui/images/face/8.gif create mode 100644 src/main/webapp/static/layui/images/face/9.gif create mode 100644 src/main/webapp/static/layui/lay/modules/carousel.js create mode 100644 src/main/webapp/static/layui/lay/modules/code.js create mode 100644 src/main/webapp/static/layui/lay/modules/colorpicker.js create mode 100644 src/main/webapp/static/layui/lay/modules/element.js create mode 100644 src/main/webapp/static/layui/lay/modules/flow.js create mode 100644 src/main/webapp/static/layui/lay/modules/form.js create mode 100644 src/main/webapp/static/layui/lay/modules/jquery.js create mode 100644 src/main/webapp/static/layui/lay/modules/laydate.js create mode 100644 src/main/webapp/static/layui/lay/modules/layedit.js create mode 100644 src/main/webapp/static/layui/lay/modules/layer.js create mode 100644 src/main/webapp/static/layui/lay/modules/laypage.js create mode 100644 src/main/webapp/static/layui/lay/modules/laytpl.js create mode 100644 src/main/webapp/static/layui/lay/modules/mobile.js create mode 100644 src/main/webapp/static/layui/lay/modules/rate.js create mode 100644 src/main/webapp/static/layui/lay/modules/slider.js create mode 100644 src/main/webapp/static/layui/lay/modules/table.js create mode 100644 src/main/webapp/static/layui/lay/modules/transfer.js create mode 100644 src/main/webapp/static/layui/lay/modules/tree.js create mode 100644 src/main/webapp/static/layui/lay/modules/upload.js create mode 100644 src/main/webapp/static/layui/lay/modules/util.js create mode 100644 src/main/webapp/static/layui/layui.all.js create mode 100644 src/main/webapp/static/layui/layui.js create mode 100644 src/main/webapp/views/acountExpressFee.jsp create mode 100644 src/main/webapp/views/acountExpressFeeTooWeight.jsp create mode 100644 src/main/webapp/views/addBirthDay.jsp create mode 100644 src/main/webapp/views/article/addArticle.jsp create mode 100644 src/main/webapp/views/article/fileImport.jsp create mode 100644 src/main/webapp/views/article/infoArticle.jsp create mode 100644 src/main/webapp/views/article/updateArticle.jsp create mode 100644 src/main/webapp/views/common.jsp create mode 100644 src/main/webapp/views/copyResult.jsp create mode 100644 src/main/webapp/views/errorQuestion.jsp create mode 100644 src/main/webapp/views/information.jsp create mode 100644 src/main/webapp/views/main.jsp create mode 100644 src/main/webapp/views/product/acidTags.jsp create mode 100644 src/main/webapp/views/product/angingCloth.jsp create mode 100644 src/main/webapp/views/product/banqi.jsp create mode 100644 src/main/webapp/views/product/blackCard.jsp create mode 100644 src/main/webapp/views/product/canopy.jsp create mode 100644 src/main/webapp/views/product/canvas.jsp create mode 100644 src/main/webapp/views/product/card.jsp create mode 100644 src/main/webapp/views/product/chuanqi.jsp create mode 100644 src/main/webapp/views/product/clothes.jsp create mode 100644 src/main/webapp/views/product/coaster.jsp create mode 100644 src/main/webapp/views/product/colorEnvelope.jsp create mode 100644 src/main/webapp/views/product/copyPaper.jsp create mode 100644 src/main/webapp/views/product/coupon.jsp create mode 100644 src/main/webapp/views/product/coupon1.jsp create mode 100644 src/main/webapp/views/product/coupon22.jsp create mode 100644 src/main/webapp/views/product/credentials.jsp create mode 100644 src/main/webapp/views/product/cupHolder.jsp create mode 100644 src/main/webapp/views/product/cupSet.jsp create mode 100644 src/main/webapp/views/product/deskSticker.jsp create mode 100644 src/main/webapp/views/product/diploma.jsp create mode 100644 src/main/webapp/views/product/disu.jsp create mode 100644 src/main/webapp/views/product/doorList.jsp create mode 100644 src/main/webapp/views/product/envelope.jsp create mode 100644 src/main/webapp/views/product/envelopeCG.jsp create mode 100644 src/main/webapp/views/product/envelopeZDY.jsp create mode 100644 src/main/webapp/views/product/fan.jsp create mode 100644 src/main/webapp/views/product/fgq.jsp create mode 100644 src/main/webapp/views/product/fileCover.jsp create mode 100644 src/main/webapp/views/product/flags.jsp create mode 100644 src/main/webapp/views/product/flyer.jsp create mode 100644 src/main/webapp/views/product/freehand.jsp create mode 100644 src/main/webapp/views/product/girdle.jsp create mode 100644 src/main/webapp/views/product/greetCard.jsp create mode 100644 src/main/webapp/views/product/handBag.jsp create mode 100644 src/main/webapp/views/product/handBagCG.jsp create mode 100644 src/main/webapp/views/product/handBagTJ.jsp create mode 100644 src/main/webapp/views/product/handBagZDY.jsp create mode 100644 src/main/webapp/views/product/hykkt.jsp create mode 100644 src/main/webapp/views/product/insertCard.jsp create mode 100644 src/main/webapp/views/product/katie.jsp create mode 100644 src/main/webapp/views/product/kzt.jsp create mode 100644 src/main/webapp/views/product/lotteryCard.jsp create mode 100644 src/main/webapp/views/product/lsz.jsp create mode 100644 src/main/webapp/views/product/medal.jsp create mode 100644 src/main/webapp/views/product/metal - 副本.jsp create mode 100644 src/main/webapp/views/product/metal.jsp create mode 100644 src/main/webapp/views/product/msd.jsp create mode 100644 src/main/webapp/views/product/notePaper.jsp create mode 100644 src/main/webapp/views/product/otherCard.jsp create mode 100644 src/main/webapp/views/product/packingBox.jsp create mode 100644 src/main/webapp/views/product/paperCup.jsp create mode 100644 src/main/webapp/views/product/parkingCard.jsp create mode 100644 src/main/webapp/views/product/pictureAlbum.jsp create mode 100644 src/main/webapp/views/product/placeMat.jsp create mode 100644 src/main/webapp/views/product/pointCard.jsp create mode 100644 src/main/webapp/views/product/poster.jsp create mode 100644 src/main/webapp/views/product/praiseCard.jsp create mode 100644 src/main/webapp/views/product/programCard.jsp create mode 100644 src/main/webapp/views/product/pvcCard.jsp create mode 100644 src/main/webapp/views/product/pvcfigure.jsp create mode 100644 src/main/webapp/views/product/rollLabel.jsp create mode 100644 src/main/webapp/views/product/roomCard.jsp create mode 100644 src/main/webapp/views/product/roomCardCG.jsp create mode 100644 src/main/webapp/views/product/roomCardZDY.jsp create mode 100644 src/main/webapp/views/product/scratchCard.jsp create mode 100644 src/main/webapp/views/product/slq.jsp create mode 100644 src/main/webapp/views/product/specialCard.jsp create mode 100644 src/main/webapp/views/product/specialCard2.jsp create mode 100644 src/main/webapp/views/product/stickers - 副本.jsp create mode 100644 src/main/webapp/views/product/stickers.jsp create mode 100644 src/main/webapp/views/product/stickersdouble.jsp create mode 100644 src/main/webapp/views/product/tablecolth.jsp create mode 100644 src/main/webapp/views/product/tag.jsp create mode 100644 src/main/webapp/views/product/tagClothes.jsp create mode 100644 src/main/webapp/views/product/tags.jsp create mode 100644 src/main/webapp/views/product/timeCard.jsp create mode 100644 src/main/webapp/views/product/warmSticker.jsp create mode 100644 src/main/webapp/views/product/weddingCard.jsp create mode 100644 src/main/webapp/views/product/wineCard.jsp create mode 100644 src/main/webapp/views/product/ykl.jsp create mode 100644 src/main/webapp/views/productImg/addImgUpload.jsp create mode 100644 src/main/webapp/views/productImg/imgUpload.jsp create mode 100644 src/main/webapp/views/productImg/updateImgUpload.jsp create mode 100644 src/main/webapp/views/readme.jsp create mode 100644 src/main/webapp/views/system/bug/addBug.jsp create mode 100644 src/main/webapp/views/system/bug/bug.jsp create mode 100644 src/main/webapp/views/system/customerAward/customerAward.jsp create mode 100644 src/main/webapp/views/system/customerData/addCustomerData.jsp create mode 100644 src/main/webapp/views/system/customerData/customerData.jsp create mode 100644 src/main/webapp/views/system/customerData/updateCustomerData.jsp create mode 100644 src/main/webapp/views/system/customerTrain/attitude/content/addCustomerAttitudeContent.jsp create mode 100644 src/main/webapp/views/system/customerTrain/attitude/content/customerAttitudeContent.jsp create mode 100644 src/main/webapp/views/system/customerTrain/attitude/content/updateCustomerAttitudeContent.jsp create mode 100644 src/main/webapp/views/system/customerTrain/attitude/kindLabel/addCustomerAttitudeKindLabel.jsp create mode 100644 src/main/webapp/views/system/customerTrain/attitude/kindLabel/customerAttitudeKindLabel.jsp create mode 100644 src/main/webapp/views/system/customerTrain/attitude/kindLabel/updateCustomerAttitudeKindLabel.jsp create mode 100644 src/main/webapp/views/system/customerTrain/attitude/proType/addCustomerAttitudeProType.jsp create mode 100644 src/main/webapp/views/system/customerTrain/attitude/proType/customerAttitudeProType.jsp create mode 100644 src/main/webapp/views/system/customerTrain/attitude/proType/updateCustomerAttitudeProType.jsp create mode 100644 src/main/webapp/views/system/customerTrain/attitude/showCustomerAttitudeContent.jsp create mode 100644 src/main/webapp/views/system/customerTrain/bottomLine/content/addCustomerBottomLineContent.jsp create mode 100644 src/main/webapp/views/system/customerTrain/bottomLine/content/customerBottomLineContent.jsp create mode 100644 src/main/webapp/views/system/customerTrain/bottomLine/content/updateCustomerBottomLineContent.jsp create mode 100644 src/main/webapp/views/system/customerTrain/bottomLine/kindLabel/addCustomerBottomLineKindLabel.jsp create mode 100644 src/main/webapp/views/system/customerTrain/bottomLine/kindLabel/customerBottomLineKindLabel.jsp create mode 100644 src/main/webapp/views/system/customerTrain/bottomLine/kindLabel/updateCustomerBottomLineKindLabel.jsp create mode 100644 src/main/webapp/views/system/customerTrain/bottomLine/proType/addCustomerBottomLineProType.jsp create mode 100644 src/main/webapp/views/system/customerTrain/bottomLine/proType/customerBottomLineProType.jsp create mode 100644 src/main/webapp/views/system/customerTrain/bottomLine/proType/updateCustomerBottomLineProType.jsp create mode 100644 src/main/webapp/views/system/customerTrain/bottomLine/showCustomerBottomLineContent.jsp create mode 100644 src/main/webapp/views/system/customerTrain/introduce/content/addCustomerIntroduceContent.jsp create mode 100644 src/main/webapp/views/system/customerTrain/introduce/content/customerIntroduceContent.jsp create mode 100644 src/main/webapp/views/system/customerTrain/introduce/content/updateCustomerIntroduceContent.jsp create mode 100644 src/main/webapp/views/system/customerTrain/introduce/kindLabel/addCustomerIntroduceKindLabel.jsp create mode 100644 src/main/webapp/views/system/customerTrain/introduce/kindLabel/customerIntroduceKindLabel.jsp create mode 100644 src/main/webapp/views/system/customerTrain/introduce/kindLabel/updateCustomerIntroduceKindLabel.jsp create mode 100644 src/main/webapp/views/system/customerTrain/introduce/proType/addCustomerIntroduceProType.jsp create mode 100644 src/main/webapp/views/system/customerTrain/introduce/proType/customerIntroduceProType.jsp create mode 100644 src/main/webapp/views/system/customerTrain/introduce/proType/updateCustomerIntroduceProType.jsp create mode 100644 src/main/webapp/views/system/customerTrain/introduce/showCustomerIntroduceContent.jsp create mode 100644 src/main/webapp/views/system/customerTrain/knowledge/content/addCustomerKnowledgeContent.jsp create mode 100644 src/main/webapp/views/system/customerTrain/knowledge/content/customerKnowledgeContent.jsp create mode 100644 src/main/webapp/views/system/customerTrain/knowledge/content/updateCustomerKnowledgeContent.jsp create mode 100644 src/main/webapp/views/system/customerTrain/knowledge/kindLabel/addCustomerKnowledgeKindLabel.jsp create mode 100644 src/main/webapp/views/system/customerTrain/knowledge/kindLabel/customerKnowledgeKindLabel.jsp create mode 100644 src/main/webapp/views/system/customerTrain/knowledge/kindLabel/updateCustomerKnowledgeKindLabel.jsp create mode 100644 src/main/webapp/views/system/customerTrain/knowledge/proType/addCustomerKnowledgeProType.jsp create mode 100644 src/main/webapp/views/system/customerTrain/knowledge/proType/customerKnowledgeProType.jsp create mode 100644 src/main/webapp/views/system/customerTrain/knowledge/proType/updateCustomerKnowledgeProType.jsp create mode 100644 src/main/webapp/views/system/customerTrain/knowledge/showCustomerKnowledgeContent.jsp create mode 100644 src/main/webapp/views/system/customerTrain/saleSkill/content/addCustomerSaleSkillContent.jsp create mode 100644 src/main/webapp/views/system/customerTrain/saleSkill/content/customerSaleSkillContent.jsp create mode 100644 src/main/webapp/views/system/customerTrain/saleSkill/content/updateCustomerSaleSkillContent.jsp create mode 100644 src/main/webapp/views/system/customerTrain/saleSkill/kindLabel/addCustomerSaleSkillKindLabel.jsp create mode 100644 src/main/webapp/views/system/customerTrain/saleSkill/kindLabel/customerSaleSkillKindLabel.jsp create mode 100644 src/main/webapp/views/system/customerTrain/saleSkill/kindLabel/updateCustomerSaleSkillKindLabel.jsp create mode 100644 src/main/webapp/views/system/customerTrain/saleSkill/proType/addCustomerSaleSkillProType.jsp create mode 100644 src/main/webapp/views/system/customerTrain/saleSkill/proType/customerSaleSkillProType.jsp create mode 100644 src/main/webapp/views/system/customerTrain/saleSkill/proType/updateCustomerSaleSkillProType.jsp create mode 100644 src/main/webapp/views/system/customerTrain/saleSkill/showCustomerSaleSkillContent.jsp create mode 100644 src/main/webapp/views/system/customerTrain/skill/content/addCustomerSkillContent.jsp create mode 100644 src/main/webapp/views/system/customerTrain/skill/content/customerSkillContent.jsp create mode 100644 src/main/webapp/views/system/customerTrain/skill/content/updateCustomerSkillContent.jsp create mode 100644 src/main/webapp/views/system/customerTrain/skill/kindLabel/addCustomerSkillKindLabel.jsp create mode 100644 src/main/webapp/views/system/customerTrain/skill/kindLabel/customerSkillKindLabel.jsp create mode 100644 src/main/webapp/views/system/customerTrain/skill/kindLabel/updateCustomerSkillKindLabel.jsp create mode 100644 src/main/webapp/views/system/customerTrain/skill/proType/addCustomerSkillProType.jsp create mode 100644 src/main/webapp/views/system/customerTrain/skill/proType/customerSkillProType.jsp create mode 100644 src/main/webapp/views/system/customerTrain/skill/proType/updateCustomerSkillProType.jsp create mode 100644 src/main/webapp/views/system/customerTrain/skill/showCustomerSkillContent.jsp create mode 100644 src/main/webapp/views/system/expressFee/addExpressFee.jsp create mode 100644 src/main/webapp/views/system/expressFee/expressFee.jsp create mode 100644 src/main/webapp/views/system/expressFee/updateExpressFee.jsp create mode 100644 src/main/webapp/views/system/finance/extract/extract.jsp create mode 100644 src/main/webapp/views/system/finance/finance.jsp create mode 100644 src/main/webapp/views/system/finance/finance2.jsp create mode 100644 src/main/webapp/views/system/finance/finance3.jsp create mode 100644 src/main/webapp/views/system/finance/finance4.jsp create mode 100644 src/main/webapp/views/system/finance/finance5.jsp create mode 100644 src/main/webapp/views/system/finance/finance6.jsp create mode 100644 src/main/webapp/views/system/finance/finance7.jsp create mode 100644 src/main/webapp/views/system/financeDifference/difference.jsp create mode 100644 src/main/webapp/views/system/information/addInformation.jsp create mode 100644 src/main/webapp/views/system/information/information.jsp create mode 100644 src/main/webapp/views/system/information/updateInformation.jsp create mode 100644 src/main/webapp/views/system/loginIp/addLoginIp.jsp create mode 100644 src/main/webapp/views/system/loginIp/loginIp.jsp create mode 100644 src/main/webapp/views/system/loginIp/updateLoginIp.jsp create mode 100644 src/main/webapp/views/system/loginLog/loginLog.jsp create mode 100644 src/main/webapp/views/system/permission/index.jsp create mode 100644 src/main/webapp/views/system/product/product.jsp create mode 100644 src/main/webapp/views/system/question/addQuestion.jsp create mode 100644 src/main/webapp/views/system/question/question.jsp create mode 100644 src/main/webapp/views/system/question/updateQuestion.jsp create mode 100644 src/main/webapp/views/system/quoteData/addOrderNumber.jsp create mode 100644 src/main/webapp/views/system/quoteData/kefuTotal.jsp create mode 100644 src/main/webapp/views/system/quoteData/quoteData.jsp create mode 100644 src/main/webapp/views/system/quoteData/summary.jsp create mode 100644 src/main/webapp/views/system/quoteLog/quoteLog.jsp create mode 100644 src/main/webapp/views/system/role/addRole.jsp create mode 100644 src/main/webapp/views/system/role/role.jsp create mode 100644 src/main/webapp/views/system/role/updateRole.jsp create mode 100644 src/main/webapp/views/system/searchPro/addSearchPro.jsp create mode 100644 src/main/webapp/views/system/searchPro/searchPro.jsp create mode 100644 src/main/webapp/views/system/updateLog/addLog.jsp create mode 100644 src/main/webapp/views/system/updateLog/log.jsp create mode 100644 src/main/webapp/views/system/updateLog/updateLog.jsp create mode 100644 src/main/webapp/views/system/user/addUser.jsp create mode 100644 src/main/webapp/views/system/user/updatePassword.jsp create mode 100644 src/main/webapp/views/system/user/updateUser.jsp create mode 100644 src/main/webapp/views/system/user/user.jsp create mode 100644 src/main/webapp/views/testPaper.jsp create mode 100644 src/main/webapp/views/videoPaper.jsp create mode 100644 src/test/java/quote_price/LunarToSolarTest.java create mode 100644 src/test/java/quote_price/StringSubTest.java create mode 100644 src/test/java/quote_price/Test.java create mode 100644 src/test/java/quote_price/TestMaxMin.java create mode 100644 src/test/java/quote_price/TestStickers.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e87c343 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.idea/* +target/* diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/pom.properties b/pom.properties new file mode 100644 index 0000000..f784bbc --- /dev/null +++ b/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Sun Feb 06 16:55:31 CST 2022 +version=0.0.1-SNAPSHOT +groupId=lingtao.net +artifactId=quote_price diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..4815562 --- /dev/null +++ b/pom.xml @@ -0,0 +1,211 @@ + + 4.0.0 + lingtao.net + quote_price + 0.0.1-SNAPSHOT + war + + quote_price + + + org.apache.maven.plugins + maven-compiler-plugin + 3.6.1 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-war-plugin + + + + src/main/resources/lib + WEB-INF/lib/ + + **/*.jar + + + + + + + + + + + com.github.pagehelper + pagehelper + 5.0.0 + + + + org.springframework + spring-webmvc + 4.2.4.RELEASE + + + + org.springframework + spring-jdbc + 4.2.4.RELEASE + + + + org.springframework + spring-aspects + 4.2.4.RELEASE + + + + org.mybatis + mybatis + 3.4.6 + + + + org.mybatis + mybatis-spring + 1.3.2 + + + + com.mchange + c3p0 + 0.9.5.2 + + + + + mysql + mysql-connector-java + 5.1.32 + + + + jstl + jstl + 1.2 + + + + taglibs + standard + 1.1.2 + + + javax.servlet + javax.servlet-api + 3.0.1 + provided + + + + junit + junit + 4.12 + + + + + org.springframework + spring-test + 4.2.4.RELEASE + + + javax.servlet + jsp-api + 2.0 + + + + com.fasterxml.jackson.core + jackson-databind + 2.8.8 + + + + org.hibernate + hibernate-validator + 5.3.6.Final + + + + + org.projectlombok + lombok + 1.18.12 + provided + + + + commons-fileupload + commons-fileupload + 1.3.3 + + + org.apache.poi + poi-ooxml + 3.14-beta1 + + + org.apache.poi + poi-ooxml-schemas + 3.14-beta1 + + + org.apache.poi + poi + 3.14-beta1 + + + org.apache.httpcomponents + httpclient + 4.5.2 + + + net.sf.json-lib + json-lib + 2.4 + jdk15 + + + org.slf4j + slf4j-log4j12 + 1.7.14 + + + + org.apache.shiro + shiro-all + 1.3.2 + + + + eu.bitwalker + UserAgentUtils + 1.20 + + + com.alibaba + fastjson + 1.2.24 + + + com.singularsys + jep + 3.5 + system + ${project.basedir}/src/main/resources/lib/jep-java-3.5-trial.jar + + + + + UTF-8 + + + \ No newline at end of file diff --git a/src/main/java/lingtao/net/base/ActionMessage.java b/src/main/java/lingtao/net/base/ActionMessage.java new file mode 100644 index 0000000..629aced --- /dev/null +++ b/src/main/java/lingtao/net/base/ActionMessage.java @@ -0,0 +1,16 @@ +package lingtao.net.base; + +public interface ActionMessage{ + public final String SYS_STATE = "state"; + public final String SYS_STATUS = "status"; + public final String SYS_MESSAGE = "message"; + public final String SYS_SUCESS_MESSAGE = "操作成功!"; + public final String SYS_FAIL_MESSAGE = "操作失败!"; + public final String SYS_NO_MESSAGE = "数据库无数据更新!"; + public static final String SYS_WARN = "系统出错!请联系管理员"; + public final String LMQ_SUCESS_MESSAGE = "SUCCESS"; + public final String LMQ_FAIL_MESSAGE = "FAIL"; + + public final String SYS_CODE = "code"; + public final String SYS_DATA = "data"; +} diff --git a/src/main/java/lingtao/net/bean/Article.java b/src/main/java/lingtao/net/bean/Article.java new file mode 100644 index 0000000..8b9c6d9 --- /dev/null +++ b/src/main/java/lingtao/net/bean/Article.java @@ -0,0 +1,125 @@ +package lingtao.net.bean; + +import java.util.Date; + +public class Article { + private Integer id; + + private String title; + + private String type; + + private String status; + + private String imagesUrl; + + private Integer hit; + + private String remark; + + private String createBy; + + private Date createDate; + + private String updateBy; + + private Date updateDate; + + private String content; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title == null ? null : title.trim(); + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type == null ? null : type.trim(); + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status == null ? null : status.trim(); + } + + public String getImagesUrl() { + return imagesUrl; + } + + public void setImagesUrl(String imagesUrl) { + this.imagesUrl = imagesUrl == null ? null : imagesUrl.trim(); + } + + public Integer getHit() { + return hit; + } + + public void setHit(Integer hit) { + this.hit = hit; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark == null ? null : remark.trim(); + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy == null ? null : createBy.trim(); + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy == null ? null : updateBy.trim(); + } + + public Date getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content == null ? null : content.trim(); + } +} \ No newline at end of file diff --git a/src/main/java/lingtao/net/bean/ArticleExample.java b/src/main/java/lingtao/net/bean/ArticleExample.java new file mode 100644 index 0000000..07fd71e --- /dev/null +++ b/src/main/java/lingtao/net/bean/ArticleExample.java @@ -0,0 +1,931 @@ +package lingtao.net.bean; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class ArticleExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public ArticleExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andTitleIsNull() { + addCriterion("title is null"); + return (Criteria) this; + } + + public Criteria andTitleIsNotNull() { + addCriterion("title is not null"); + return (Criteria) this; + } + + public Criteria andTitleEqualTo(String value) { + addCriterion("title =", value, "title"); + return (Criteria) this; + } + + public Criteria andTitleNotEqualTo(String value) { + addCriterion("title <>", value, "title"); + return (Criteria) this; + } + + public Criteria andTitleGreaterThan(String value) { + addCriterion("title >", value, "title"); + return (Criteria) this; + } + + public Criteria andTitleGreaterThanOrEqualTo(String value) { + addCriterion("title >=", value, "title"); + return (Criteria) this; + } + + public Criteria andTitleLessThan(String value) { + addCriterion("title <", value, "title"); + return (Criteria) this; + } + + public Criteria andTitleLessThanOrEqualTo(String value) { + addCriterion("title <=", value, "title"); + return (Criteria) this; + } + + public Criteria andTitleLike(String value) { + addCriterion("title like", value, "title"); + return (Criteria) this; + } + + public Criteria andTitleNotLike(String value) { + addCriterion("title not like", value, "title"); + return (Criteria) this; + } + + public Criteria andTitleIn(List values) { + addCriterion("title in", values, "title"); + return (Criteria) this; + } + + public Criteria andTitleNotIn(List values) { + addCriterion("title not in", values, "title"); + return (Criteria) this; + } + + public Criteria andTitleBetween(String value1, String value2) { + addCriterion("title between", value1, value2, "title"); + return (Criteria) this; + } + + public Criteria andTitleNotBetween(String value1, String value2) { + addCriterion("title not between", value1, value2, "title"); + return (Criteria) this; + } + + public Criteria andTypeIsNull() { + addCriterion("type is null"); + return (Criteria) this; + } + + public Criteria andTypeIsNotNull() { + addCriterion("type is not null"); + return (Criteria) this; + } + + public Criteria andTypeEqualTo(String value) { + addCriterion("type =", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotEqualTo(String value) { + addCriterion("type <>", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThan(String value) { + addCriterion("type >", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThanOrEqualTo(String value) { + addCriterion("type >=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThan(String value) { + addCriterion("type <", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThanOrEqualTo(String value) { + addCriterion("type <=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLike(String value) { + addCriterion("type like", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotLike(String value) { + addCriterion("type not like", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeIn(List values) { + addCriterion("type in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotIn(List values) { + addCriterion("type not in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeBetween(String value1, String value2) { + addCriterion("type between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotBetween(String value1, String value2) { + addCriterion("type not between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andStatusIsNull() { + addCriterion("status is null"); + return (Criteria) this; + } + + public Criteria andStatusIsNotNull() { + addCriterion("status is not null"); + return (Criteria) this; + } + + public Criteria andStatusEqualTo(String value) { + addCriterion("status =", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotEqualTo(String value) { + addCriterion("status <>", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusGreaterThan(String value) { + addCriterion("status >", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusGreaterThanOrEqualTo(String value) { + addCriterion("status >=", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusLessThan(String value) { + addCriterion("status <", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusLessThanOrEqualTo(String value) { + addCriterion("status <=", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusLike(String value) { + addCriterion("status like", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotLike(String value) { + addCriterion("status not like", value, "status"); + return (Criteria) this; + } + + public Criteria andStatusIn(List values) { + addCriterion("status in", values, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotIn(List values) { + addCriterion("status not in", values, "status"); + return (Criteria) this; + } + + public Criteria andStatusBetween(String value1, String value2) { + addCriterion("status between", value1, value2, "status"); + return (Criteria) this; + } + + public Criteria andStatusNotBetween(String value1, String value2) { + addCriterion("status not between", value1, value2, "status"); + return (Criteria) this; + } + + public Criteria andImagesUrlIsNull() { + addCriterion("imagesUrl is null"); + return (Criteria) this; + } + + public Criteria andImagesUrlIsNotNull() { + addCriterion("imagesUrl is not null"); + return (Criteria) this; + } + + public Criteria andImagesUrlEqualTo(String value) { + addCriterion("imagesUrl =", value, "imagesUrl"); + return (Criteria) this; + } + + public Criteria andImagesUrlNotEqualTo(String value) { + addCriterion("imagesUrl <>", value, "imagesUrl"); + return (Criteria) this; + } + + public Criteria andImagesUrlGreaterThan(String value) { + addCriterion("imagesUrl >", value, "imagesUrl"); + return (Criteria) this; + } + + public Criteria andImagesUrlGreaterThanOrEqualTo(String value) { + addCriterion("imagesUrl >=", value, "imagesUrl"); + return (Criteria) this; + } + + public Criteria andImagesUrlLessThan(String value) { + addCriterion("imagesUrl <", value, "imagesUrl"); + return (Criteria) this; + } + + public Criteria andImagesUrlLessThanOrEqualTo(String value) { + addCriterion("imagesUrl <=", value, "imagesUrl"); + return (Criteria) this; + } + + public Criteria andImagesUrlLike(String value) { + addCriterion("imagesUrl like", value, "imagesUrl"); + return (Criteria) this; + } + + public Criteria andImagesUrlNotLike(String value) { + addCriterion("imagesUrl not like", value, "imagesUrl"); + return (Criteria) this; + } + + public Criteria andImagesUrlIn(List values) { + addCriterion("imagesUrl in", values, "imagesUrl"); + return (Criteria) this; + } + + public Criteria andImagesUrlNotIn(List values) { + addCriterion("imagesUrl not in", values, "imagesUrl"); + return (Criteria) this; + } + + public Criteria andImagesUrlBetween(String value1, String value2) { + addCriterion("imagesUrl between", value1, value2, "imagesUrl"); + return (Criteria) this; + } + + public Criteria andImagesUrlNotBetween(String value1, String value2) { + addCriterion("imagesUrl not between", value1, value2, "imagesUrl"); + return (Criteria) this; + } + + public Criteria andHitIsNull() { + addCriterion("hit is null"); + return (Criteria) this; + } + + public Criteria andHitIsNotNull() { + addCriterion("hit is not null"); + return (Criteria) this; + } + + public Criteria andHitEqualTo(Integer value) { + addCriterion("hit =", value, "hit"); + return (Criteria) this; + } + + public Criteria andHitNotEqualTo(Integer value) { + addCriterion("hit <>", value, "hit"); + return (Criteria) this; + } + + public Criteria andHitGreaterThan(Integer value) { + addCriterion("hit >", value, "hit"); + return (Criteria) this; + } + + public Criteria andHitGreaterThanOrEqualTo(Integer value) { + addCriterion("hit >=", value, "hit"); + return (Criteria) this; + } + + public Criteria andHitLessThan(Integer value) { + addCriterion("hit <", value, "hit"); + return (Criteria) this; + } + + public Criteria andHitLessThanOrEqualTo(Integer value) { + addCriterion("hit <=", value, "hit"); + return (Criteria) this; + } + + public Criteria andHitIn(List values) { + addCriterion("hit in", values, "hit"); + return (Criteria) this; + } + + public Criteria andHitNotIn(List values) { + addCriterion("hit not in", values, "hit"); + return (Criteria) this; + } + + public Criteria andHitBetween(Integer value1, Integer value2) { + addCriterion("hit between", value1, value2, "hit"); + return (Criteria) this; + } + + public Criteria andHitNotBetween(Integer value1, Integer value2) { + addCriterion("hit not between", value1, value2, "hit"); + return (Criteria) this; + } + + public Criteria andRemarkIsNull() { + addCriterion("remark is null"); + return (Criteria) this; + } + + public Criteria andRemarkIsNotNull() { + addCriterion("remark is not null"); + return (Criteria) this; + } + + public Criteria andRemarkEqualTo(String value) { + addCriterion("remark =", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotEqualTo(String value) { + addCriterion("remark <>", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThan(String value) { + addCriterion("remark >", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThanOrEqualTo(String value) { + addCriterion("remark >=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThan(String value) { + addCriterion("remark <", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThanOrEqualTo(String value) { + addCriterion("remark <=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLike(String value) { + addCriterion("remark like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotLike(String value) { + addCriterion("remark not like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkIn(List values) { + addCriterion("remark in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotIn(List values) { + addCriterion("remark not in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkBetween(String value1, String value2) { + addCriterion("remark between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotBetween(String value1, String value2) { + addCriterion("remark not between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andCreateByIsNull() { + addCriterion("createBy is null"); + return (Criteria) this; + } + + public Criteria andCreateByIsNotNull() { + addCriterion("createBy is not null"); + return (Criteria) this; + } + + public Criteria andCreateByEqualTo(String value) { + addCriterion("createBy =", value, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByNotEqualTo(String value) { + addCriterion("createBy <>", value, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByGreaterThan(String value) { + addCriterion("createBy >", value, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByGreaterThanOrEqualTo(String value) { + addCriterion("createBy >=", value, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByLessThan(String value) { + addCriterion("createBy <", value, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByLessThanOrEqualTo(String value) { + addCriterion("createBy <=", value, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByLike(String value) { + addCriterion("createBy like", value, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByNotLike(String value) { + addCriterion("createBy not like", value, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByIn(List values) { + addCriterion("createBy in", values, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByNotIn(List values) { + addCriterion("createBy not in", values, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByBetween(String value1, String value2) { + addCriterion("createBy between", value1, value2, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByNotBetween(String value1, String value2) { + addCriterion("createBy not between", value1, value2, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateDateIsNull() { + addCriterion("createDate is null"); + return (Criteria) this; + } + + public Criteria andCreateDateIsNotNull() { + addCriterion("createDate is not null"); + return (Criteria) this; + } + + public Criteria andCreateDateEqualTo(Date value) { + addCriterion("createDate =", value, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateNotEqualTo(Date value) { + addCriterion("createDate <>", value, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateGreaterThan(Date value) { + addCriterion("createDate >", value, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateGreaterThanOrEqualTo(Date value) { + addCriterion("createDate >=", value, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateLessThan(Date value) { + addCriterion("createDate <", value, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateLessThanOrEqualTo(Date value) { + addCriterion("createDate <=", value, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateIn(List values) { + addCriterion("createDate in", values, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateNotIn(List values) { + addCriterion("createDate not in", values, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateBetween(Date value1, Date value2) { + addCriterion("createDate between", value1, value2, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateNotBetween(Date value1, Date value2) { + addCriterion("createDate not between", value1, value2, "createDate"); + return (Criteria) this; + } + + public Criteria andUpdateByIsNull() { + addCriterion("updateBy is null"); + return (Criteria) this; + } + + public Criteria andUpdateByIsNotNull() { + addCriterion("updateBy is not null"); + return (Criteria) this; + } + + public Criteria andUpdateByEqualTo(String value) { + addCriterion("updateBy =", value, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByNotEqualTo(String value) { + addCriterion("updateBy <>", value, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByGreaterThan(String value) { + addCriterion("updateBy >", value, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByGreaterThanOrEqualTo(String value) { + addCriterion("updateBy >=", value, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByLessThan(String value) { + addCriterion("updateBy <", value, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByLessThanOrEqualTo(String value) { + addCriterion("updateBy <=", value, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByLike(String value) { + addCriterion("updateBy like", value, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByNotLike(String value) { + addCriterion("updateBy not like", value, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByIn(List values) { + addCriterion("updateBy in", values, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByNotIn(List values) { + addCriterion("updateBy not in", values, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByBetween(String value1, String value2) { + addCriterion("updateBy between", value1, value2, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByNotBetween(String value1, String value2) { + addCriterion("updateBy not between", value1, value2, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateDateIsNull() { + addCriterion("updateDate is null"); + return (Criteria) this; + } + + public Criteria andUpdateDateIsNotNull() { + addCriterion("updateDate is not null"); + return (Criteria) this; + } + + public Criteria andUpdateDateEqualTo(Date value) { + addCriterion("updateDate =", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateNotEqualTo(Date value) { + addCriterion("updateDate <>", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateGreaterThan(Date value) { + addCriterion("updateDate >", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateGreaterThanOrEqualTo(Date value) { + addCriterion("updateDate >=", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateLessThan(Date value) { + addCriterion("updateDate <", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateLessThanOrEqualTo(Date value) { + addCriterion("updateDate <=", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateIn(List values) { + addCriterion("updateDate in", values, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateNotIn(List values) { + addCriterion("updateDate not in", values, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateBetween(Date value1, Date value2) { + addCriterion("updateDate between", value1, value2, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateNotBetween(Date value1, Date value2) { + addCriterion("updateDate not between", value1, value2, "updateDate"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/lingtao/net/bean/Bug.java b/src/main/java/lingtao/net/bean/Bug.java new file mode 100644 index 0000000..c0c7787 --- /dev/null +++ b/src/main/java/lingtao/net/bean/Bug.java @@ -0,0 +1,65 @@ +package lingtao.net.bean; + +import java.util.Date; + +import lombok.Data; + +/** + * 问题反馈 + * + * @author Administrator + * + */ +@Data +public class Bug { + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getProduct() { + return product; + } + + public void setProduct(String product) { + this.product = product; + } + + public String getBugRemark() { + return bugRemark; + } + + public void setBugRemark(String bugRemark) { + this.bugRemark = bugRemark; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + private Integer id; + + private String product; + + private String bugRemark; + + private String createBy; + + private Date createDate; +} diff --git a/src/main/java/lingtao/net/bean/CustomerAward.java b/src/main/java/lingtao/net/bean/CustomerAward.java new file mode 100644 index 0000000..cc08134 --- /dev/null +++ b/src/main/java/lingtao/net/bean/CustomerAward.java @@ -0,0 +1,129 @@ +package lingtao.net.bean; + +import java.util.Date; + +import lombok.Data; + +@Data +public class CustomerAward { + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getNickname() { + return nickname; + } + + public void setNickname(String nickname) { + this.nickname = nickname; + } + + public Double getPayPercent() { + return payPercent; + } + + public void setPayPercent(Double payPercent) { + this.payPercent = payPercent; + } + + public Double getAskNumber() { + return askNumber; + } + + public void setAskNumber(Double askNumber) { + this.askNumber = askNumber; + } + + public Double getCustomerPrice() { + return customerPrice; + } + + public void setCustomerPrice(Double customerPrice) { + this.customerPrice = customerPrice; + } + + public Integer getAward() { + return award; + } + + public void setAward(Integer award) { + this.award = award; + } + + public String getShopname() { + return shopname; + } + + public void setShopname(String shopname) { + this.shopname = shopname; + } + + public String getAwardDate() { + return awardDate; + } + + public void setAwardDate(String awardDate) { + this.awardDate = awardDate; + } + + public String getCreator() { + return creator; + } + + public void setCreator(String creator) { + this.creator = creator; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public String getCreateTimeBegin() { + return createTimeBegin; + } + + public void setCreateTimeBegin(String createTimeBegin) { + this.createTimeBegin = createTimeBegin; + } + + public String getCreateTimeEnd() { + return createTimeEnd; + } + + public void setCreateTimeEnd(String createTimeEnd) { + this.createTimeEnd = createTimeEnd; + } + + private Integer id; + + private String nickname; + + private Double payPercent; + + private Double askNumber; + + private Double customerPrice; + + private Integer award; + + private String shopname; + + private String awardDate; + + private String creator; + + private Date createDate; + + private String createTimeBegin; + + private String createTimeEnd; +} diff --git a/src/main/java/lingtao/net/bean/CustomerData.java b/src/main/java/lingtao/net/bean/CustomerData.java new file mode 100644 index 0000000..edf7ede --- /dev/null +++ b/src/main/java/lingtao/net/bean/CustomerData.java @@ -0,0 +1,241 @@ +package lingtao.net.bean; + +import java.util.Date; + +import lombok.Data; + +/** + * 客服数据 + * + * @author Administrator + * + */ +@Data +public class CustomerData { + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getRealname() { + return realname; + } + + public void setRealname(String realname) { + this.realname = realname; + } + + public String getRole() { + return role; + } + + public void setRole(String role) { + this.role = role; + } + + public double getPrice() { + return price; + } + + public void setPrice(double price) { + this.price = price; + } + + public String getProductExplain() { + return productExplain; + } + + public void setProductExplain(String productExplain) { + this.productExplain = productExplain; + } + + public String getWangwang() { + return wangwang; + } + + public void setWangwang(String wangwang) { + this.wangwang = wangwang; + } + + public String getIsBuy() { + return isBuy; + } + + public void setIsBuy(String isBuy) { + this.isBuy = isBuy; + } + + public String getCommentSelf() { + return commentSelf; + } + + public void setCommentSelf(String commentSelf) { + this.commentSelf = commentSelf; + } + + public String getCommentManager() { + return commentManager; + } + + public void setCommentManager(String commentManager) { + this.commentManager = commentManager; + } + + public Date getCommentDate() { + return commentDate; + } + + public void setCommentDate(Date commentDate) { + this.commentDate = commentDate; + } + + public String getIsDelete() { + return isDelete; + } + + public void setIsDelete(String isDelete) { + this.isDelete = isDelete; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public Date getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + } + + public Date getCompleteDate() { + return completeDate; + } + + public void setCompleteDate(Date completeDate) { + this.completeDate = completeDate; + } + + public String getRoleSearch() { + return roleSearch; + } + + public void setRoleSearch(String roleSearch) { + this.roleSearch = roleSearch; + } + + public String[] getRoleArr() { + return roleArr; + } + + public void setRoleArr(String[] roleArr) { + this.roleArr = roleArr; + } + + public String getCreateDateBegin() { + return createDateBegin; + } + + public void setCreateDateBegin(String createDateBegin) { + this.createDateBegin = createDateBegin; + } + + public String getCreateDateEnd() { + return createDateEnd; + } + + public void setCreateDateEnd(String createDateEnd) { + this.createDateEnd = createDateEnd; + } + + // 主键id + private Integer id; + + // 用户名 + private String username; + + // 真实姓名 + private String realname; + + // 所属店铺/角色 + private String role; + + // 价格 + private double price; + + // 产品说明 + private String productExplain; + + // 客人旺旺 + private String wangwang; + + // 是否购买 + private String isBuy; + + // 自评 + private String commentSelf; + + // 店长评语 + private String commentManager; + + // 店长评语时间 + private Date commentDate; + + // 是否删除 0:否 1:是 + private String isDelete; + + private String createBy; + + private Date createDate; + + private String updateBy; + + private Date updateDate; + + // 完成时间 + private Date completeDate; + + // 根据角色(部门)查找数据 + private String roleSearch; + + // 用户所拥有的部门数组 + private String[] roleArr; + + private String createDateBegin; + + private String createDateEnd; + +} diff --git a/src/main/java/lingtao/net/bean/CustomerTrainContent.java b/src/main/java/lingtao/net/bean/CustomerTrainContent.java new file mode 100644 index 0000000..c3d3cd2 --- /dev/null +++ b/src/main/java/lingtao/net/bean/CustomerTrainContent.java @@ -0,0 +1,110 @@ +package lingtao.net.bean; + +import java.util.Date; + +import lombok.Data; + +@Data +public class CustomerTrainContent { + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getProType() { + return proType; + } + + public void setProType(String proType) { + this.proType = proType; + } + + public String getKind() { + return kind; + } + + public void setKind(String kind) { + this.kind = kind; + } + + public Integer getSort() { + return sort; + } + + public void setSort(Integer sort) { + this.sort = sort; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public Date getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + } + + private Integer id; + + private String proType; + + private String kind; + + private Integer sort; + + private String content; + + private String type; + + private String createBy; + + private Date createDate; + + private String updateBy; + + private Date updateDate; + +} diff --git a/src/main/java/lingtao/net/bean/CustomerTrainKindLabel.java b/src/main/java/lingtao/net/bean/CustomerTrainKindLabel.java new file mode 100644 index 0000000..7cc1ada --- /dev/null +++ b/src/main/java/lingtao/net/bean/CustomerTrainKindLabel.java @@ -0,0 +1,110 @@ +package lingtao.net.bean; + +import java.util.Date; + +import lombok.Data; + +@Data +public class CustomerTrainKindLabel { + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getProType() { + return proType; + } + + public void setProType(String proType) { + this.proType = proType; + } + + public String getKindLabel() { + return kindLabel; + } + + public void setKindLabel(String kindLabel) { + this.kindLabel = kindLabel; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public Integer getSort() { + return sort; + } + + public void setSort(Integer sort) { + this.sort = sort; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public Date getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + } + + private Integer id; + + private String proType; + + private String kindLabel; + + private String remark; + + private Integer sort; + + private String type; + + private String createBy; + + private Date createDate; + + private String updateBy; + + private Date updateDate; + +} diff --git a/src/main/java/lingtao/net/bean/CustomerTrainProType.java b/src/main/java/lingtao/net/bean/CustomerTrainProType.java new file mode 100644 index 0000000..9216e48 --- /dev/null +++ b/src/main/java/lingtao/net/bean/CustomerTrainProType.java @@ -0,0 +1,100 @@ +package lingtao.net.bean; + +import java.util.Date; + +import lombok.Data; + +@Data +public class CustomerTrainProType { + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getProType() { + return proType; + } + + public void setProType(String proType) { + this.proType = proType; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public Integer getSort() { + return sort; + } + + public void setSort(Integer sort) { + this.sort = sort; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public Date getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + } + + private Integer id; + + private String proType; + + private String remark; + + private Integer sort; + + private String type; + + private String createBy; + + private Date createDate; + + private String updateBy; + + private Date updateDate; + +} diff --git a/src/main/java/lingtao/net/bean/ExpressFee.java b/src/main/java/lingtao/net/bean/ExpressFee.java new file mode 100644 index 0000000..923a129 --- /dev/null +++ b/src/main/java/lingtao/net/bean/ExpressFee.java @@ -0,0 +1,125 @@ +package lingtao.net.bean; + +import java.util.Date; + +import lombok.Data; + +/** + * 省份快递费 + * + * @author Administrator + * + */ +@Data +public class ExpressFee { + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getProvince() { + return province; + } + + public void setProvince(String province) { + this.province = province; + } + + public String getProTypeValue() { + return proTypeValue; + } + + public void setProTypeValue(String proTypeValue) { + this.proTypeValue = proTypeValue; + } + + public String getProTypeLabel() { + return proTypeLabel; + } + + public void setProTypeLabel(String proTypeLabel) { + this.proTypeLabel = proTypeLabel; + } + + public double getFirstWeightPrice() { + return firstWeightPrice; + } + + public void setFirstWeightPrice(double firstWeightPrice) { + this.firstWeightPrice = firstWeightPrice; + } + + public double getContinuedWeightPrice() { + return continuedWeightPrice; + } + + public void setContinuedWeightPrice(double continuedWeightPrice) { + this.continuedWeightPrice = continuedWeightPrice; + } + + public double getStartPrice() { + return startPrice; + } + + public void setStartPrice(double startPrice) { + this.startPrice = startPrice; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public Date getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + } + + private Integer id; + + private String province; + + private String proTypeValue; + + private String proTypeLabel; + + private double firstWeightPrice; + + private double continuedWeightPrice; + + private double startPrice; + + private String createBy; + + private Date createDate; + + private String updateBy; + + private Date updateDate; +} diff --git a/src/main/java/lingtao/net/bean/Finance.java b/src/main/java/lingtao/net/bean/Finance.java new file mode 100644 index 0000000..9caf72e --- /dev/null +++ b/src/main/java/lingtao/net/bean/Finance.java @@ -0,0 +1,149 @@ +package lingtao.net.bean; + +import java.util.Date; + +import lombok.Data; + +@Data +public class Finance { + + private Integer id; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Date getAddTime() { + return addTime; + } + + public void setAddTime(Date addTime) { + this.addTime = addTime; + } + + public String getSupplier() { + return supplier; + } + + public void setSupplier(String supplier) { + this.supplier = supplier; + } + + public String getShopname() { + return shopname; + } + + public void setShopname(String shopname) { + this.shopname = shopname; + } + + public String getKind() { + return kind; + } + + public void setKind(String kind) { + this.kind = kind; + } + + public String getKind2() { + return kind2; + } + + public void setKind2(String kind2) { + this.kind2 = kind2; + } + + public String getOrderNumber() { + return orderNumber; + } + + public void setOrderNumber(String orderNumber) { + this.orderNumber = orderNumber; + } + + public String getFilename() { + return filename; + } + + public void setFilename(String filename) { + this.filename = filename; + } + + public String getCount() { + return count; + } + + public void setCount(String count) { + this.count = count; + } + + public String getNumber() { + return number; + } + + public void setNumber(String number) { + this.number = number; + } + + public String getZhang() { + return zhang; + } + + public void setZhang(String zhang) { + this.zhang = zhang; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public String getCreator() { + return creator; + } + + public void setCreator(String creator) { + this.creator = creator; + } + + private Date addTime; + + private String supplier; + + private String shopname; + + private String kind; + + private String kind2; + + private String orderNumber; + + private String filename; + + private String count; + + private String number; + + private String zhang; + + private String remark; + + private Date createDate; + + private String creator; +} diff --git a/src/main/java/lingtao/net/bean/FinanceDifference.java b/src/main/java/lingtao/net/bean/FinanceDifference.java new file mode 100644 index 0000000..31effb8 --- /dev/null +++ b/src/main/java/lingtao/net/bean/FinanceDifference.java @@ -0,0 +1,135 @@ +package lingtao.net.bean; + +import java.util.Date; + +import lombok.Data; + +/** + * 拆分补差价单号 + * + * @author Administrator + * + */ +@Data +public class FinanceDifference { + + private Integer id; + + private String orderNumber; + + private String shopname; + + private String wangwang; + + private Date payTime; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getOrderNumber() { + return orderNumber; + } + + public void setOrderNumber(String orderNumber) { + this.orderNumber = orderNumber; + } + + public String getShopname() { + return shopname; + } + + public void setShopname(String shopname) { + this.shopname = shopname; + } + + public String getWangwang() { + return wangwang; + } + + public void setWangwang(String wangwang) { + this.wangwang = wangwang; + } + + public Date getPayTime() { + return payTime; + } + + public void setPayTime(Date payTime) { + this.payTime = payTime; + } + + public String getPrice() { + return price; + } + + public void setPrice(String price) { + this.price = price; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getTaobaoStatus() { + return taobaoStatus; + } + + public void setTaobaoStatus(String taobaoStatus) { + this.taobaoStatus = taobaoStatus; + } + + public String getOpenOrderNumber() { + return openOrderNumber; + } + + public void setOpenOrderNumber(String openOrderNumber) { + this.openOrderNumber = openOrderNumber; + } + + public String getFilename() { + return filename; + } + + public void setFilename(String filename) { + this.filename = filename; + } + + public String getCreator() { + return creator; + } + + public void setCreator(String creator) { + this.creator = creator; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + private String price; + + private String remark; + + private String taobaoStatus; + + private String openOrderNumber; + + private String filename; + + private String creator; + + private Date createDate; +} diff --git a/src/main/java/lingtao/net/bean/FinanceExtract.java b/src/main/java/lingtao/net/bean/FinanceExtract.java new file mode 100644 index 0000000..d7d0c88 --- /dev/null +++ b/src/main/java/lingtao/net/bean/FinanceExtract.java @@ -0,0 +1,115 @@ +package lingtao.net.bean; + +import java.util.Date; + +import lombok.Data; + +/** + * 提取尺寸 + * + * @author Administrator + * + */ +@Data +public class FinanceExtract { + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getOrderNumber() { + return orderNumber; + } + + public void setOrderNumber(String orderNumber) { + this.orderNumber = orderNumber; + } + + public String getLength() { + return length; + } + + public void setLength(String length) { + this.length = length; + } + + public String getWidth() { + return width; + } + + public void setWidth(String width) { + this.width = width; + } + + public String getHeight() { + return height; + } + + public void setHeight(String height) { + this.height = height; + } + + public String getCount() { + return count; + } + + public void setCount(String count) { + this.count = count; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getFilename() { + return filename; + } + + public void setFilename(String filename) { + this.filename = filename; + } + + public String getCreator() { + return creator; + } + + public void setCreator(String creator) { + this.creator = creator; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + private Integer id; + + private String orderNumber; + + private String length; + + private String width; + + private String height; + + private String count; + + private String remark; + + private String filename; + + private String creator; + + private Date createDate; +} diff --git a/src/main/java/lingtao/net/bean/Information.java b/src/main/java/lingtao/net/bean/Information.java new file mode 100644 index 0000000..5ce8fc3 --- /dev/null +++ b/src/main/java/lingtao/net/bean/Information.java @@ -0,0 +1,85 @@ +package lingtao.net.bean; + +import java.util.Date; + +import lombok.Data; + +/** + * 产品知识点; + * + * @author Administrator + * + */ +@Data +public class Information { + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public Date getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + } + + private Integer id; + + private String content; + + private String type; + + private String createBy; + + private Date createDate; + + private String updateBy; + + private Date updateDate; +} diff --git a/src/main/java/lingtao/net/bean/LoginIp.java b/src/main/java/lingtao/net/bean/LoginIp.java new file mode 100644 index 0000000..06141cb --- /dev/null +++ b/src/main/java/lingtao/net/bean/LoginIp.java @@ -0,0 +1,86 @@ +package lingtao.net.bean; + +import java.util.Date; + +import lombok.Data; + +/** + * 允许登录的IP + * + * @author Administrator + * + */ +@Data +public class LoginIp { + + private Integer id; + + private String agreeIp; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getAgreeIp() { + return agreeIp; + } + + public void setAgreeIp(String agreeIp) { + this.agreeIp = agreeIp; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public Date getCreateDate() { + return CreateDate; + } + + public void setCreateDate(Date createDate) { + CreateDate = createDate; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + private String remark; + + private String createBy; + + private Date CreateDate; + + private String updateBy; + + private Date updateTime; + +} diff --git a/src/main/java/lingtao/net/bean/LoginLog.java b/src/main/java/lingtao/net/bean/LoginLog.java new file mode 100644 index 0000000..bfa178c --- /dev/null +++ b/src/main/java/lingtao/net/bean/LoginLog.java @@ -0,0 +1,54 @@ +package lingtao.net.bean; + +import java.util.Date; +import lombok.Data; + +/** + * 登录日志 + * + * @author Administrator + * + */ +@Data +public class LoginLog { + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public Date getLoginTime() { + return loginTime; + } + + public void setLoginTime(Date loginTime) { + this.loginTime = loginTime; + } + + private Integer id; + + private String remark; + + private String status; + + private Date loginTime; +} diff --git a/src/main/java/lingtao/net/bean/Msg.java b/src/main/java/lingtao/net/bean/Msg.java new file mode 100644 index 0000000..2186167 --- /dev/null +++ b/src/main/java/lingtao/net/bean/Msg.java @@ -0,0 +1,102 @@ +package lingtao.net.bean; + +import java.util.HashMap; +import java.util.Map; + +import lombok.Data; + +/** + * 通用的返回的类 + */ +@Data +public class Msg { + + // 状态码 200--成功 100--失败 300禁用 + private int code; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public Map getData() { + return data; + } + + public void setData(Map data) { + this.data = data; + } + + // 提示信息 + private String msg; + + // 用户要返回给浏览器的数据 + private Map data = new HashMap(); + + public static Msg success() { + Msg result = new Msg(); + result.setCode(200); + result.setMsg("成功"); + return result; + } + + public static Msg success(String msg) { + Msg result = new Msg(); + result.setCode(200); + result.setMsg(msg); + return result; + } + + public static Msg fail() { + Msg result = new Msg(); + result.setCode(100); + result.setMsg("失败"); + return result; + } + + public static Msg fail(String msg) { + Msg result = new Msg(); + result.setCode(100); + result.setMsg(msg); + return result; + } + + public static Msg fail(Integer code, String msg) { + Msg result = new Msg(); + result.setCode(code); + result.setMsg(msg); + return result; + } + + public static Msg isDisable() { + Msg result = new Msg(); + result.setCode(300); + result.setMsg("失败"); + return result; + } + + public static Msg isDisable(String msg) { + Msg result = new Msg(); + result.setCode(300); + result.setMsg(msg); + return result; + } + + public Msg add(String key, Object value) { + this.getData().put(key, value); + return this; + + } + +} diff --git a/src/main/java/lingtao/net/bean/MyFile.java b/src/main/java/lingtao/net/bean/MyFile.java new file mode 100644 index 0000000..4b56d5d --- /dev/null +++ b/src/main/java/lingtao/net/bean/MyFile.java @@ -0,0 +1,85 @@ +package lingtao.net.bean; + +import java.util.Date; + +public class MyFile { + private Integer fileId; + + private String fileName; + + private String filePath; + + private String remark; + + private String createBy; + + private Date createDate; + + private String updateBy; + + private Date updateDate; + + public Integer getFileId() { + return fileId; + } + + public void setFileId(Integer fileId) { + this.fileId = fileId; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName == null ? null : fileName.trim(); + } + + public String getFilePath() { + return filePath; + } + + public void setFilePath(String filePath) { + this.filePath = filePath == null ? null : filePath.trim(); + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark == null ? null : remark.trim(); + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy == null ? null : createBy.trim(); + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy == null ? null : updateBy.trim(); + } + + public Date getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + } +} \ No newline at end of file diff --git a/src/main/java/lingtao/net/bean/MyFileExample.java b/src/main/java/lingtao/net/bean/MyFileExample.java new file mode 100644 index 0000000..62b43f2 --- /dev/null +++ b/src/main/java/lingtao/net/bean/MyFileExample.java @@ -0,0 +1,731 @@ +package lingtao.net.bean; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class MyFileExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public MyFileExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andFileIdIsNull() { + addCriterion("fileId is null"); + return (Criteria) this; + } + + public Criteria andFileIdIsNotNull() { + addCriterion("fileId is not null"); + return (Criteria) this; + } + + public Criteria andFileIdEqualTo(Integer value) { + addCriterion("fileId =", value, "fileId"); + return (Criteria) this; + } + + public Criteria andFileIdNotEqualTo(Integer value) { + addCriterion("fileId <>", value, "fileId"); + return (Criteria) this; + } + + public Criteria andFileIdGreaterThan(Integer value) { + addCriterion("fileId >", value, "fileId"); + return (Criteria) this; + } + + public Criteria andFileIdGreaterThanOrEqualTo(Integer value) { + addCriterion("fileId >=", value, "fileId"); + return (Criteria) this; + } + + public Criteria andFileIdLessThan(Integer value) { + addCriterion("fileId <", value, "fileId"); + return (Criteria) this; + } + + public Criteria andFileIdLessThanOrEqualTo(Integer value) { + addCriterion("fileId <=", value, "fileId"); + return (Criteria) this; + } + + public Criteria andFileIdIn(List values) { + addCriterion("fileId in", values, "fileId"); + return (Criteria) this; + } + + public Criteria andFileIdNotIn(List values) { + addCriterion("fileId not in", values, "fileId"); + return (Criteria) this; + } + + public Criteria andFileIdBetween(Integer value1, Integer value2) { + addCriterion("fileId between", value1, value2, "fileId"); + return (Criteria) this; + } + + public Criteria andFileIdNotBetween(Integer value1, Integer value2) { + addCriterion("fileId not between", value1, value2, "fileId"); + return (Criteria) this; + } + + public Criteria andFileNameIsNull() { + addCriterion("fileName is null"); + return (Criteria) this; + } + + public Criteria andFileNameIsNotNull() { + addCriterion("fileName is not null"); + return (Criteria) this; + } + + public Criteria andFileNameEqualTo(String value) { + addCriterion("fileName =", value, "fileName"); + return (Criteria) this; + } + + public Criteria andFileNameNotEqualTo(String value) { + addCriterion("fileName <>", value, "fileName"); + return (Criteria) this; + } + + public Criteria andFileNameGreaterThan(String value) { + addCriterion("fileName >", value, "fileName"); + return (Criteria) this; + } + + public Criteria andFileNameGreaterThanOrEqualTo(String value) { + addCriterion("fileName >=", value, "fileName"); + return (Criteria) this; + } + + public Criteria andFileNameLessThan(String value) { + addCriterion("fileName <", value, "fileName"); + return (Criteria) this; + } + + public Criteria andFileNameLessThanOrEqualTo(String value) { + addCriterion("fileName <=", value, "fileName"); + return (Criteria) this; + } + + public Criteria andFileNameLike(String value) { + addCriterion("fileName like", value, "fileName"); + return (Criteria) this; + } + + public Criteria andFileNameNotLike(String value) { + addCriterion("fileName not like", value, "fileName"); + return (Criteria) this; + } + + public Criteria andFileNameIn(List values) { + addCriterion("fileName in", values, "fileName"); + return (Criteria) this; + } + + public Criteria andFileNameNotIn(List values) { + addCriterion("fileName not in", values, "fileName"); + return (Criteria) this; + } + + public Criteria andFileNameBetween(String value1, String value2) { + addCriterion("fileName between", value1, value2, "fileName"); + return (Criteria) this; + } + + public Criteria andFileNameNotBetween(String value1, String value2) { + addCriterion("fileName not between", value1, value2, "fileName"); + return (Criteria) this; + } + + public Criteria andFilePathIsNull() { + addCriterion("filePath is null"); + return (Criteria) this; + } + + public Criteria andFilePathIsNotNull() { + addCriterion("filePath is not null"); + return (Criteria) this; + } + + public Criteria andFilePathEqualTo(String value) { + addCriterion("filePath =", value, "filePath"); + return (Criteria) this; + } + + public Criteria andFilePathNotEqualTo(String value) { + addCriterion("filePath <>", value, "filePath"); + return (Criteria) this; + } + + public Criteria andFilePathGreaterThan(String value) { + addCriterion("filePath >", value, "filePath"); + return (Criteria) this; + } + + public Criteria andFilePathGreaterThanOrEqualTo(String value) { + addCriterion("filePath >=", value, "filePath"); + return (Criteria) this; + } + + public Criteria andFilePathLessThan(String value) { + addCriterion("filePath <", value, "filePath"); + return (Criteria) this; + } + + public Criteria andFilePathLessThanOrEqualTo(String value) { + addCriterion("filePath <=", value, "filePath"); + return (Criteria) this; + } + + public Criteria andFilePathLike(String value) { + addCriterion("filePath like", value, "filePath"); + return (Criteria) this; + } + + public Criteria andFilePathNotLike(String value) { + addCriterion("filePath not like", value, "filePath"); + return (Criteria) this; + } + + public Criteria andFilePathIn(List values) { + addCriterion("filePath in", values, "filePath"); + return (Criteria) this; + } + + public Criteria andFilePathNotIn(List values) { + addCriterion("filePath not in", values, "filePath"); + return (Criteria) this; + } + + public Criteria andFilePathBetween(String value1, String value2) { + addCriterion("filePath between", value1, value2, "filePath"); + return (Criteria) this; + } + + public Criteria andFilePathNotBetween(String value1, String value2) { + addCriterion("filePath not between", value1, value2, "filePath"); + return (Criteria) this; + } + + public Criteria andRemarkIsNull() { + addCriterion("remark is null"); + return (Criteria) this; + } + + public Criteria andRemarkIsNotNull() { + addCriterion("remark is not null"); + return (Criteria) this; + } + + public Criteria andRemarkEqualTo(String value) { + addCriterion("remark =", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotEqualTo(String value) { + addCriterion("remark <>", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThan(String value) { + addCriterion("remark >", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThanOrEqualTo(String value) { + addCriterion("remark >=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThan(String value) { + addCriterion("remark <", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThanOrEqualTo(String value) { + addCriterion("remark <=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLike(String value) { + addCriterion("remark like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotLike(String value) { + addCriterion("remark not like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkIn(List values) { + addCriterion("remark in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotIn(List values) { + addCriterion("remark not in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkBetween(String value1, String value2) { + addCriterion("remark between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotBetween(String value1, String value2) { + addCriterion("remark not between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andCreateByIsNull() { + addCriterion("createBy is null"); + return (Criteria) this; + } + + public Criteria andCreateByIsNotNull() { + addCriterion("createBy is not null"); + return (Criteria) this; + } + + public Criteria andCreateByEqualTo(String value) { + addCriterion("createBy =", value, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByNotEqualTo(String value) { + addCriterion("createBy <>", value, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByGreaterThan(String value) { + addCriterion("createBy >", value, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByGreaterThanOrEqualTo(String value) { + addCriterion("createBy >=", value, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByLessThan(String value) { + addCriterion("createBy <", value, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByLessThanOrEqualTo(String value) { + addCriterion("createBy <=", value, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByLike(String value) { + addCriterion("createBy like", value, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByNotLike(String value) { + addCriterion("createBy not like", value, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByIn(List values) { + addCriterion("createBy in", values, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByNotIn(List values) { + addCriterion("createBy not in", values, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByBetween(String value1, String value2) { + addCriterion("createBy between", value1, value2, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateByNotBetween(String value1, String value2) { + addCriterion("createBy not between", value1, value2, "createBy"); + return (Criteria) this; + } + + public Criteria andCreateDateIsNull() { + addCriterion("createDate is null"); + return (Criteria) this; + } + + public Criteria andCreateDateIsNotNull() { + addCriterion("createDate is not null"); + return (Criteria) this; + } + + public Criteria andCreateDateEqualTo(Date value) { + addCriterion("createDate =", value, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateNotEqualTo(Date value) { + addCriterion("createDate <>", value, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateGreaterThan(Date value) { + addCriterion("createDate >", value, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateGreaterThanOrEqualTo(Date value) { + addCriterion("createDate >=", value, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateLessThan(Date value) { + addCriterion("createDate <", value, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateLessThanOrEqualTo(Date value) { + addCriterion("createDate <=", value, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateIn(List values) { + addCriterion("createDate in", values, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateNotIn(List values) { + addCriterion("createDate not in", values, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateBetween(Date value1, Date value2) { + addCriterion("createDate between", value1, value2, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateNotBetween(Date value1, Date value2) { + addCriterion("createDate not between", value1, value2, "createDate"); + return (Criteria) this; + } + + public Criteria andUpdateByIsNull() { + addCriterion("updateBy is null"); + return (Criteria) this; + } + + public Criteria andUpdateByIsNotNull() { + addCriterion("updateBy is not null"); + return (Criteria) this; + } + + public Criteria andUpdateByEqualTo(String value) { + addCriterion("updateBy =", value, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByNotEqualTo(String value) { + addCriterion("updateBy <>", value, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByGreaterThan(String value) { + addCriterion("updateBy >", value, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByGreaterThanOrEqualTo(String value) { + addCriterion("updateBy >=", value, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByLessThan(String value) { + addCriterion("updateBy <", value, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByLessThanOrEqualTo(String value) { + addCriterion("updateBy <=", value, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByLike(String value) { + addCriterion("updateBy like", value, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByNotLike(String value) { + addCriterion("updateBy not like", value, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByIn(List values) { + addCriterion("updateBy in", values, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByNotIn(List values) { + addCriterion("updateBy not in", values, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByBetween(String value1, String value2) { + addCriterion("updateBy between", value1, value2, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateByNotBetween(String value1, String value2) { + addCriterion("updateBy not between", value1, value2, "updateBy"); + return (Criteria) this; + } + + public Criteria andUpdateDateIsNull() { + addCriterion("updateDate is null"); + return (Criteria) this; + } + + public Criteria andUpdateDateIsNotNull() { + addCriterion("updateDate is not null"); + return (Criteria) this; + } + + public Criteria andUpdateDateEqualTo(Date value) { + addCriterion("updateDate =", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateNotEqualTo(Date value) { + addCriterion("updateDate <>", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateGreaterThan(Date value) { + addCriterion("updateDate >", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateGreaterThanOrEqualTo(Date value) { + addCriterion("updateDate >=", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateLessThan(Date value) { + addCriterion("updateDate <", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateLessThanOrEqualTo(Date value) { + addCriterion("updateDate <=", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateIn(List values) { + addCriterion("updateDate in", values, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateNotIn(List values) { + addCriterion("updateDate not in", values, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateBetween(Date value1, Date value2) { + addCriterion("updateDate between", value1, value2, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateNotBetween(Date value1, Date value2) { + addCriterion("updateDate not between", value1, value2, "updateDate"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/lingtao/net/bean/Product.java b/src/main/java/lingtao/net/bean/Product.java new file mode 100644 index 0000000..721802d --- /dev/null +++ b/src/main/java/lingtao/net/bean/Product.java @@ -0,0 +1,168 @@ +package lingtao.net.bean; + +import lombok.Data; + +import java.util.Date; + +@Data +public class Product { + // id + private Integer proId; + + // 长度 + private Double length; + + // 宽度 + private Double width; + + // 数量 + private Integer count; + + // 面积 + private Double area; + + // 价格 + private Double price; + + // 价格倍数 + private Double priceMultiple; + + // 折扣价 + private Double discountPrice; + + // 底价 + private Double floorPrice; + + // 重量 + private String weight; + + // 产品种类 + private String proTypeValue; + + // 产品种类说明 + private String proTypeLabel; + + // 产品品种类型 + private String kindValue; + + // 产品品种类型说明 + private String kindLabel; + + private String kind1Value; + + private String kind1Label; + + private String kind2Value; + + private String kind2Label; + + private String updater; + + private Date updateDate; + + /* ========================= */ + + // 尺寸 + private String size; + + // 工艺 + private String craft[]; + + // 不干胶种类标识--常规/少数量 + private String stickerKind; + // 透明不干胶印白墨 + private String yinbai; + // 款数 + private Integer number; + // 位数 + private Integer num; + // 手提袋/合版封套/房卡套种类标识 + private String k; + // 卡片、金属标种类标识 + private String kind; + // 吊旗300克铜版纸走优惠券价格--标识 + private String d; + // 吊旗300克铜版纸走优惠券价格--0-20位贵10块、20以上5块 + private Integer p; + // 卡片种类标识--常规/少数量 + private String couponKind; + // 自定义尺寸复选开关 + private boolean switchSize; + // 卡片- 特种纸名片 -珠光纸自定义数量 + private boolean switchCardCount; + // 卡片--存酒卡编码类型 + private String bianma; + // 手提袋自定义数量 + private boolean diyCount; + // 模切工艺 + private String craftQie; + // 不干胶模切工艺类型 + private String craftQieType; + // 覆膜/PVC名片印刷 + private String craftMo; + // 凹凸工艺 + private String aotu; + // 烫金工艺 + private String craftTang; + // 0.38PVC亮光异型卡片背胶工艺 + private String craftJiao; + // 海报-双喷布的工艺 + private String craftBu; + // 桌贴印刷工艺 + private String craftShua; + // 印刷烫金工艺长/宽 + private double lengthTang; + private double widthTang; + // 宣传单折页折数 + private Integer zheye; + // 宣传单压痕数 + private Integer yaheng; + // 便签本种类标识--联单/便签本 + private String notePaperKind; + // 画册P数 + private Integer pcount; + // 画册装订方式 + private String kind3Value; + // 角色标识--用于不同店铺不同价格 + private String role; + // UV转印贴显示信息(出货时间) + private String Msg; + // 报价给哪个客户旺旺号 + private String wangwang; + // 吊牌600克第二尺寸 + private String size1; + // 服装吊牌绳子 + private String craftSheng; + // 合板封套长/宽/舌头(高) + private double lengthSize; + private double widthSize; + private double heightSize; + private String craftTiao;//条幅工艺 + + // 印艺接口参数 + private Double xx;// 长度 + private Double yy;// 宽度 + private Integer shuliang;// 数量 + private Integer pinzhong;// 款数 + private String cailiao;// 种类 + private String fm;// 覆膜 + private String fmType;//卡片贴膜类型 0贴膜1配膜 + private Integer awards;//奖项 + private Integer stickNum;//几处贴膜 + + private String switchz3Size;//种子纸是否自定义尺寸 + private String z3type;//种子纸是否自定义尺寸 + + private String toothpick_size;//牙签规格 + + private String craftPai; + + //内部模切参数 + private Integer n_mq_num; + private String n_mq_size; + //位置数,颜色数 + private Integer po_number; + private Integer co_number; + private Integer shen_type; + private String shen_color; +} \ No newline at end of file diff --git a/src/main/java/lingtao/net/bean/ProductImg.java b/src/main/java/lingtao/net/bean/ProductImg.java new file mode 100644 index 0000000..f24e611 --- /dev/null +++ b/src/main/java/lingtao/net/bean/ProductImg.java @@ -0,0 +1,197 @@ +package lingtao.net.bean; + +import java.util.Date; + +import lombok.Data; + +@Data +public class ProductImg { + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getProTypeLabel() { + return proTypeLabel; + } + + public void setProTypeLabel(String proTypeLabel) { + this.proTypeLabel = proTypeLabel; + } + + public String getProTypeValue() { + return proTypeValue; + } + + public void setProTypeValue(String proTypeValue) { + this.proTypeValue = proTypeValue; + } + + public String getKindValue() { + return kindValue; + } + + public void setKindValue(String kindValue) { + this.kindValue = kindValue; + } + + public String getKindLabel() { + return kindLabel; + } + + public void setKindLabel(String kindLabel) { + this.kindLabel = kindLabel; + } + + public String getKind2Value() { + return kind2Value; + } + + public void setKind2Value(String kind2Value) { + this.kind2Value = kind2Value; + } + + public String getKind2Label() { + return kind2Label; + } + + public void setKind2Label(String kind2Label) { + this.kind2Label = kind2Label; + } + + public String getImgUrl() { + return imgUrl; + } + + public void setImgUrl(String imgUrl) { + this.imgUrl = imgUrl; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getFilename() { + return filename; + } + + public void setFilename(String filename) { + this.filename = filename; + } + + public Long getCreator() { + return creator; + } + + public void setCreator(Long creator) { + this.creator = creator; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public Long getUpdater() { + return updater; + } + + public void setUpdater(Long updater) { + this.updater = updater; + } + + public String getImgWidth() { + return imgWidth; + } + + public void setImgWidth(String imgWidth) { + this.imgWidth = imgWidth; + } + + public String getImgHeight() { + return imgHeight; + } + + public void setImgHeight(String imgHeight) { + this.imgHeight = imgHeight; + } + + /** + * + */ + private Long id; + + /** + * 产品名称 + */ + private String proTypeLabel; + + /** + * 名称编号 + */ + private String proTypeValue; + + /** + * 产品种类1 + */ + private String kindValue; + + /** + * 产品种类说明1 + */ + private String kindLabel; + + /** + * 产品种类2 + */ + private String kind2Value; + + /** + * 产品种类说明2 + */ + private String kind2Label; + + /** + * 图片地址 + */ + private String imgUrl; + + /** + * 产品说明 + */ + private String remark; + + /** + * 文件名字 + */ + private String filename; + + /** + * 创建者 + */ + private Long creator; + + /** + * 创建时间 + */ + private Date createDate; + + /** + * 更新者 + */ + private Long updater; + + private String imgWidth; + + private String imgHeight; +} \ No newline at end of file diff --git a/src/main/java/lingtao/net/bean/Question.java b/src/main/java/lingtao/net/bean/Question.java new file mode 100644 index 0000000..ee5a2d5 --- /dev/null +++ b/src/main/java/lingtao/net/bean/Question.java @@ -0,0 +1,146 @@ +package lingtao.net.bean; + +import java.util.Date; + +import lombok.Data; + +/** + * 产品知识测试表 + * + * @author Administrator + * + */ +@Data +public class Question { + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getQuestion() { + return question; + } + + public void setQuestion(String question) { + this.question = question; + } + + public String getAnswer() { + return answer; + } + + public void setAnswer(String answer) { + this.answer = answer; + } + + public String getAnswer1() { + return answer1; + } + + public void setAnswer1(String answer1) { + this.answer1 = answer1; + } + + public String getAnswer2() { + return answer2; + } + + public void setAnswer2(String answer2) { + this.answer2 = answer2; + } + + public String getAnswer3() { + return answer3; + } + + public void setAnswer3(String answer3) { + this.answer3 = answer3; + } + + public String getAnswer4() { + return answer4; + } + + public void setAnswer4(String answer4) { + this.answer4 = answer4; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public Integer getAnsCount() { + return ansCount; + } + + public void setAnsCount(Integer ansCount) { + this.ansCount = ansCount; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public Date getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + } + + private Integer id; + + private String question; + + private String answer; + + private String answer1; + + private String answer2; + + private String answer3; + + private String answer4; + + // 题目类型 0:单选 1:多选 + private String type; + + private Integer ansCount; + + private String createBy; + + private Date createDate; + + private String updateBy; + + private Date updateDate; +} diff --git a/src/main/java/lingtao/net/bean/QuoteData.java b/src/main/java/lingtao/net/bean/QuoteData.java new file mode 100644 index 0000000..5f643fa --- /dev/null +++ b/src/main/java/lingtao/net/bean/QuoteData.java @@ -0,0 +1,429 @@ +package lingtao.net.bean; + +import java.util.Date; + +import lombok.Data; + +/** + * 操作日志--供新增客服数据,只保留几天数据 + * + * @author Administrator + * + */ +@Data +public class QuoteData { + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getRemarkJudge() { + return remarkJudge; + } + + public void setRemarkJudge(String remarkJudge) { + this.remarkJudge = remarkJudge; + } + + public String getRole() { + return role; + } + + public void setRole(String role) { + this.role = role; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getRealname() { + return realname; + } + + public void setRealname(String realname) { + this.realname = realname; + } + + public String getShopname() { + return shopname; + } + + public void setShopname(String shopname) { + this.shopname = shopname; + } + + public Double getPrice() { + return price; + } + + public void setPrice(Double price) { + this.price = price; + } + + public Date getQuoteTime() { + return quoteTime; + } + + public void setQuoteTime(Date quoteTime) { + this.quoteTime = quoteTime; + } + + public String getWangwang() { + return wangwang; + } + + public void setWangwang(String wangwang) { + this.wangwang = wangwang; + } + + public String getIsBuy() { + return isBuy; + } + + public void setIsBuy(String isBuy) { + this.isBuy = isBuy; + } + + public Date getBuyDate() { + return buyDate; + } + + public void setBuyDate(Date buyDate) { + this.buyDate = buyDate; + } + + public String getIsBuyToDay() { + return isBuyToDay; + } + + public void setIsBuyToDay(String isBuyToDay) { + this.isBuyToDay = isBuyToDay; + } + + public Date getIsBuyToDayDate() { + return isBuyToDayDate; + } + + public void setIsBuyToDayDate(Date isBuyToDayDate) { + this.isBuyToDayDate = isBuyToDayDate; + } + + public String getCommentSelf() { + return commentSelf; + } + + public void setCommentSelf(String commentSelf) { + this.commentSelf = commentSelf; + } + + public Date getCommentSelfDate() { + return commentSelfDate; + } + + public void setCommentSelfDate(Date commentSelfDate) { + this.commentSelfDate = commentSelfDate; + } + + public String getCommentManager() { + return commentManager; + } + + public void setCommentManager(String commentManager) { + this.commentManager = commentManager; + } + + public Date getCommentManagerDate() { + return commentManagerDate; + } + + public void setCommentManagerDate(Date commentManagerDate) { + this.commentManagerDate = commentManagerDate; + } + + public String getIsSelect() { + return isSelect; + } + + public void setIsSelect(String isSelect) { + this.isSelect = isSelect; + } + + public Date getSelectDate() { + return selectDate; + } + + public void setSelectDate(Date selectDate) { + this.selectDate = selectDate; + } + + public String getIsFillIn() { + return isFillIn; + } + + public void setIsFillIn(String isFillIn) { + this.isFillIn = isFillIn; + } + + public Date getFillInDate() { + return fillInDate; + } + + public void setFillInDate(Date fillInDate) { + this.fillInDate = fillInDate; + } + + public String getProTypeLabel() { + return proTypeLabel; + } + + public void setProTypeLabel(String proTypeLabel) { + this.proTypeLabel = proTypeLabel; + } + + public Double getBuyPrice() { + return buyPrice; + } + + public void setBuyPrice(Double buyPrice) { + this.buyPrice = buyPrice; + } + + public String getOrderNumber() { + return orderNumber; + } + + public void setOrderNumber(String orderNumber) { + this.orderNumber = orderNumber; + } + + public String getRoleSearch() { + return roleSearch; + } + + public void setRoleSearch(String roleSearch) { + this.roleSearch = roleSearch; + } + + public String[] getRoleArr() { + return roleArr; + } + + public void setRoleArr(String[] roleArr) { + this.roleArr = roleArr; + } + + public String[] getRoleSearchArr() { + return roleSearchArr; + } + + public void setRoleSearchArr(String[] roleSearchArr) { + this.roleSearchArr = roleSearchArr; + } + + public String getQuoteTimeBegin() { + return quoteTimeBegin; + } + + public void setQuoteTimeBegin(String quoteTimeBegin) { + this.quoteTimeBegin = quoteTimeBegin; + } + + public String getQuoteTimeEnd() { + return quoteTimeEnd; + } + + public void setQuoteTimeEnd(String quoteTimeEnd) { + this.quoteTimeEnd = quoteTimeEnd; + } + + public Double getAllData() { + return allData; + } + + public void setAllData(Double allData) { + this.allData = allData; + } + + public Double getAllNotBuy() { + return allNotBuy; + } + + public void setAllNotBuy(Double allNotBuy) { + this.allNotBuy = allNotBuy; + } + + public Double getAllBuy() { + return allBuy; + } + + public void setAllBuy(Double allBuy) { + this.allBuy = allBuy; + } + + public Double getTodayBuy() { + return todayBuy; + } + + public void setTodayBuy(Double todayBuy) { + this.todayBuy = todayBuy; + } + + public Double getNotTodayBuy() { + return notTodayBuy; + } + + public void setNotTodayBuy(Double notTodayBuy) { + this.notTodayBuy = notTodayBuy; + } + + public Double getAllBuyPrice() { + return allBuyPrice; + } + + public void setAllBuyPrice(Double allBuyPrice) { + this.allBuyPrice = allBuyPrice; + } + + public Double getTodayBuyPrice() { + return todayBuyPrice; + } + + public void setTodayBuyPrice(Double todayBuyPrice) { + this.todayBuyPrice = todayBuyPrice; + } + + public Double getNotTodayBuyPrice() { + return notTodayBuyPrice; + } + + public void setNotTodayBuyPrice(Double notTodayBuyPrice) { + this.notTodayBuyPrice = notTodayBuyPrice; + } + + public Double getAllBuyPercentage() { + return allBuyPercentage; + } + + public void setAllBuyPercentage(Double allBuyPercentage) { + this.allBuyPercentage = allBuyPercentage; + } + + public String getIsSelfShop() { + return isSelfShop; + } + + public void setIsSelfShop(String isSelfShop) { + this.isSelfShop = isSelfShop; + } + + public String getByProTypeLabel() { + return byProTypeLabel; + } + + public void setByProTypeLabel(String byProTypeLabel) { + this.byProTypeLabel = byProTypeLabel; + } + + private Integer id; + + private String remark; + + private String remarkJudge; + + private String role; + + private String username; + + private String realname; + + private String shopname; + + private Double price; + + private Date quoteTime; + + private String wangwang; + + private String isBuy; + + private Date buyDate; + + private String isBuyToDay; + + private Date isBuyToDayDate; + + private String commentSelf; + + private Date commentSelfDate; + + private String commentManager; + + private Date commentManagerDate; + + private String isSelect; + + private Date selectDate; + + private String isFillIn; + + private Date fillInDate; + + private String proTypeLabel; + + private Double buyPrice; + + private String orderNumber; + + /*================*/ + + // 根据角色(部门)查找数据 + private String roleSearch; + + // 用户所拥有的部门数组 + private String[] roleArr; + + private String[] roleSearchArr; + + private String quoteTimeBegin; + + private String quoteTimeEnd; + + private Double allData; + + private Double allNotBuy; + + private Double allBuy; + + private Double todayBuy; + + private Double notTodayBuy; + + private Double allBuyPrice; + + private Double todayBuyPrice; + + private Double notTodayBuyPrice; + + private Double allBuyPercentage; + + private String isSelfShop; + + private String byProTypeLabel; +} diff --git a/src/main/java/lingtao/net/bean/QuoteLog.java b/src/main/java/lingtao/net/bean/QuoteLog.java new file mode 100644 index 0000000..f548581 --- /dev/null +++ b/src/main/java/lingtao/net/bean/QuoteLog.java @@ -0,0 +1,135 @@ +package lingtao.net.bean; + +import java.util.Date; + +import lombok.Data; + +/** + * 报价操作日志 + * + * @author Administrator + * + */ +@Data +public class QuoteLog { + + public Integer getQuoteId() { + return quoteId; + } + + public void setQuoteId(Integer quoteId) { + this.quoteId = quoteId; + } + + public Date getQuoteTime() { + return quoteTime; + } + + public void setQuoteTime(Date quoteTime) { + this.quoteTime = quoteTime; + } + + public String getQuoteIp() { + return quoteIp; + } + + public void setQuoteIp(String quoteIp) { + this.quoteIp = quoteIp; + } + + public String getOs() { + return os; + } + + public void setOs(String os) { + this.os = os; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getRealname() { + return realname; + } + + public void setRealname(String realname) { + this.realname = realname; + } + + public String getBrower() { + return brower; + } + + public void setBrower(String brower) { + this.brower = brower; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getShopname() { + return Shopname; + } + + public void setShopname(String shopname) { + Shopname = shopname; + } + + public Double getPrice() { + return price; + } + + public void setPrice(Double price) { + this.price = price; + } + + public String getQuoteTimeBegin() { + return quoteTimeBegin; + } + + public void setQuoteTimeBegin(String quoteTimeBegin) { + this.quoteTimeBegin = quoteTimeBegin; + } + + public String getQuoteTimeEnd() { + return quoteTimeEnd; + } + + public void setQuoteTimeEnd(String quoteTimeEnd) { + this.quoteTimeEnd = quoteTimeEnd; + } + + private Integer quoteId; + + private Date quoteTime; + + private String quoteIp; + + private String os; + + private String username; + + private String realname; + + private String brower; + + private String remark; + + private String Shopname; + + private Double price; + + private String quoteTimeBegin; + + private String quoteTimeEnd; +} \ No newline at end of file diff --git a/src/main/java/lingtao/net/bean/SysDictProduct.java b/src/main/java/lingtao/net/bean/SysDictProduct.java new file mode 100644 index 0000000..361211a --- /dev/null +++ b/src/main/java/lingtao/net/bean/SysDictProduct.java @@ -0,0 +1,161 @@ +package lingtao.net.bean; + +import lombok.Data; + +@Data +public class SysDictProduct { + + public Integer getProId() { + return proId; + } + + public void setProId(Integer proId) { + this.proId = proId; + } + + public String getKindValue() { + return kindValue; + } + + public void setKindValue(String kindValue) { + this.kindValue = kindValue; + } + + public String getKindLabel() { + return kindLabel; + } + + public void setKindLabel(String kindLabel) { + this.kindLabel = kindLabel; + } + + public String getKind2Value() { + return kind2Value; + } + + public void setKind2Value(String kind2Value) { + this.kind2Value = kind2Value; + } + + public String getKind2Label() { + return kind2Label; + } + + public void setKind2Label(String kind2Label) { + this.kind2Label = kind2Label; + } + + public Double getKindPrice() { + return kindPrice; + } + + public void setKindPrice(Double kindPrice) { + this.kindPrice = kindPrice; + } + + public Double getDiscountPrice() { + return discountPrice; + } + + public void setDiscountPrice(Double discountPrice) { + this.discountPrice = discountPrice; + } + + public Double getFloorPrice() { + return floorPrice; + } + + public void setFloorPrice(Double floorPrice) { + this.floorPrice = floorPrice; + } + + public Double getWeight() { + return weight; + } + + public void setWeight(Double weight) { + this.weight = weight; + } + + public String getProTypeValue() { + return proTypeValue; + } + + public void setProTypeValue(String proTypeValue) { + this.proTypeValue = proTypeValue; + } + + public String getProTypeLabel() { + return proTypeLabel; + } + + public void setProTypeLabel(String proTypeLabel) { + this.proTypeLabel = proTypeLabel; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + /** + * + */ + private Integer proId; + + /** + * 值 + */ + private String kindValue; + + /** + * 种类名称 + */ + private String kindLabel; + /** + * 值 + */ + private String kind2Value; + + /** + * 种类名称 + */ + private String kind2Label; + /** + * 报价单价 + */ + private Double kindPrice; + + /** + * 打折报价 + */ + private Double discountPrice; + + /** + * 跳楼价报价 + */ + private Double floorPrice; + + /** + * 重量 + */ + private Double weight; + + /** + * 名称 + */ + private String proTypeValue; + + /** + * 产品类型 + */ + private String proTypeLabel; + + /** + * 说明 + */ + private String remark; +} diff --git a/src/main/java/lingtao/net/bean/SysDictSearchPro.java b/src/main/java/lingtao/net/bean/SysDictSearchPro.java new file mode 100644 index 0000000..529461d --- /dev/null +++ b/src/main/java/lingtao/net/bean/SysDictSearchPro.java @@ -0,0 +1,106 @@ +package lingtao.net.bean; + +import java.util.Date; + +import lombok.Data; + +@Data +public class SysDictSearchPro { + public Integer getId() { + return id; + } + public void setId(Integer id) { + this.id = id; + } + public String getProTypeLabel() { + return proTypeLabel; + } + public void setProTypeLabel(String proTypeLabel) { + this.proTypeLabel = proTypeLabel; + } + public String getLikeProTypeLabel() { + return likeProTypeLabel; + } + public void setLikeProTypeLabel(String likeProTypeLabel) { + this.likeProTypeLabel = likeProTypeLabel; + } + public String getStatus() { + return status; + } + public void setStatus(String status) { + this.status = status; + } + public String getUrl() { + return url; + } + public void setUrl(String url) { + this.url = url; + } + public String getCreator() { + return creator; + } + public void setCreator(String creator) { + this.creator = creator; + } + public Date getCreateDate() { + return createDate; + } + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + public String getUpdater() { + return updater; + } + public void setUpdater(String updater) { + this.updater = updater; + } + public Date getUpdateDate() { + return updateDate; + } + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + } + /** + * + */ + private Integer id; + + /** + * 产品名称 + */ + private String proTypeLabel; + + /** + * 产品名称 + */ + private String likeProTypeLabel; + + /** + * 产品名称 + */ + private String status; + + /** + * 图片地址 + */ + private String url; + + /** + * 创建者 + */ + private String creator; + + /** + * 创建时间 + */ + private Date createDate; + + /** + * 更新者 + */ + private String updater; + /** + * 创建时间 + */ + private Date updateDate; +} \ No newline at end of file diff --git a/src/main/java/lingtao/net/bean/SysPermission.java b/src/main/java/lingtao/net/bean/SysPermission.java new file mode 100644 index 0000000..a9aaf8a --- /dev/null +++ b/src/main/java/lingtao/net/bean/SysPermission.java @@ -0,0 +1,145 @@ +package lingtao.net.bean; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +import lombok.Data; + +@Data +public class SysPermission implements Serializable { + private static final long serialVersionUID = 1L; + private Integer perId; + private String perName; + private String url; + private String type; + private String perCode; + private String perIcon; + private Integer parentId; + public Integer getPerId() { + return perId; + } + + public void setPerId(Integer perId) { + this.perId = perId; + } + + public String getPerName() { + return perName; + } + + public void setPerName(String perName) { + this.perName = perName; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getPerCode() { + return perCode; + } + + public void setPerCode(String perCode) { + this.perCode = perCode; + } + + public String getPerIcon() { + return perIcon; + } + + public void setPerIcon(String perIcon) { + this.perIcon = perIcon; + } + + public Integer getParentId() { + return parentId; + } + + public void setParentId(Integer parentId) { + this.parentId = parentId; + } + + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + + public String getThirdOrderName() { + return thirdOrderName; + } + + public void setThirdOrderName(String thirdOrderName) { + this.thirdOrderName = thirdOrderName; + } + + public Integer getThirdParentId() { + return thirdParentId; + } + + public void setThirdParentId(Integer thirdParentId) { + this.thirdParentId = thirdParentId; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public boolean isOpen() { + return open; + } + + public void setOpen(boolean open) { + this.open = open; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + public static long getSerialversionuid() { + return serialVersionUID; + } + + private String orderNo; + private String thirdOrderName; + private Integer thirdParentId; + private String createBy; + private Date createDate; + + private boolean open = true; + + private List children; // 子权限集合 + +} diff --git a/src/main/java/lingtao/net/bean/SysRole.java b/src/main/java/lingtao/net/bean/SysRole.java new file mode 100644 index 0000000..8d88618 --- /dev/null +++ b/src/main/java/lingtao/net/bean/SysRole.java @@ -0,0 +1,95 @@ +package lingtao.net.bean; + +import java.util.Date; + +import lombok.Data; + +/** + * 角色 + * + * @author Administrator + * + */ +@Data +public class SysRole { + private Integer roleId; + + private String roleName; + + private String isRegist; + + private String remark; + + public Integer getRoleId() { + return roleId; + } + + public void setRoleId(Integer roleId) { + this.roleId = roleId; + } + + public String getRoleName() { + return roleName; + } + + public void setRoleName(String roleName) { + this.roleName = roleName; + } + + public String getIsRegist() { + return isRegist; + } + + public void setIsRegist(String isRegist) { + this.isRegist = isRegist; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public Date getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + } + + private String createBy; + + private Date createDate; + + private String updateBy; + + private Date updateDate; + +} \ No newline at end of file diff --git a/src/main/java/lingtao/net/bean/SysUser.java b/src/main/java/lingtao/net/bean/SysUser.java new file mode 100644 index 0000000..1d55371 --- /dev/null +++ b/src/main/java/lingtao/net/bean/SysUser.java @@ -0,0 +1,208 @@ +package lingtao.net.bean; + +import java.util.Date; + +import lombok.Data; + +/** + * 用户 + * + * @author Administrator + * + */ +@Data +public class SysUser { + private Integer userId; + + public Integer getUserId() { + return userId; + } + + public void setUserId(Integer userId) { + this.userId = userId; + } + + public String getRealname() { + return realname; + } + + public void setRealname(String realname) { + this.realname = realname; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getUserStatus() { + return userStatus; + } + + public void setUserStatus(String userStatus) { + this.userStatus = userStatus; + } + + public String getRole() { + return role; + } + + public void setRole(String role) { + this.role = role; + } + + public String getSysStatus() { + return sysStatus; + } + + public void setSysStatus(String sysStatus) { + this.sysStatus = sysStatus; + } + + public String getReadLogStatus() { + return readLogStatus; + } + + public void setReadLogStatus(String readLogStatus) { + this.readLogStatus = readLogStatus; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public Date getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + } + + public String getBirthDay() { + return birthDay; + } + + public void setBirthDay(String birthDay) { + this.birthDay = birthDay; + } + + public String getBirthType() { + return birthType; + } + + public void setBirthType(String birthType) { + this.birthType = birthType; + } + + public Integer getIsBirthDay() { + return isBirthDay; + } + + public void setIsBirthDay(Integer isBirthDay) { + this.isBirthDay = isBirthDay; + } + + public String getEntryDate() { + return entryDate; + } + + public void setEntryDate(String entryDate) { + this.entryDate = entryDate; + } + + public String getNeedIp() { + return needIp; + } + + public void setNeedIp(String needIp) { + this.needIp = needIp; + } + + public String getRoleSearch() { + return roleSearch; + } + + public void setRoleSearch(String roleSearch) { + this.roleSearch = roleSearch; + } + + public String[] getRoleArr() { + return roleArr; + } + + public void setRoleArr(String[] roleArr) { + this.roleArr = roleArr; + } + + private String realname; + + private String username; + + private String password; + + private String userStatus; + + private String role; + + private String sysStatus; + + private String readLogStatus; + + private String createBy; + + private Date createDate; + + private String updateBy; + + private Date updateDate; + + private String birthDay; + + private String birthType; + + private Integer isBirthDay; + + private String entryDate; + + // 是否需要判断IP 0:否 1:是 + private String needIp; + + // 根据角色查找用户 + private String roleSearch; + + // 用户所拥有角色数组 + private String[] roleArr; + +} \ No newline at end of file diff --git a/src/main/java/lingtao/net/bean/UpdateLog.java b/src/main/java/lingtao/net/bean/UpdateLog.java new file mode 100644 index 0000000..7387633 --- /dev/null +++ b/src/main/java/lingtao/net/bean/UpdateLog.java @@ -0,0 +1,97 @@ +package lingtao.net.bean; + +import java.util.Date; + +import lombok.Data; + +/** + * 更新日志 + * + * @author Administrator + * + */ +@Data +public class UpdateLog { + + private Integer id; + + private String content; + + private Date addTime; + + private String createBy; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public Date getAddTime() { + return addTime; + } + + public void setAddTime(Date addTime) { + this.addTime = addTime; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public String getAddTimeStr() { + return addTimeStr; + } + + public void setAddTimeStr(String addTimeStr) { + this.addTimeStr = addTimeStr; + } + + public String getAdd_time_begin() { + return add_time_begin; + } + + public void setAdd_time_begin(String add_time_begin) { + this.add_time_begin = add_time_begin; + } + + public String getAdd_time_end() { + return add_time_end; + } + + public void setAdd_time_end(String add_time_end) { + this.add_time_end = add_time_end; + } + + private Date createDate; + + /* ================= */ + + private String addTimeStr; + + private String add_time_begin; + + private String add_time_end; +} diff --git a/src/main/java/lingtao/net/config/ResourceServerConfig.java b/src/main/java/lingtao/net/config/ResourceServerConfig.java new file mode 100644 index 0000000..8edea70 --- /dev/null +++ b/src/main/java/lingtao/net/config/ResourceServerConfig.java @@ -0,0 +1,21 @@ +package lingtao.net.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + + +@Configuration +public abstract class ResourceServerConfig implements WebMvcConfigurer { + + private String localPrefix = "abc"; + + private String localPath = "F:\\java_project\\bj\\upload"; + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/" + localPrefix + "/**") + .addResourceLocations("file:" + localPath); + } + +} diff --git a/src/main/java/lingtao/net/controller/AcountController.java b/src/main/java/lingtao/net/controller/AcountController.java new file mode 100644 index 0000000..774ed99 --- /dev/null +++ b/src/main/java/lingtao/net/controller/AcountController.java @@ -0,0 +1,197 @@ +package lingtao.net.controller; + +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysRole; +import lingtao.net.bean.SysUser; +import lingtao.net.dao.SysUserMapper; +import lingtao.net.service.SysRoleService; +import lingtao.net.service.SysUserService; +import lingtao.net.util.MD5Util; +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.*; +import org.apache.shiro.subject.Subject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 用户登录注册、退出 + * + * @author Administrator + */ +@Controller +@RequestMapping("/SysUser") +public class AcountController { + + @Autowired + private SysUserService sysUserService; + + @Autowired + private SysRoleService sysRoleService; + + @Autowired + private SysUserMapper userMapper; + + /** + * 获取客户端IP + * + * @param request 请求对象 + * @return IP地址 + */ + public static String getIpAddr(HttpServletRequest request) { + if (request == null) { + return "unknown"; + } + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Forwarded-For"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Real-IP"); + } + + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + + return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : getMultistageReverseProxyIp(ip); + } + + /** + * 从多级反向代理中获得第一个非unknown IP地址 + * + * @param ip 获得的IP地址 + * @return 第一个非unknown IP地址 + */ + public static String getMultistageReverseProxyIp(String ip) { + // 多级反向代理检测 + if (ip != null && ip.indexOf(",") > 0) { + final String[] ips = ip.trim().split(","); + for (String subIp : ips) { + if (false == isUnknown(subIp)) { + ip = subIp; + break; + } + } + } + return StringUtils.substring(ip, 0, 255); + } + + /** + * 检测给定字符串是否为未知,多用于检测HTTP请求相关 + * + * @param checkString 被检测的字符串 + * @return 是否未知 + */ + public static boolean isUnknown(String checkString) { + return StringUtils.isBlank(checkString) || "unknown".equalsIgnoreCase(checkString); + } + + /** + * 登陆 + */ + @RequestMapping(value = "/login", method = RequestMethod.POST) + public ModelAndView login(@RequestParam("username") String username, @RequestParam("password") String password, + HttpServletRequest request, HttpServletResponse response) throws Exception { + password = new MD5Util().md5(password, "lingtao"); + // 使用 shiro 登录验证 + // 1 认证的核心组件:获取 Subject 对象 + Subject subject = SecurityUtils.getSubject(); + // 2 将登陆表单封装成 token 对象 + UsernamePasswordToken token = new UsernamePasswordToken(username, password); + token.setHost(getIpAddr(request)); + try { + // 3 让 shiro 框架进行登录验证:传递token给shiro的reaml + subject.login(token); + // return "redirect:/views/main.jsp"; + // 此处并没有跳转页面-前端根据状态码跳转对应页面 + return new ModelAndView("redirect:/views/main.jsp"); + } catch (UnknownAccountException uae) { + // 状态码 200--成功 100--失败 300禁用 + response.getWriter().print("100"); + throw new UnknownAccountException("账户或密码有误!"); + } catch (IncorrectCredentialsException ice) { + response.getWriter().print("100"); + throw new IncorrectCredentialsException("账户或密码有误!"); + } catch (LockedAccountException lae) { + response.getWriter().print("300"); + throw new LockedAccountException("用户未激活!!!"); + } catch (AuthenticationException re) { + response.getWriter().print("404"); + throw new AuthenticationException("未知IP!!!"); + } + /* catch (RuntimeException re) { response.getWriter().print("400"); throw new + * RuntimeException("用户已登录!!!"); } + */ + + } + + /** + * 注册 + */ + @RequestMapping("/register") + @ResponseBody + public Msg register(SysUser user) { + SysUser username = userMapper.getUserByUsername(user.getUsername()); + if (username != null) { + return Msg.fail("用户名已存在!"); + } + return sysUserService.register(user); + } + + /** + * 注销 + */ + @RequestMapping("/logout") + public String logout() { + Subject subject = SecurityUtils.getSubject(); + subject.logout(); + return "redirect:/login.jsp"; + } + + /** + * 获取可以被注册的角色名称 + * + * @return + */ + @RequestMapping("/getRoleName") + @ResponseBody + public Map roleNameList(@RequestParam(value = "isRegist") String isRegist) { + Map map = new HashMap(); + List allRoleNames = sysRoleService.getAllRoleName(isRegist); + + for (SysRole sysRole : allRoleNames) { + map.put(sysRole.getRoleId(), sysRole.getRoleName()); + } + + return map; + } + + @ResponseBody + @RequestMapping("/getIp") + public Msg getIp(HttpServletRequest request) { + String ip = getIpAddr(request); +// String ip = "120.38.127.157"; + if (ip != null) { + return Msg.success().add("ip", ip); + } + return Msg.fail(); + } +} diff --git a/src/main/java/lingtao/net/controller/ArticleController.java b/src/main/java/lingtao/net/controller/ArticleController.java new file mode 100644 index 0000000..f429fee --- /dev/null +++ b/src/main/java/lingtao/net/controller/ArticleController.java @@ -0,0 +1,137 @@ +package lingtao.net.controller; + +import java.io.File; +import java.util.Calendar; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.Article; +import lingtao.net.bean.Msg; +import lingtao.net.service.ArticleService; + +@Controller +public class ArticleController { + + @Autowired + private ArticleService articleService; + + /** + * 获取所有的文章 + * + * @param article + * @return + */ + @RequestMapping("/getArticle") + @ResponseBody + public Msg articleList(Article article) { + PageHelper.startPage(1, 10); + List
articles = articleService.getArticle(article); + PageInfo
pageInfo = new PageInfo
(articles); + return Msg.success().add("articles", pageInfo); + } + + /** + * 新增文章 + */ + @RequestMapping("/addArticle") + @ResponseBody + public Msg addArticle(Article article) { + return articleService.addArticle(article); + } + + /** + * 文章中的图片 + */ + @RequestMapping(value = "/uploadconimage", method = RequestMethod.POST) + @ResponseBody + public Map uploadconimage(HttpServletRequest request, @RequestParam MultipartFile file) { + Map mv = new HashMap(); + Map mvv = new HashMap(); + try { + String rootPath = request.getSession().getServletContext().getRealPath("/image/"); + String contextPath = request.getContextPath(); + System.err.println(contextPath); + System.out.println(rootPath); + Calendar date = Calendar.getInstance(); // Calendar.getInstance()是获取一个Calendar对象并可以进行时间的计算,时区的指定 + String originalFile = file.getOriginalFilename(); // 获得文件最初的路径 + String uuid = UUID.randomUUID().toString(); // UUID转化为String对象 + String newfilename = date.get(Calendar.YEAR) + "" + (date.get(Calendar.MONTH) + 1) + "" + + date.get(Calendar.DATE) + uuid.replace("-", "") + originalFile; + // 得到完整路径名 + File newFile = new File(rootPath + newfilename); + /* 文件不存在就创建 */ + if (!newFile.getParentFile().exists()) { + newFile.getParentFile().mkdirs(); + } + String filename = originalFile.substring(0, originalFile.indexOf(".")); + System.out.println(originalFile); + System.out.println(filename); + file.transferTo(newFile); + System.out.println("newFile : " + newFile); + String urlpat = contextPath + "/image/" + newfilename; + mvv.put("src", urlpat); + mvv.put("title", newfilename); + mv.put("code", 0); + mv.put("msg", "上传成功"); + mv.put("data", mvv); + return mv; + } catch (Exception e) { + e.printStackTrace(); + mv.put("success", 1); + return mv; + } + } + + // 用户跳转页面 + @RequestMapping("/toUpdateArticle") + public String index(HttpServletRequest request, HttpServletResponse response) throws Exception { + return "updateArticle"; + //response.sendRedirect(request.getContextPath() + "/views/updateArticle.jsp"); + } + + /** + * 修改文章 + * + */ + @RequestMapping("/updateArticle") + @ResponseBody + public Msg updateArticle(Article article) { + return articleService.updateArticleById(article); + } + + /** + * 文章详情 + * + */ + @RequestMapping("/articleInfo") + @ResponseBody + public Msg articleInfo(@RequestParam("id") Integer id) { + Article article = articleService.articleInfo(id); + return Msg.success().add("article", article); + } + + /** + * 删除文章 + */ + @RequestMapping("/deleteArticle") + @ResponseBody + public Msg delArticle(@RequestParam("id") Integer id) { + return articleService.delArticleById(id); + } +} diff --git a/src/main/java/lingtao/net/controller/BugController.java b/src/main/java/lingtao/net/controller/BugController.java new file mode 100644 index 0000000..d057ef3 --- /dev/null +++ b/src/main/java/lingtao/net/controller/BugController.java @@ -0,0 +1,105 @@ +package lingtao.net.controller; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.IOException; +import java.util.Date; +import java.util.List; + +import javax.management.RuntimeErrorException; +import javax.servlet.http.HttpSession; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; +import org.apache.http.client.utils.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.Bug; +import lingtao.net.bean.Msg; +import lingtao.net.service.BugService; + +@RestController +public class BugController { + + @Autowired + private BugService bugService; + + private String localPrefix = "abc\\bug"; + + private String localPath = "C:\\lingtao\\quote_price\\upload"; + + //private String localDomain = "http://47.114.150.226:8080/erp"; + + /** + * bug列表 + * + * @param page + * @param limit + * @return + */ + @RequestMapping("/getBugs") + public PageInfo getBugs(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, Bug bug) { + PageHelper.startPage(page, limit); + List bugList = bugService.getBugs(bug); + PageInfo pageInfo = new PageInfo(bugList); + return pageInfo; + } + + /** + * 添加角色 + */ + @RequestMapping("/addBug") + public Msg addBug(Bug bug, HttpSession session) { + return bugService.addBug(bug, session); + } + + // 图片上传及新增 + @RequestMapping("/bugUpload") + public Msg upload(@RequestParam("file") MultipartFile file) throws Exception { + if (file.isEmpty()) { + return Msg.fail("文件不能为空"); + } + // 获取文件名后缀 + String extension = FilenameUtils.getExtension(file.getOriginalFilename()); + // 获取path + String path = getPath(extension, FilenameUtils.getBaseName(file.getOriginalFilename())); + // 保存文件信息 + File newFile = new File(localPath + File.separator + path); + try { + FileUtils.copyInputStreamToFile(new ByteArrayInputStream(file.getBytes()), newFile); + } catch (IOException e) { + throw new RuntimeErrorException(null, ""); + } + return Msg.success(); + } + + /** + * + * @param prefixSelf 根据上传的接口存入自己的文件夹 + * @param suffix 文件的后缀 + * @param fileName 文件名 + * @return + */ + public String getPath(String suffix, String fileName) { + + // 生成uuid + // String uuid = UUID.randomUUID().toString().replaceAll("-", ""); + String path = null; + + // 文件路径 + path = DateUtils.formatDate(new Date(), "yyyyMMdd") + File.separator + fileName; + + path = localPrefix + File.separator + File.separator + path; + + return path + "." + suffix; + } + +} diff --git a/src/main/java/lingtao/net/controller/CustomerAwardController.java b/src/main/java/lingtao/net/controller/CustomerAwardController.java new file mode 100644 index 0000000..a7d68ec --- /dev/null +++ b/src/main/java/lingtao/net/controller/CustomerAwardController.java @@ -0,0 +1,109 @@ +package lingtao.net.controller; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.CustomerAward; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.service.CustomerAwardService; +import lingtao.net.util.PublicMethods; + +@Controller +public class CustomerAwardController { + + @Autowired + private CustomerAwardService customerAwardService; + + // 用户跳转页面 + @RequestMapping("/customerAward/index") + public void index(HttpServletRequest request, HttpServletResponse response) throws Exception { + response.sendRedirect(request.getContextPath() + "/views/system/customerAward/customerAward.jsp"); + } + + /** + * 根据条件查询数据 + * + */ + @ResponseBody + @RequestMapping("/getCustomerAward") + public PageInfo getCustomerAward(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, CustomerAward customerAward) { + PageHelper.startPage(page, limit); + List customerAwardList = customerAwardService.getCustomerAward(customerAward); + PageInfo pageInfo = new PageInfo(customerAwardList); + return pageInfo; + } + + /** + * 批量删除 + * + * @param ids + */ + @ResponseBody + @RequestMapping("/deleteDatas") + public Msg deleteBatch(@RequestParam(value = "ids") String ids, @RequestParam(value = "creators") String creators) { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + String[] arrCreators = creators.split(","); + boolean selfFlag = true; + for (String creator : arrCreators) { + if (!user.getRealname().equals(creator)) { + selfFlag = false; + break; + } + } + // 超管身份 + boolean flag = new PublicMethods().isSuper(); + // 不是超管 + if (!flag) { + // 判断是不是自己上传的数据 + if (!selfFlag) { + return Msg.fail("禁止删除其他人数据!"); + } + } + String[] arrIds = ids.split(","); + // String数组转为Integer数组 + int[] ints = new int[arrIds.length]; + for (int i = 0; i < arrIds.length; i++) { + ints[i] = Integer.parseInt(arrIds[i]); + } + return customerAwardService.deleteBatch(ints); + } + + /** + * + * 文件上传 + */ + @ResponseBody + @RequestMapping(value = "/ajaxUpload_customerAward") + public Msg uploadExcel(@RequestParam("file") MultipartFile file) throws Exception { + synchronized (this) { + return customerAwardService.ajaxUploadExcel(file); + } + } + + /** + * 获取上传过的店铺 + * + * @return + */ + @ResponseBody + @RequestMapping("/getArardShopname") + public List getArardShopname() { + List FilenameList = customerAwardService.getArardShopname(); + return FilenameList; + } +} diff --git a/src/main/java/lingtao/net/controller/CustomerDataControlle.java b/src/main/java/lingtao/net/controller/CustomerDataControlle.java new file mode 100644 index 0000000..969b483 --- /dev/null +++ b/src/main/java/lingtao/net/controller/CustomerDataControlle.java @@ -0,0 +1,129 @@ +package lingtao.net.controller; + +import java.util.List; + +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.CustomerData; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.service.CustomerDataService; + +@RestController +public class CustomerDataControlle { + + @Autowired + private CustomerDataService customerDataService; + + @RequestMapping("/getCustomerDatas") + public Msg getCustomerDatas(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, CustomerData customerData) { + PageHelper.startPage(page, limit); + List customerDatalist = customerDataService.getCustomerDatas(customerData); + PageInfo pageInfo = new PageInfo(customerDatalist); + return Msg.success().add("list", pageInfo); + } + + /** + * 添加数据 + * + * @throws Exception + */ + @RequestMapping("/addCustomerData") + public Msg addCustomerData(CustomerData customerData) throws Exception { + // 把字符串转为日期格式 + customerDataService.addCustomerData(customerData); + return Msg.success(); + } + + /** + * 修改数据 + */ + @RequestMapping("/updateCustomerData") + public Msg updateCustomerData(CustomerData customerData) { + customerDataService.updateCustomerDataById(customerData); + return Msg.success(); + } + + /** + * 删除数据 + */ + @RequestMapping("/deleteCustomerData") + public Msg deleteCustomerData(@RequestParam("id") Integer id) { + customerDataService.deleteCustomerDataById(id); + return Msg.success(); + } + + /** + * 店长修改说明数据 + * + * @param customerData + */ + @RequestMapping("/updateRemarkById") + public Msg updateRemarkById(@RequestParam(value = "id") int id, @RequestParam(value = "field") String field, + @RequestParam(value = "value") String value) { + // 超管、组长身份才允许修改comment + boolean flag = isSuperOrManager(); + if (!flag) { + return Msg.fail(); + } + customerDataService.updateRemarkById(id, field, value); + return Msg.success(); + } + + /** + * 修改完成状态 + * + * @param id + * @return + */ + @RequestMapping("/changeIsBuy") + public Msg changeIsBuy(@RequestParam(value = "id") Integer id, @RequestParam(value = "username") String username) { + // 超管、组长身份才允许修改【成交状态】 + boolean flag = isSuperOrManager(); + if (!flag) { + return Msg.fail(); + } + return customerDataService.changeIsBuy(id); + // 只有自己创建的数据才能更改【完成状态】 + /* + * if (username.equals(user.getUsername())) { } + */ + // return Msg.fail(); + } + + // 是否有超管或者组长身份 + public boolean isSuperOrManager() { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + String role = user.getRole(); + boolean flag = false; + if (role.contains(",")) { + String[] split = role.split(","); + for (int i = 0; i < split.length; i++) { + if ("1011".equals(split[i]) || "1".equals(split[i])) { + flag = true; + break; + } + } + } else { + if ("1011".equals(role) || "1".equals(role)) { + flag = true; + } + } + return flag; + } + + // 获取摘要 + @RequestMapping("/getProductExplain") + public List getProductExplain(@RequestParam("productExplain") String productExplain) { + List name = customerDataService.getProductExplain(productExplain); + return name; + } +} diff --git a/src/main/java/lingtao/net/controller/CustomerTrainController.java b/src/main/java/lingtao/net/controller/CustomerTrainController.java new file mode 100644 index 0000000..3d5285b --- /dev/null +++ b/src/main/java/lingtao/net/controller/CustomerTrainController.java @@ -0,0 +1,243 @@ +package lingtao.net.controller; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.IOException; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.management.RuntimeErrorException; +import javax.servlet.http.HttpSession; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; +import org.apache.http.client.utils.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.CustomerTrainContent; +import lingtao.net.bean.CustomerTrainKindLabel; +import lingtao.net.bean.CustomerTrainProType; +import lingtao.net.bean.Msg; +import lingtao.net.service.CustomerTrainService; + +@RestController +public class CustomerTrainController { + + @Autowired + private CustomerTrainService customerTrainService; + + private String localPrefix = "abc\\train"; + + private String localPath = "C:\\lingtao\\upload"; + + private String localDomain = "http://47.114.150.226:80/erp"; + + // 图片上传及新增 + @RequestMapping("/imgUpload") + public Object upload(@RequestParam("file") MultipartFile file) throws Exception { + if (file.isEmpty()) { + return Msg.fail("文件不能为空"); + } + // 获取文件名后缀 + String extension = FilenameUtils.getExtension(file.getOriginalFilename()); + // 获取path + String path = getPath(extension, FilenameUtils.getBaseName(file.getOriginalFilename())); + // 保存文件信息 + File newFile = new File(localPath + File.separator + path); + try { + FileUtils.copyInputStreamToFile(new ByteArrayInputStream(file.getBytes()), newFile); + } catch (IOException e) { + throw new RuntimeErrorException(null, ""); + } + String serverPath = localDomain + "/" + path; + Map map = new HashMap(); + Map map2 = new HashMap(); + map.put("code", 0); // 0表示上传成功 + map.put("msg", "上传成功"); // 提示消息 + // src返回图片上传成功后的下载路径,这里直接给绝对路径 + map2.put("src", serverPath); + map.put("data", map2); + return map; + } + + /** + * + * @param prefixSelf 根据上传的接口存入自己的文件夹 + * @param suffix 文件的后缀 + * @param fileName 文件名 + * @return + */ + public String getPath(String suffix, String fileName) { + + // 生成uuid + // String uuid = UUID.randomUUID().toString().replaceAll("-", ""); + String path = null; + + // 文件路径 + path = DateUtils.formatDate(new Date(), "yyyyMMdd") + File.separator + fileName; + + path = localPrefix + File.separator + File.separator + path; + + return path + "." + suffix; + } + + /* =============产品知识内容================ */ + /** + * 查询 + * + * @param page + * @param limit + * @param customerTrainContent + * @return + */ + @RequestMapping("/getCustomerTrainContents") + public PageInfo getCustomerTrainContents( + @RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, + CustomerTrainContent customerTrainContent) { + PageHelper.startPage(page, limit); + List customerTrainContentList = customerTrainService + .getCustomerTrainContents(customerTrainContent); + PageInfo pageInfo = new PageInfo(customerTrainContentList); + return pageInfo; + } + + /** + * 添加 + * + */ + @RequestMapping("/addCustomerTrainContent") + public Msg addCustomerTrainContent(CustomerTrainContent customerTrainContent, HttpSession session) { + + return customerTrainService.addCustomerTrainContent(customerTrainContent, session); + } + + /** + * 修改 + */ + @RequestMapping("/updateCustomerTrainContent") + public Msg updateCustomerTrainContent(CustomerTrainContent customerTrainContent, HttpSession session) { + return customerTrainService.updateCustomerTrainContentById(customerTrainContent, session); + } + + /** + * 修改 + */ + @RequestMapping("/updateCustomerTrainContentSort") + public Msg updateById(@RequestParam(value = "id") int id, @RequestParam(value = "value") String value) { + return customerTrainService.updateCustomerTrainContentSort(id, value); + } + + /** + * 删除 + */ + @RequestMapping("/deleteCustomerTrainContent") + public Msg deleteCustomerTrainContent(@RequestParam("id") Integer id) { + return customerTrainService.deleteCustomerTrainContentById(id); + } + + /* =============产品种类================ */ + /** + * 查询 + * + * @param page + * @param limit + * @param customerTrainProType + * @return + */ + @RequestMapping("/getCustomerTrainProTypes") + public PageInfo getCustomerTrainProTypes( + @RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, + CustomerTrainProType customerTrainProType) { + PageHelper.startPage(page, limit); + List customerTrainProTypeList = customerTrainService + .getCustomerTrainProTypes(customerTrainProType); + PageInfo pageInfo = new PageInfo(customerTrainProTypeList); + return pageInfo; + } + + /** + * 添加 + * + */ + @RequestMapping("/addCustomerTrainProType") + public Msg addCustomerTrainProType(CustomerTrainProType customerTrainProType, HttpSession session) { + + return customerTrainService.addCustomerTrainProType(customerTrainProType, session); + } + + /** + * 修改 + */ + @RequestMapping("/updateCustomerTrainProType") + public Msg updateCustomerTrainProType(CustomerTrainProType customerTrainProType, HttpSession session) { + return customerTrainService.updateCustomerTrainProTypeById(customerTrainProType, session); + } + + /** + * 删除 + */ + @RequestMapping("/deleteCustomerTrainProType") + public Msg deleteCustomerTrainProType(@RequestParam("id") Integer id) { + return customerTrainService.deleteCustomerTrainProTypeById(id); + } + + /* =============产品类型================ */ + /** + * 查询 + * + * @param page + * @param limit + * @param customerTrainKindLabel + * @return + */ + @RequestMapping("/getCustomerTrainKindLabelsByProType") + public PageInfo getCustomerTrainKindLabelsByProType( + @RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, + @RequestParam(value = "needPage") String needPage, CustomerTrainKindLabel customerTrainKindLabel) { + // 0:不要分页 1:要分页 + if ("1".equals(needPage)) + PageHelper.startPage(page, limit); + List customerTrainKindLabelList = customerTrainService + .getCustomerTrainKindLabelsByProType(customerTrainKindLabel); + PageInfo pageInfo = new PageInfo(customerTrainKindLabelList); + return pageInfo; + } + + /** + * 添加 + * + */ + @RequestMapping("/addCustomerTrainKindLabel") + public Msg addCustomerTrainKindLabel(CustomerTrainKindLabel customerTrainKindLabel, HttpSession session) { + + return customerTrainService.addCustomerTrainKindLabel(customerTrainKindLabel, session); + } + + /** + * 修改 + */ + @RequestMapping("/updateCustomerTrainKindLabel") + public Msg updateCustomerTrainKindLabel(CustomerTrainKindLabel customerTrainKindLabel, HttpSession session) { + return customerTrainService.updateCustomerTrainKindLabelById(customerTrainKindLabel, session); + } + + /** + * 删除 + */ + @RequestMapping("/deleteCustomerTrainKindLabel") + public Msg deleteCustomerTrainKindLabel(@RequestParam("id") Integer id) { + return customerTrainService.deleteCustomerTrainKindLabelById(id); + } +} diff --git a/src/main/java/lingtao/net/controller/ExpressFeeController.java b/src/main/java/lingtao/net/controller/ExpressFeeController.java new file mode 100644 index 0000000..eb4932b --- /dev/null +++ b/src/main/java/lingtao/net/controller/ExpressFeeController.java @@ -0,0 +1,75 @@ +package lingtao.net.controller; + +import java.util.List; + +import javax.servlet.http.HttpSession; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.ExpressFee; +import lingtao.net.bean.Msg; +import lingtao.net.service.ExpressFeeService; + +@RestController +public class ExpressFeeController { + + @Autowired + private ExpressFeeService expressFeeService; + + /** + * 省份快递费列表 + * + * @return + */ + @RequestMapping("/getExpressFees") + public Msg getExpressFees(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, ExpressFee expressFee) { + PageHelper.startPage(page, limit); + // 带分页,用于列表展示 + List expressFeeList = expressFeeService.getExpressFees(expressFee); + // 全国省份 + List allProvinces = expressFeeService.getAllExpressFees(expressFee); + // 手提袋偏远地区运费 + List handBagExpressFees = expressFeeService.getHandBagExpressFees(expressFee); + // 封套:6、房卡套:7、吊旗:13 + List taoExpressFees = expressFeeService.getTaoExpressFees(expressFee); + // 其他产品偏远地区运费 + List orherExpressFees = expressFeeService.getOtherExpressFees(expressFee); + PageInfo pageInfo = new PageInfo(expressFeeList); + return Msg.success().add("list", pageInfo).add("allProvinces", allProvinces).add("handBag", handBagExpressFees) + .add("tao", taoExpressFees).add("other", orherExpressFees); + } + + /** + * 添加省份快递费 + */ + @RequestMapping("/addExpressFee") + public Msg addExpressFee(ExpressFee expressFee, HttpSession session) { + expressFeeService.addExpressFee(expressFee, session); + return Msg.success(); + } + + /** + * 修改省份快递费 + */ + @RequestMapping("/updateExpressFee") + public Msg updateExpressFee(HttpSession session, @RequestParam(value = "id") int id, + @RequestParam(value = "field") String field, @RequestParam(value = "value") String value) throws Exception { + return expressFeeService.updateExpressFeeById(session, id, field, value); + } + + /** + * 删除 + */ + @RequestMapping("/deleteExpressFee") + public Msg deleteExpressFee(@RequestParam("id") Integer id) { + expressFeeService.deleteExpressFeeById(id); + return Msg.success(); + } +} diff --git a/src/main/java/lingtao/net/controller/FileController.java b/src/main/java/lingtao/net/controller/FileController.java new file mode 100644 index 0000000..6ad3516 --- /dev/null +++ b/src/main/java/lingtao/net/controller/FileController.java @@ -0,0 +1,90 @@ +package lingtao.net.controller; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +import org.apache.ibatis.annotations.Param; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.Msg; +import lingtao.net.bean.MyFile; +import lingtao.net.service.MyFileService; + +@Controller +public class FileController { + + @Autowired + private MyFileService fileService; + + /** + * 上传文件 + * + * @throws IOException + */ + @RequestMapping("/fileUpload") + @ResponseBody + public Msg uploadFile(@RequestParam("file") MultipartFile file, HttpServletRequest request) { + return fileService.fileUpload(file, request); + } + + /** + * 查询文件列表 + * @param page + * @param limit + * @param myFile + * @param session + * @return + */ + @RequestMapping("getAllFiles") + @ResponseBody + public Msg FileList(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, MyFile myFile, HttpSession session) { + PageHelper.startPage(page, limit); + List fileList = fileService.getFileList(myFile, session); + PageInfo filesInfo = new PageInfo(fileList); + return Msg.success().add("fileList", filesInfo); + } + + /** + * 根据id删除文件 + * + */ + @RequestMapping("/deleteFile") + @ResponseBody + public Msg deleteFile(@Param("fileId") Integer fileId) { + return fileService.deleteFile(fileId); + } + + /** + * 批量删除 + * + * @param ids + */ + @ResponseBody + @RequestMapping("/deleteFiles") + public Msg deleteBatch(@RequestParam(value = "ids") String ids, @RequestParam(value = "fileNames") String fileNames, + HttpServletRequest request) { + String[] arrIds = ids.split(","); + String[] fileNameArr = fileNames.split(";"); + List del_ids = new ArrayList(); + String hasFileload = request.getSession().getServletContext().getRealPath("/") + "/deptFile/"; + for (int i = 0; i < fileNameArr.length; i++) { + del_ids.add(Integer.parseInt(arrIds[i])); + fileService.deleteBatch(del_ids); + fileService.deleteFile(hasFileload + fileNameArr[i]); + } + return Msg.success(); + } +} diff --git a/src/main/java/lingtao/net/controller/Finance2Controller.java b/src/main/java/lingtao/net/controller/Finance2Controller.java new file mode 100644 index 0000000..6924082 --- /dev/null +++ b/src/main/java/lingtao/net/controller/Finance2Controller.java @@ -0,0 +1,104 @@ +package lingtao.net.controller; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.Finance; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.service.Finance2Service; + +@Controller +public class Finance2Controller { + + @Autowired + private Finance2Service finance2Service; + + // 用户跳转页面 + @RequestMapping("/finance_2/index") + public void index(HttpServletRequest request, HttpServletResponse response) throws Exception { + // return "/finance/finance"; + response.sendRedirect(request.getContextPath() + "/views/system/finance/finance2.jsp"); + } + + /** + * 根据条件查询数据 + * + */ + @ResponseBody + @RequestMapping("/getFinance_2") + public PageInfo getFinance(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, Finance finance) { + PageHelper.startPage(page, limit); + List financeList = finance2Service.getFinance(finance); + PageInfo pageInfo = new PageInfo(financeList); + return pageInfo; + } + + /** + * 获取自己上传过的文件名(用于导出文件) + * + * @return + */ + @ResponseBody + @RequestMapping("/getAllFilename_2") + public List getAllFilename() { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + List FilenameList = finance2Service.getAllFilename(user.getRealname()); + return FilenameList; + } + + /** + * 根据文件名删除自己导入过的文件 + * + * @return + */ + @ResponseBody + @RequestMapping("/deleteDataByFilename_2") + public Msg deleteDataByFilename(@RequestParam(value = "filename") String filename) { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + return finance2Service.deleteDataByFilename(filename, user.getRealname()); + } + + /** + * + * 文件上传 + */ + @ResponseBody + @RequestMapping(value = "/ajaxUpload_f2") + public Msg uploadExcel(@RequestParam("file") MultipartFile file) throws Exception { + synchronized (this) { + return finance2Service.ajaxUploadExcel(file); + } + } + + /** + * 导出 + * + * @param response + * @param request + * @param finance + * @throws Exception + */ + @RequestMapping("/excel_2") + public void excel(HttpServletResponse response, Finance finance) throws Exception { + if (StringUtils.isEmpty(finance.getFilename())) { + return; + } + finance2Service.excel(response, finance); + } +} diff --git a/src/main/java/lingtao/net/controller/Finance3Controller.java b/src/main/java/lingtao/net/controller/Finance3Controller.java new file mode 100644 index 0000000..018c07c --- /dev/null +++ b/src/main/java/lingtao/net/controller/Finance3Controller.java @@ -0,0 +1,104 @@ +package lingtao.net.controller; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.Finance; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.service.Finance3Service; + +@Controller +public class Finance3Controller { + + @Autowired + private Finance3Service finance3Service; + + // 用户跳转页面 + @RequestMapping("/finance_3/index") + public void index(HttpServletRequest request, HttpServletResponse response) throws Exception { + // return "/finance/finance"; + response.sendRedirect(request.getContextPath() + "/views/system/finance/finance3.jsp"); + } + + /** + * 根据条件查询数据 + * + */ + @ResponseBody + @RequestMapping("/getFinance_3") + public PageInfo getFinance(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, Finance finance) { + PageHelper.startPage(page, limit); + List financeList = finance3Service.getFinance(finance); + PageInfo pageInfo = new PageInfo(financeList); + return pageInfo; + } + + /** + * 获取自己上传过的文件名(用于导出文件) + * + * @return + */ + @ResponseBody + @RequestMapping("/getAllFilename_3") + public List getAllFilename() { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + List FilenameList = finance3Service.getAllFilename(user.getRealname()); + return FilenameList; + } + + /** + * 根据文件名删除自己导入过的文件 + * + * @return + */ + @ResponseBody + @RequestMapping("/deleteDataByFilename_3") + public Msg deleteDataByFilename(@RequestParam(value = "filename") String filename) { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + return finance3Service.deleteDataByFilename(filename, user.getRealname()); + } + + /** + * + * 文件上传 + */ + @ResponseBody + @RequestMapping(value = "/ajaxUpload_f3") + public Msg uploadExcel(@RequestParam("file") MultipartFile file) throws Exception { + synchronized (this) { + return finance3Service.ajaxUploadExcel(file); + } + } + + /** + * 导出 + * + * @param response + * @param request + * @param finance + * @throws Exception + */ + @RequestMapping("/excel_3") + public void excel(HttpServletResponse response, Finance finance) throws Exception { + if (StringUtils.isEmpty(finance.getFilename())) { + return; + } + finance3Service.excel(response, finance); + } +} diff --git a/src/main/java/lingtao/net/controller/Finance4Controller.java b/src/main/java/lingtao/net/controller/Finance4Controller.java new file mode 100644 index 0000000..c5eff45 --- /dev/null +++ b/src/main/java/lingtao/net/controller/Finance4Controller.java @@ -0,0 +1,104 @@ +package lingtao.net.controller; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.Finance; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.service.Finance4Service; + +@Controller +public class Finance4Controller { + + @Autowired + private Finance4Service finance4Service; + + // 用户跳转页面 + @RequestMapping("/finance_4/index") + public void index(HttpServletRequest request, HttpServletResponse response) throws Exception { + // return "/finance/finance"; + response.sendRedirect(request.getContextPath() + "/views/system/finance/finance4.jsp"); + } + + /** + * 根据条件查询数据 + * + */ + @ResponseBody + @RequestMapping("/getFinance_4") + public PageInfo getFinance(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, Finance finance) { + PageHelper.startPage(page, limit); + List financeList = finance4Service.getFinance(finance); + PageInfo pageInfo = new PageInfo(financeList); + return pageInfo; + } + + /** + * 获取自己上传过的文件名(用于导出文件) + * + * @return + */ + @ResponseBody + @RequestMapping("/getAllFilename_4") + public List getAllFilename() { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + List FilenameList = finance4Service.getAllFilename(user.getRealname()); + return FilenameList; + } + + /** + * 根据文件名删除自己导入过的文件 + * + * @return + */ + @ResponseBody + @RequestMapping("/deleteDataByFilename_4") + public Msg deleteDataByFilename(@RequestParam(value = "filename") String filename) { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + return finance4Service.deleteDataByFilename(filename, user.getRealname()); + } + + /** + * + * 文件上传 + */ + @ResponseBody + @RequestMapping(value = "/ajaxUpload_f4") + public Msg uploadExcel(@RequestParam("file") MultipartFile file) throws Exception { + synchronized (this) { + return finance4Service.ajaxUploadExcel(file); + } + } + + /** + * 导出 + * + * @param response + * @param request + * @param finance + * @throws Exception + */ + @RequestMapping("/excel_4") + public void excel(HttpServletResponse response, Finance finance) throws Exception { + if (StringUtils.isEmpty(finance.getFilename())) { + return; + } + finance4Service.excel(response, finance); + } +} diff --git a/src/main/java/lingtao/net/controller/Finance5Controller.java b/src/main/java/lingtao/net/controller/Finance5Controller.java new file mode 100644 index 0000000..2b090e6 --- /dev/null +++ b/src/main/java/lingtao/net/controller/Finance5Controller.java @@ -0,0 +1,104 @@ +package lingtao.net.controller; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.Finance; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.service.Finance5Service; + +@Controller +public class Finance5Controller { + + @Autowired + private Finance5Service finance5Service; + + // 用户跳转页面 + @RequestMapping("/finance_5/index") + public void index(HttpServletRequest request, HttpServletResponse response) throws Exception { + // return "/finance/finance"; + response.sendRedirect(request.getContextPath() + "/views/system/finance/finance5.jsp"); + } + + /** + * 根据条件查询数据 + * + */ + @ResponseBody + @RequestMapping("/getFinance_5") + public PageInfo getFinance(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, Finance finance) { + PageHelper.startPage(page, limit); + List financeList = finance5Service.getFinance(finance); + PageInfo pageInfo = new PageInfo(financeList); + return pageInfo; + } + + /** + * 获取自己上传过的文件名(用于导出文件) + * + * @return + */ + @ResponseBody + @RequestMapping("/getAllFilename_5") + public List getAllFilename() { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + List FilenameList = finance5Service.getAllFilename(user.getRealname()); + return FilenameList; + } + + /** + * 根据文件名删除自己导入过的文件 + * + * @return + */ + @ResponseBody + @RequestMapping("/deleteDataByFilename_5") + public Msg deleteDataByFilename(@RequestParam(value = "filename") String filename) { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + return finance5Service.deleteDataByFilename(filename, user.getRealname()); + } + + /** + * + * 文件上传 + */ + @ResponseBody + @RequestMapping(value = "/ajaxUpload_f5") + public Msg uploadExcel(@RequestParam("file") MultipartFile file) throws Exception { + synchronized (this) { + return finance5Service.ajaxUploadExcel(file); + } + } + + /** + * 导出 + * + * @param response + * @param request + * @param finance + * @throws Exception + */ + @RequestMapping("/excel_5") + public void excel(HttpServletResponse response, Finance finance) throws Exception { + if (StringUtils.isEmpty(finance.getFilename())) { + return; + } + finance5Service.excel(response, finance); + } +} diff --git a/src/main/java/lingtao/net/controller/Finance6Controller.java b/src/main/java/lingtao/net/controller/Finance6Controller.java new file mode 100644 index 0000000..78cd6ca --- /dev/null +++ b/src/main/java/lingtao/net/controller/Finance6Controller.java @@ -0,0 +1,104 @@ +package lingtao.net.controller; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.Finance; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.service.Finance6Service; + +@Controller +public class Finance6Controller { + + @Autowired + private Finance6Service finance6Service; + + // 用户跳转页面 + @RequestMapping("/finance_6/index") + public void index(HttpServletRequest request, HttpServletResponse response) throws Exception { + // return "/finance/finance"; + response.sendRedirect(request.getContextPath() + "/views/system/finance/finance6.jsp"); + } + + /** + * 根据条件查询数据 + * + */ + @ResponseBody + @RequestMapping("/getFinance_6") + public PageInfo getFinance(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, Finance finance) { + PageHelper.startPage(page, limit); + List financeList = finance6Service.getFinance(finance); + PageInfo pageInfo = new PageInfo(financeList); + return pageInfo; + } + + /** + * 获取自己上传过的文件名(用于导出文件) + * + * @return + */ + @ResponseBody + @RequestMapping("/getAllFilename_6") + public List getAllFilename() { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + List FilenameList = finance6Service.getAllFilename(user.getRealname()); + return FilenameList; + } + + /** + * 根据文件名删除自己导入过的文件 + * + * @return + */ + @ResponseBody + @RequestMapping("/deleteDataByFilename_6") + public Msg deleteDataByFilename(@RequestParam(value = "filename") String filename) { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + return finance6Service.deleteDataByFilename(filename, user.getRealname()); + } + + /** + * + * 文件上传 + */ + @ResponseBody + @RequestMapping(value = "/ajaxUpload_f6") + public Msg uploadExcel(@RequestParam("file") MultipartFile file) throws Exception { + synchronized (this) { + return finance6Service.ajaxUploadExcel(file); + } + } + + /** + * 导出 + * + * @param response + * @param request + * @param finance + * @throws Exception + */ + @RequestMapping("/excel_6") + public void excel(HttpServletResponse response, Finance finance) throws Exception { + if (StringUtils.isEmpty(finance.getFilename())) { + return; + } + finance6Service.excel(response, finance); + } +} diff --git a/src/main/java/lingtao/net/controller/Finance7Controller.java b/src/main/java/lingtao/net/controller/Finance7Controller.java new file mode 100644 index 0000000..f29cb7d --- /dev/null +++ b/src/main/java/lingtao/net/controller/Finance7Controller.java @@ -0,0 +1,104 @@ +package lingtao.net.controller; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.Finance; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.service.Finance7Service; + +@Controller +public class Finance7Controller { + + @Autowired + private Finance7Service finance7Service; + + // 用户跳转页面 + @RequestMapping("/finance_7/index") + public void index(HttpServletRequest request, HttpServletResponse response) throws Exception { + // return "/finance/finance"; + response.sendRedirect(request.getContextPath() + "/views/system/finance/finance7.jsp"); + } + + /** + * 根据条件查询数据 + * + */ + @ResponseBody + @RequestMapping("/getFinance_7") + public PageInfo getFinance(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, Finance finance) { + PageHelper.startPage(page, limit); + List financeList = finance7Service.getFinance(finance); + PageInfo pageInfo = new PageInfo(financeList); + return pageInfo; + } + + /** + * 获取自己上传过的文件名(用于导出文件) + * + * @return + */ + @ResponseBody + @RequestMapping("/getAllFilename_7") + public List getAllFilename() { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + List FilenameList = finance7Service.getAllFilename(user.getRealname()); + return FilenameList; + } + + /** + * 根据文件名删除自己导入过的文件 + * + * @return + */ + @ResponseBody + @RequestMapping("/deleteDataByFilename_7") + public Msg deleteDataByFilename(@RequestParam(value = "filename") String filename) { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + return finance7Service.deleteDataByFilename(filename, user.getRealname()); + } + + /** + * + * 文件上传 + */ + @ResponseBody + @RequestMapping(value = "/ajaxUpload_f7") + public Msg uploadExcel(@RequestParam("file") MultipartFile file) throws Exception { + synchronized (this) { + return finance7Service.ajaxUploadExcel(file); + } + } + + /** + * 导出 + * + * @param response + * @param request + * @param finance + * @throws Exception + */ + @RequestMapping("/excel_7") + public void excel(HttpServletResponse response, Finance finance) throws Exception { + if (StringUtils.isEmpty(finance.getFilename())) { + return; + } + finance7Service.excel(response, finance); + } +} diff --git a/src/main/java/lingtao/net/controller/FinanceController.java b/src/main/java/lingtao/net/controller/FinanceController.java new file mode 100644 index 0000000..fc879c2 --- /dev/null +++ b/src/main/java/lingtao/net/controller/FinanceController.java @@ -0,0 +1,104 @@ +package lingtao.net.controller; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.Finance; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.service.FinanceService; + +@Controller +public class FinanceController { + + @Autowired + private FinanceService financeService; + + // 用户跳转页面 + @RequestMapping("/finance/index") + public void index(HttpServletRequest request, HttpServletResponse response) throws Exception { + // return "/finance/finance"; + response.sendRedirect(request.getContextPath() + "/views/system/finance/finance.jsp"); + } + + /** + * 根据条件查询数据 + * + */ + @ResponseBody + @RequestMapping("/getFinance") + public PageInfo getFinance(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, Finance finance) { + PageHelper.startPage(page, limit); + List financeList = financeService.getFinance(finance); + PageInfo pageInfo = new PageInfo(financeList); + return pageInfo; + } + + /** + * 获取自己上传过的文件名(用于导出文件) + * + * @return + */ + @ResponseBody + @RequestMapping("/getAllFilename") + public List getAllFilename() { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + List FilenameList = financeService.getAllFilename(user.getRealname()); + return FilenameList; + } + + /** + * 根据文件名删除自己导入过的文件 + * + * @return + */ + @ResponseBody + @RequestMapping("/deleteDataByFilename") + public Msg deleteDataByFilename(@RequestParam(value = "filename") String filename) { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + return financeService.deleteDataByFilename(filename, user.getRealname()); + } + + /** + * + * 文件上传 + */ + @ResponseBody + @RequestMapping(value = "/ajaxUpload_1") + public Msg uploadExcel(@RequestParam("file") MultipartFile file) throws Exception { + synchronized (this) { + return financeService.ajaxUploadExcel(file); + } + } + + /** + * 导出 + * + * @param response + * @param request + * @param finance + * @throws Exception + */ + @RequestMapping("/excel") + public void excel(HttpServletResponse response, Finance finance) throws Exception { + if (StringUtils.isEmpty(finance.getFilename())) { + return; + } + financeService.excel(response, finance); + } +} diff --git a/src/main/java/lingtao/net/controller/FinanceDifferenceController.java b/src/main/java/lingtao/net/controller/FinanceDifferenceController.java new file mode 100644 index 0000000..e186ac1 --- /dev/null +++ b/src/main/java/lingtao/net/controller/FinanceDifferenceController.java @@ -0,0 +1,87 @@ +package lingtao.net.controller; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.FinanceDifference; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.service.FinanceDifferenceService; + +@Controller +public class FinanceDifferenceController { + + @Autowired + private FinanceDifferenceService differenceService; + + // 用户跳转页面 + @RequestMapping("/finance/difference/index") + public void index(HttpServletRequest request, HttpServletResponse response) throws Exception { + // return "/difference/difference"; + response.sendRedirect(request.getContextPath() + "/views/system/financeDifference/difference.jsp"); + } + + /** + * 根据条件查询数据 + * + */ + @ResponseBody + @RequestMapping("/getDifference") + public PageInfo getFinance(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, FinanceDifference difference) { + PageHelper.startPage(page, limit); + List differenceList = differenceService.get(difference); + PageInfo pageInfo = new PageInfo(differenceList); + return pageInfo; + } + + /** + * + * 文件上传 + */ + @ResponseBody + @RequestMapping(value = "/ajaxUpload") + public Msg uploadExcel(@RequestParam("file") MultipartFile file) throws Exception { + synchronized (this) { + return differenceService.ajaxUploadExcel(file); + } + } + + @ResponseBody + @RequestMapping("/getFilename") + public List getAllFilename() { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + List FilenameList = differenceService.getAllFilename(user.getRealname()); + return FilenameList; + } + + /** + * 导出 + * + * @param response + * @param request + * @param difference + * @throws Exception + */ + @RequestMapping("/excel_difference") + public void excel(HttpServletResponse response, FinanceDifference difference) throws Exception { + if (StringUtils.isEmpty(difference.getFilename())) { + return; + } + differenceService.excel(response, difference); + } +} diff --git a/src/main/java/lingtao/net/controller/FinanceExtractController.java b/src/main/java/lingtao/net/controller/FinanceExtractController.java new file mode 100644 index 0000000..f5e2fcb --- /dev/null +++ b/src/main/java/lingtao/net/controller/FinanceExtractController.java @@ -0,0 +1,103 @@ +package lingtao.net.controller; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.FinanceExtract; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.service.FinanceExtractService; + +@Controller +public class FinanceExtractController { + + @Autowired + private FinanceExtractService financeExtractService; + + // 用户跳转页面 + @RequestMapping("/finance/extract/index") + public void index(HttpServletRequest request, HttpServletResponse response) throws Exception { + response.sendRedirect(request.getContextPath() + "/views/system/finance/extract/extract.jsp"); + } + + /** + * 根据条件查询数据 + * + */ + @ResponseBody + @RequestMapping("/getFinance_extract") + public PageInfo getFinanceExtract(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, FinanceExtract financeExtract) { + PageHelper.startPage(page, limit); + List financeList = financeExtractService.getFinanceExtract(financeExtract); + PageInfo pageInfo = new PageInfo(financeList); + return pageInfo; + } + + /** + * 获取自己上传过的文件名(用于导出文件) + * + * @return + */ + @ResponseBody + @RequestMapping("/getFilename_extract") + public List getFilename_extract() { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + List FilenameList = financeExtractService.getFilename_extract(user.getRealname()); + return FilenameList; + } + + /** + * 根据文件名删除自己导入过的文件 + * + * @return + */ + @ResponseBody + @RequestMapping("/deleteDataByFilename2") + public Msg deleteDataByFilename(@RequestParam(value = "filename") String filename) { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + return financeExtractService.deleteDataByFilename(filename, user.getRealname()); + } + + /** + * + * 文件上传 + */ + @ResponseBody + @RequestMapping(value = "/ajaxUpload_2") + public Msg uploadExcel(@RequestParam("file") MultipartFile file) throws Exception { + synchronized (this) { + return financeExtractService.ajaxUploadExcel(file); + } + } + + /** + * 导出 + * + * @param response + * @param request + * @param finance + * @throws Exception + */ + @RequestMapping("/excel_extract") + public void excel(HttpServletResponse response, FinanceExtract financeExtract) throws Exception { + if (StringUtils.isEmpty(financeExtract.getFilename())) { + return; + } + financeExtractService.excel(response, financeExtract); + } +} diff --git a/src/main/java/lingtao/net/controller/InformationController.java b/src/main/java/lingtao/net/controller/InformationController.java new file mode 100644 index 0000000..73ee59f --- /dev/null +++ b/src/main/java/lingtao/net/controller/InformationController.java @@ -0,0 +1,65 @@ +package lingtao.net.controller; + +import java.util.List; + +import javax.servlet.http.HttpSession; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.Information; +import lingtao.net.bean.Msg; +import lingtao.net.service.InformationService; + +@RestController +public class InformationController { + + @Autowired + private InformationService informationService; + + /** + * 产品知识列表 + * + * @return + */ + @RequestMapping("/getInformations") + public Msg getInformations(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, Information information) { + PageHelper.startPage(page, limit); + List informationList = informationService.getInformations(information); + PageInfo pageInfo = new PageInfo(informationList); + return Msg.success().add("list", pageInfo); + } + + /** + * 添加产品知识 + */ + @RequestMapping("/addInformation") + public Msg addInformation(Information information, HttpSession session) { + informationService.addInformation(information, session); + return Msg.success(); + } + + /** + * 修改产品知识 + */ + @RequestMapping("/updateInformation") + public Msg updateInformation(Information information, HttpSession session) { + informationService.updateInformationById(information, session); + return Msg.success(); + } + + /** + * 删除 + */ + @RequestMapping("/deleteInformation") + public Msg deleteInformation(@RequestParam("id") Integer id) { + informationService.deleteInformationById(id); + return Msg.success(); + } +} diff --git a/src/main/java/lingtao/net/controller/LoginIpController.java b/src/main/java/lingtao/net/controller/LoginIpController.java new file mode 100644 index 0000000..b6f80bc --- /dev/null +++ b/src/main/java/lingtao/net/controller/LoginIpController.java @@ -0,0 +1,101 @@ +package lingtao.net.controller; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.LoginIp; +import lingtao.net.bean.Msg; +import lingtao.net.service.LoginIpService; + +@Controller +public class LoginIpController { + + @Autowired + private LoginIpService loginIpService; + + // IP跳转页面 + @RequestMapping("/loginIp/index") + public void index(HttpServletRequest request, HttpServletResponse response) throws Exception { + response.sendRedirect(request.getContextPath() + "/views/system/loginIp/loginIp.jsp"); + } + + /** + * 查询所有IP + */ + @RequestMapping("/getLoginIpList") + @ResponseBody + private Msg IPList(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, LoginIp loginIp) { + PageHelper.startPage(page, limit); + List list = loginIpService.getLoginIpList(loginIp); + PageInfo pageInfo = new PageInfo(list); + return Msg.success().add("ipList", pageInfo); + } + + /** + * 添加IP + */ + @ResponseBody + @RequestMapping("/addIp") + public Msg addIp(LoginIp loginIp) { + loginIpService.addIp(loginIp); + return Msg.success(); + } + + /** + * 修改IP + */ + @ResponseBody + @RequestMapping("/updateIp") + public Msg updateIp(LoginIp loginIp) { + loginIpService.updateIp(loginIp); + return Msg.success(); + } + + /** + * 删除 + */ + @RequestMapping("/deleteIp") + @ResponseBody + public Msg deleteIp(@RequestParam("id") Integer id) { + loginIpService.deleteIpById(id); + return Msg.success(); + } + + /** + * 批量删除 + * + * @param ids + */ + @ResponseBody + @RequestMapping("/deleteIps") + public Msg deleteBatch(@RequestParam(value = "ids") String ids) { + String[] arrIds = ids.split(","); + // String数组转为Integer数组 + int[] ints = new int[arrIds.length]; + for (int i = 0; i < arrIds.length; i++) { + ints[i] = Integer.parseInt(arrIds[i]); + } + return loginIpService.deleteBatch(ints); + } + + /** + * 检查授权IP是否存在 + */ + @ResponseBody + @RequestMapping("/checkIP") + public Msg checkIP(@RequestParam(value = "agreeIp") String agreeIp) { + return loginIpService.checkIP(agreeIp); + } +} diff --git a/src/main/java/lingtao/net/controller/LoginLogController.java b/src/main/java/lingtao/net/controller/LoginLogController.java new file mode 100644 index 0000000..2c59ea3 --- /dev/null +++ b/src/main/java/lingtao/net/controller/LoginLogController.java @@ -0,0 +1,45 @@ +package lingtao.net.controller; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.LoginLog; +import lingtao.net.service.LoginLogService; + +@Controller +public class LoginLogController { + + @Autowired + private LoginLogService loginLogService; + + // 登录情况跳转页面 + @RequestMapping("/loginLog/index") + public void index(HttpServletRequest request, HttpServletResponse response) throws Exception { + response.sendRedirect(request.getContextPath() + "/views/system/loginLog/loginLog.jsp"); + } + + /** + * 查询所有登录情况 + */ + @RequestMapping("/getLoginLogList") + @ResponseBody + private PageInfo IPList(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, LoginLog loginLog) { + PageHelper.startPage(page, limit); + List list = loginLogService.getLoginLogList(loginLog); + PageInfo pageInfo = new PageInfo(list); + return pageInfo; + } + +} diff --git a/src/main/java/lingtao/net/controller/ProductController.java b/src/main/java/lingtao/net/controller/ProductController.java new file mode 100644 index 0000000..dc6611e --- /dev/null +++ b/src/main/java/lingtao/net/controller/ProductController.java @@ -0,0 +1,397 @@ +package lingtao.net.controller; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import lingtao.net.bean.Msg; +import lingtao.net.bean.Product; +import lingtao.net.bean.SysDictSearchPro; +import lingtao.net.bean.SysUser; +import lingtao.net.service.ProductService; +import lingtao.net.service.QuoteLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@RestController +public class ProductController { + + @Autowired + private ProductService productService; + + @Autowired + private QuoteLogService quoteLogService; + + // 价格跳转页面 + @RequestMapping("/product/index") + public void index(HttpServletRequest request, HttpServletResponse response) throws Exception { + response.sendRedirect(request.getContextPath() + "/views/system/product/product.jsp"); + } + + /** + * 查询所有价格 + */ + @RequestMapping("/getProductList") + @ResponseBody + private Msg IPList(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, Product product) { + PageHelper.startPage(page, limit); + List list = productService.getProductList(product); + PageInfo pageInfo = new PageInfo(list); + return Msg.success().add("list", pageInfo); + } + + /** + * 修改价格 + * + * @param customerData + */ + @RequestMapping("/updatePriceById") + public Msg updatePriceById(@RequestParam(value = "proId") int proId, @RequestParam(value = "field") String field, + @RequestParam(value = "value") String value) { + return productService.updatePriceById(proId, field, value); + } + + /** + * 计算价格 + * + * @param product + * @return + */ + @RequestMapping("/getThanSum") + public Msg thanPrice(Product product, HttpServletRequest request) { + SysUser user = (SysUser) request.getSession().getAttribute("USER_SESSION"); + /*if (StringUtils.isEmpty(product.getWangwang().trim()) && user.getRole().contains("999") + && !user.getRole().contains("1049")) { + return Msg.fail("请填写客户旺旺!"); + }*/ + if ("帆布".equals(product.getProTypeValue())) { + if ("套餐".equals(product.getStickerKind())) { + product.setCount(1); + } + } else { + if (StringUtils.isEmpty(product.getCount()) || product.getCount() <= 0) { + return Msg.fail("数量必须大于0"); + } + } + // 透明不干胶进去后kindValue 会为1,记录起来,查询日志 + String toumingKind = ""; + if ("0".equals(product.getProTypeValue()) && "2".equals(product.getKindValue())) { + toumingKind = product.getKindValue(); + } + if ("18".equals(product.getProTypeValue()) && "4".equals(product.getKindValue())) { + product.setCount(Integer.valueOf(request.getParameter("count1"))); + } + product.setRole(user.getRole()); + + if ("菜单".equals(product.getProTypeLabel())) { + product.setSize(product.getSize1().replace(",", "")); + String s = request.getParameter("kindValue5"); + product.setKind1Value(s); + product.setSize(request.getParameter("ui_menu_size")); + } else if ("4".equals(product.getProTypeValue()) && "9".equals(product.getKind())) { + product.setSize(request.getParameter("ui_shk_size")); + } + + if (user.getRole().indexOf("1010") > -1) { + if ("0".equals(product.getKindValue()) && "专版打印".equals(product.getStickerKind())) { + double len = Double.valueOf(product.getSize().substring(0, product.getSize().indexOf("*"))); + double wid = Double.valueOf(product.getSize().substring(product.getSize().indexOf("*") + 1)); + if ((len <= 5 && wid < 4) || (len < 4 && wid <= 5)) { + product.setSize("5*4"); + } + } + } else { + if (product.getNumber() != null && product.getNumber() > 1) { + if ("专版打印".equals(product.getStickerKind()) || "少数量".equals(product.getCouponKind())) { + if (request.getParameter("desType") != null && !"".equals(request.getParameter("desType"))) { + product.setP(Integer.valueOf(request.getParameter("desType"))); + } + } + } + } + List proList = productService.getThanPrice(product, user.getRole()); + + if (proList == null) { + return Msg.fail("暂无报价"); + } + //银瑾单独报价 + if (user.getRole().indexOf("1010") > -1) { + double otherPrice = 0; + /*if("5".equals(product.getKind())) { + for (Product list : proList) { + list.setPrice(list.getPrice() + 30); + } + }else if("帆布".equals(product.getProTypeValue())) { + for (Product list : proList) { + otherPrice = Math.floor(list.getPrice() + 5); + list.setPrice(otherPrice > 40 ? otherPrice : 40); + if(product.getNumber() > 1) { + list.setPrice(Math.floor(list.getPrice() + 2 * (product.getNumber()-1))); + } + } + }else */ + if ("22".equals(product.getProTypeValue())) { + for (Product list : proList) { + list.setPrice(list.getPrice() + 50); + } + } else if ("桌布".equals(product.getProTypeValue())) { + for (Product list : proList) { + list.setPrice(list.getPrice() + 30); + } + } else if ("13".equals(product.getProTypeValue())) { + for (Product list : proList) { + list.setPrice(list.getPrice() + 80); + } + } else if ("亚克力".equals(product.getProTypeValue())) { + for (Product list : proList) { + list.setPrice(list.getPrice() + 40); + } + } else if ("11".equals(product.getProTypeValue())) { + for (Product list : proList) { + list.setPrice(list.getPrice() + 50); + } + } else if ("0".equals(product.getProTypeValue())) { + if ("0".equals(product.getKindValue()) && "常用种类".equals(product.getStickerKind())) { + double len = Double.valueOf(product.getSize().substring(0, product.getSize().indexOf("*"))); + ; + double wid = Double.valueOf(product.getSize().substring(product.getSize().indexOf("*") + 1)); + if ((len <= 5 && wid < 4) || (len < 4 && wid <= 5)) { + double priceArr[] = {45, 50, 75, 90, 170, 260, 440, 620, 810, 1000}; + double countArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000, 50000}; + for (Product list : proList) { + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < list.getCount()) { + continue; + } + list.setPrice(priceArr[i]); + break; + } + + } + } + } else if ("11".equals(product.getKindValue()) || "布纹纸超白".equals(product.getKindValue())) { + for (Product list : proList) { + list.setPrice(Math.floor(list.getPrice() * 1.5)); + } + } else if ("拉丝金".equals(product.getKindValue()) || "拉丝银".equals(product.getKindValue())) { + for (Product list : proList) { + list.setPrice(Math.floor(list.getPrice() + 60)); + } + } + } else if ("金属标".equals(product.getProTypeValue()) && "UV转印贴".equals(product.getKind())) { + for (Product list : proList) { + if (list.getCount() > 500) { + list.setPrice(Math.floor(list.getPrice() * 0.95)); + } else { + list.setPrice(Math.floor(list.getPrice() * 0.9)); + } + } + } else if ("服装吊牌".equals(product.getProTypeValue()) && "异形模切".equals(product.getCraftQie())) { + for (Product list : proList) { + list.setPrice(list.getPrice() + 50); + } + } + } + + if ("0".equals(product.getProTypeValue())) { + if ("5".equals(product.getKindValue()) && proList == null) { + if (StringUtils.isEmpty(product.getAotu())) { + return Msg.fail("哑金不干胶该尺寸无法制作,最大做到 39*27 cm"); + } /*else { + return Msg.fail("哑金不干胶带凹凸工艺该尺寸无法制作 (1*1CM至11*11CM;10*6至12*8CM;20*4以内)"); + }*/ + } else if ("易碎纸不干胶".equals(product.getKindValue()) && proList == null) { + return Msg.fail("易碎纸不干胶该尺寸无法制作,最大做到 42*38 cm"); + } else if (("拉丝金".equals(product.getKindValue()) || "拉丝银".equals(product.getKindValue())) + && proList == null) { + return Msg.fail("拉丝金/银该尺寸无法制作,最大做到 42*38 cm"); + } else if ("格底珠光膜".equals(product.getKindValue()) && proList == null) { + return Msg.fail("格底珠光膜该尺寸无法制作,最大做到 42*38 cm"); + } + if (proList == null) { + if ("少数量".contentEquals(product.getStickerKind())) { + return Msg.fail("少数量最大做到 42*28.5 cm"); + } + /*return Msg.fail("该工艺、该尺寸无法制作,请单独报价");*/ + } + } else if ("20".equals(product.getProTypeValue())) { + if (proList == null && "0".equals(product.getKindValue())) { + return Msg.fail("双插盒该尺寸展开超过650*500MM,请另行报价"); + } else if (proList == null && "1".equals(product.getKindValue())) { + return Msg.fail("飞机盒该尺寸展开超过900*600MM,请另行报价"); + } + } + + if (!StringUtils.isEmpty(toumingKind)) { + product.setKindValue(toumingKind); + } + // 插入操作日志 + String log = quoteLogService.log(product, request, proList); + if ("登陆失效".equals(log)) { + return Msg.fail("登录信息失效~请刷新页面!"); + } + + // 把角色存入,前台判断,区分不同价格 + for (Product p : proList) { +// p.setPrice(Math.ceil(p.getPrice() * 1.3)); + p.setRole(user.getRole()); + } + + if (product.getKindValue() != null) {//判断是否大店报不干胶价格 + /*if(product.getKindValue().equals("0")) { + double width = 0, length = 0; + if(product.getWidth() != null) { + width = product.getWidth(); + } + if(product.getLength() != null) { + length = product.getLength(); + } + String role = user.getRole(); + if(length < width) { + length = product.getWidth(); + width = product.getLength(); + } + if(width == 0 && length == 0) { + }else if((length <= 5 && width <= 4)) { + String tang = product.getCraftTang(); + if(AStickersPrice.f_getRole(role) == 1 && tang == null) { + List price = new ArrayList(); + if(length == 1 && width == 1) { + int priceArr[] = {30, 35, 50, 55, 65, 90, 135, 185, 235, 285}; + price = f_getPrice( priceArr, product.getCount(), product.getCraftMo()); + }else if(length == 2 && width == 1) { + int priceArr[] = {35, 40, 55, 60, 70, 95, 140, 190, 240, 290}; + price = f_getPrice( priceArr, product.getCount(), product.getCraftMo()); + }else if(length == 3 && width == 1) { + int priceArr[] = {35, 40, 55, 70, 80, 125, 205, 290, 370, 455}; + price = f_getPrice( priceArr, product.getCount(), product.getCraftMo()); + }else if(length == 4 && width == 1) { + int priceArr[] = {35, 40, 55, 70, 80, 125, 205, 290, 370, 455}; + price = f_getPrice( priceArr, product.getCount(), product.getCraftMo()); + }else if(length == 5 && width == 1) { + int priceArr[] = {35, 40, 55, 70, 80, 125, 205, 290, 370, 455}; + price = f_getPrice( priceArr, product.getCount(), product.getCraftMo()); + }else if(length == 2 && width == 2) { + int priceArr[] = {35, 40, 55, 70, 80, 125, 205, 290, 370, 455}; + price = f_getPrice( priceArr, product.getCount(), product.getCraftMo()); + }else if(length == 3 && width == 2) { + int priceArr[] = {35, 40, 55, 70, 80, 125, 205, 290, 370, 455}; + price = f_getPrice( priceArr, product.getCount(), product.getCraftMo()); + }else if(length == 4 && width == 2) { + int priceArr[] = {35, 40, 55, 70, 110, 170, 290, 410, 535, 665}; + price = f_getPrice( priceArr, product.getCount(), product.getCraftMo()); + }else if(length == 5 && width == 2) { + int priceArr[] = {35, 40, 55, 70, 110, 170, 290, 410, 535, 665}; + price = f_getPrice( priceArr, product.getCount(), product.getCraftMo()); + }else if(length == 3 && width == 3) { + int priceArr[] = {35, 40, 55, 70, 110, 170, 290, 410, 535, 665}; + price = f_getPrice( priceArr, product.getCount(), product.getCraftMo()); + }else if(length == 4 && width == 3) { + int priceArr[] = {35, 40, 55, 70, 110, 170, 290, 410, 535, 665}; + price = f_getPrice( priceArr, product.getCount(), product.getCraftMo()); + }else if(length == 5 && width == 3) { + int priceArr[] = {35, 40, 55, 70, 110, 170, 290, 410, 535, 665}; + price = f_getPrice( priceArr, product.getCount(), product.getCraftMo()); + }else if(length == 4 && width == 4) { + int priceArr[] = {35, 40, 55, 70, 110, 170, 290, 410, 535, 665}; + price = f_getPrice( priceArr, product.getCount(), product.getCraftMo()); + }else if(length == 5 && width == 4) { + int priceArr[] = {35, 40, 55, 70, 150, 240, 420, 600, 790, 980}; + price = f_getPrice( priceArr, product.getCount(), product.getCraftMo()); + } + + if (proList.size() >= 4) { + proList = proList.subList(0, 4); + } + + for(int i = 0; i < price.size(); i ++){ + if(product.getNumber() > 1) { + proList.get(i).setPrice(price.get(i).getPrice() * product.getNumber()); + }else { + proList.get(i).setPrice(price.get(i).getPrice()); + } + } + } + } + }elseif(user.getRole().indexOf("1033") > 0 && product.getProTypeValue().equals("17")) { + if(product.getKindValue().equals("6")) { + for (Product products : proList) { + products.setPrice(Math.floor(products.getPrice() * 0.88)); + } + } + } */ + } + + + return Msg.success().add("proList", proList); + } + + /*public List f_getPrice( int priceArr[], int count, String craftMo) { + List list = new ArrayList(); + Product p = new Product(); + int countArr[] = { 500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000, 50000 }; + for(int i = 0; i < countArr.length; i++) { + if(countArr[i] < count || list.size() > 3) { + continue; + } + p = new Product(); + p.setCount(countArr[i]); + if(craftMo.equals("覆哑膜")) { + p.setPrice(Math.ceil(Double.valueOf(priceArr[i]) * 1.2)); + }else { + p.setPrice(Double.valueOf(priceArr[i])); + } + + list.add(p); + } + + return list; + }*/ + + /** + * 根据产品种类获取材质 + * + * @param proTypeValue + * @return + */ + @RequestMapping(value = "/getKindsByPro") + public Map kindList(@RequestParam("proTypeValue") String proTypeValue) { + Map map = new HashMap(); + List proList = productService.getKindsByPro(proTypeValue); + for (Product product : proList) { + map.put(product.getKindValue(), product.getKindLabel()); + } + return map; + } + + /** + * 根据用户搜索的产品名称获取产品 + */ + @RequestMapping(value = "/getSearchPro") + public List searchPro(@RequestParam("likeProTypeLabel") String likeProTypeLabel) + throws Exception { + List proList = productService.searchPro(likeProTypeLabel); + return proList; + } + + /** + * 价格文件上传 + */ + @RequestMapping(value = "/priceUpload") + public Msg uploadExcel(@RequestParam("file") MultipartFile file) throws Exception { + System.out.println("进来了"); + productService.ajaxUploadExcel(file); + return Msg.success(); + } + +} diff --git a/src/main/java/lingtao/net/controller/ProductImgController.java b/src/main/java/lingtao/net/controller/ProductImgController.java new file mode 100644 index 0000000..a2a0755 --- /dev/null +++ b/src/main/java/lingtao/net/controller/ProductImgController.java @@ -0,0 +1,214 @@ +package lingtao.net.controller; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import lingtao.net.bean.Msg; +import lingtao.net.bean.ProductImg; +import lingtao.net.bean.SysDictProduct; +import lingtao.net.service.ProductImgService; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.http.client.utils.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import javax.management.RuntimeErrorException; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.IOException; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@RestController +public class ProductImgController { + + private String localPrefix = "abc\\product"; + + private String localPath = "C:\\lingtao\\upload"; + + private String localDomain = "http://47.114.150.226:80/erp"; + + @Autowired + private ProductImgService productImgService; + + /** + * 根据条件查询 + */ + @RequestMapping("/getImgList") + private Msg imgList(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, ProductImg productImg) { + PageHelper.startPage(page, limit); + List list = productImgService.getProKindList(productImg); + PageInfo pageInfo = new PageInfo(list); + return Msg.success().add("list", pageInfo); + } + + /** + * 获取所有产品 + * + * @return + */ + @RequestMapping("/productList") + public Msg productList() { + Map map = new HashMap(); + List proList = productImgService.findAllPro(); + for (SysDictProduct entity : proList) { + map.put(entity.getProTypeValue(), entity.getProTypeLabel()); + } + return Msg.success().add("proMap", map); + } + + /** + * 根据产品种类获取材质 + * + * @param proTypeValue + * @return + */ + /* + * @RequestMapping("/getKindsByPro") public Msg + * kindList(@RequestParam("proTypeValue") String proTypeValue) { Map map = new HashMap(); List kindList = + * productImgService.getKindsByPro(proTypeValue); if (kindList.size() > 0) { for + * (SysDictProduct entity : kindList) { map.put(entity.getKindValue(), + * entity.getKindLabel()); } } return Msg.success().add("proMap", map); } + */ + + /** + * 根据材质获取规格 + * + * @param dto + * @return + */ + @RequestMapping(value = "/getKind2sByKind") + public Map kind2List(@RequestParam("proTypeValue") String proTypeValue, + @RequestParam("kindValue") String kindValue) { + Map map = new HashMap(); + List kind2List = productImgService.getKind2sByKind(proTypeValue, kindValue); + if (kind2List.size() > 0) { + for (SysDictProduct entity : kind2List) { + map.put(entity.getKind2Value(), entity.getKind2Label()); + } + } + return map; + } + + // 图片上传及新增 + @RequestMapping("/productUpload") + public Msg upload(@RequestParam("file") MultipartFile file, + @RequestParam(value = "proTypeValue", required = false) String proTypeValue, + @RequestParam(value = "kindValue", required = false) String kindValue, + @RequestParam(value = "kind2Value", required = false) String kind2Value, + @RequestParam(value = "remark", required = false) String remark) throws Exception { + if (file.isEmpty()) { + return Msg.fail("文件不能为空"); + } + // 获取文件名后缀 + String extension = FilenameUtils.getExtension(file.getOriginalFilename()); + // 获取path + String path = getPath(extension, FilenameUtils.getBaseName(file.getOriginalFilename())); + // 保存文件信息 + File newFile = new File(localPath + File.separator + path); + try { + FileUtils.copyInputStreamToFile(new ByteArrayInputStream(file.getBytes()), newFile); + } catch (IOException e) { + throw new RuntimeErrorException(null, ""); + } + + System.out.println("kind2Value=" + "null".equals(kind2Value)); + // 文件信息 + ProductImg productImg = new ProductImg(); + // productImg.setImgUrl(localPath + "/" + path); + productImg.setImgUrl(localDomain + "/" + path); + + // 保存图片信息 + productImg.setProTypeValue(proTypeValue); + if (StringUtils.isNotEmpty(kindValue)) { + productImg.setKindValue(kindValue); + } + if (StringUtils.isNotEmpty(kind2Value) && !"null".equals(kind2Value)) { + productImg.setKind2Value(kind2Value); + } + if (StringUtils.isNotEmpty(remark)) { + productImg.setRemark(remark); + } + // 根据value查询label + SysDictProduct label = productImgService.getLabel(productImg); + productImg.setProTypeLabel(label.getProTypeLabel()); + productImg.setKindLabel(label.getKindLabel()); + productImg.setKind2Label(label.getKind2Label()); + + // productImg.setImgUrl(productImg.getImgUrl()); + productImgService.addImgUrl(productImg); + + return Msg.success().add("imgList", productImg); + } + + /** + * 修改备注说明 + * + * @param id + * @param remark + * @return + */ + @RequestMapping("/updateImgUploadRemark") + public Msg updateImgUploadRemark(@RequestParam("id") Long id, @RequestParam("remark") String remark) { + ProductImg img = new ProductImg(); + img.setId(id); + img.setRemark(remark); + productImgService.updateImgUploadRemark(img); + return Msg.success(); + } + + /** + * @param prefixSelf 根据上传的接口存入自己的文件夹 + * @param suffix 文件的后缀 + * @param fileName 文件名 + * @return + */ + public String getPath(String suffix, String fileName) { + + // 生成uuid + // String uuid = UUID.randomUUID().toString().replaceAll("-", ""); + String path = null; + + // 文件路径 + path = DateUtils.formatDate(new Date(), "yyyyMMdd") + File.separator + fileName; + + path = localPrefix + File.separator + File.separator + path; + + return path + "." + suffix; + } + + /** + * 根据条件获取产品图片 + * + * @param dto + * @return + */ + @RequestMapping("/getImgs") + public List imgList(@RequestParam("proTypeValue") String proTypeValue, + @RequestParam(value = "kindValue", required = false) String kindValue, + @RequestParam(value = "craftValue", required = false) String craftValue, + @RequestParam(value = "kind2Value", required = false) String kind2Value) { + List imgList = productImgService.getImgsByProKind(proTypeValue, kindValue, kind2Value, craftValue); + return imgList; + } + + /** + * 获取视频地址 + * + * @param dto + * @return + */ + @RequestMapping("/getVideos") + public List videos() { + List videoUrls = productImgService.getVideos(); + return videoUrls; + } +} diff --git a/src/main/java/lingtao/net/controller/QuestionController.java b/src/main/java/lingtao/net/controller/QuestionController.java new file mode 100644 index 0000000..d043f64 --- /dev/null +++ b/src/main/java/lingtao/net/controller/QuestionController.java @@ -0,0 +1,122 @@ +package lingtao.net.controller; + +import java.util.List; + +import javax.servlet.http.HttpSession; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.Information; +import lingtao.net.bean.Msg; +import lingtao.net.bean.Question; +import lingtao.net.bean.SysUser; +import lingtao.net.service.InformationService; +import lingtao.net.service.QuestionService; +import lingtao.net.service.SysUserService; + +@RestController +public class QuestionController { + + @Autowired + private QuestionService questionService; + + @Autowired + private InformationService informationService; + + @Autowired + private SysUserService sysUserService; + + /** + * 问题列表 + * + * @return + */ + @RequestMapping("/questions") + public Msg questions(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, Question question) { + PageHelper.startPage(page, limit); + List questionList = questionService.questions(question); + PageInfo pageInfo = new PageInfo(questionList); + return Msg.success().add("list", pageInfo); + } + + @RequestMapping("/getQuestions") + public Msg getQuestions(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit) { + PageHelper.startPage(page, limit); + // 单选题 + List singleQuestionList = questionService.getSingleQuestions(); + // 多选题 + List multipleQuestionList = questionService.getMultipleQuestions(); + // 填空题 + List fillQuestionList = questionService.getFillQuestions(); + // 简答题 + List shortAnswerList = informationService.getShortAnswers(); + + PageInfo single = new PageInfo(singleQuestionList); + PageInfo multiple = new PageInfo(multipleQuestionList); + PageInfo fill = new PageInfo(fillQuestionList); + PageInfo shortAnswer = new PageInfo(shortAnswerList); + // 转成json返回JSONArray.fromObject(questionList) + return Msg.success().add("single", single).add("multiple", multiple).add("fill", fill).add("shortAnswer", + shortAnswer); + } + + /** + * 添加问题 + */ + @RequestMapping("/addQuestion") + public Msg addQuestion(Question question, HttpSession session) { + questionService.addQuestion(question, session); + return Msg.success(); + } + + /** + * 修改问题 + */ + @RequestMapping("/updateQuestion") + public Msg updateQuestion(Question question, HttpSession session) { + questionService.updateQuestionById(question, session); + return Msg.success(); + } + + /** + * 删除 + */ + @RequestMapping("/deleteQuestion") + public Msg deleteQuestion(@RequestParam("id") Integer id) { + questionService.deleteQuestionById(id); + return Msg.success(); + } + + /** + * 答对80%后,改变系统状态 + * + * @return + */ + @RequestMapping("/videoOverToChangeSysStatus") + public Msg videoOverToChangeSysStatus(HttpSession session) { + SysUser user = (SysUser) session.getAttribute("USER_SESSION"); + return sysUserService.videoOverToChangeSysStatus(user.getUserId()); + } + @RequestMapping("/examOverToChangeSysStatus") + public Msg examOverToChangeSysStatus(HttpSession session) { + SysUser user = (SysUser) session.getAttribute("USER_SESSION"); + return sysUserService.examOverToChangeSysStatus(user.getUserId()); + } + /* + * @RequestMapping("/changeSysStatus") public Msg changeSysStatus(HttpSession + * session, @RequestBody Map map) { System.out.println(map); + * Set> entrySet = map.entrySet(); for (Entry key : entrySet) { System.out.println(key); } SysUser user = (SysUser) + * session.getAttribute("USER_SESSION"); return + * sysUserService.changeSysStatus(user.getUserId()); } + */ + +} diff --git a/src/main/java/lingtao/net/controller/QuoteDataController.java b/src/main/java/lingtao/net/controller/QuoteDataController.java new file mode 100644 index 0000000..914eddf --- /dev/null +++ b/src/main/java/lingtao/net/controller/QuoteDataController.java @@ -0,0 +1,165 @@ +package lingtao.net.controller; + +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.Msg; +import lingtao.net.bean.QuoteData; +import lingtao.net.bean.SysUser; +import lingtao.net.service.QuoteDataService; + +@RestController +public class QuoteDataController { + + @Autowired + private QuoteDataService quoteDataService; + + /** + * 获取操作日志列表 + * + * @param page + * @param limit + * @param quoteLog + * @return + */ + @RequestMapping("/getQuoteData") + public PageInfo logList(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, QuoteData quoteData) { + PageHelper.startPage(page, limit); + List logList = quoteDataService.quoteDatas(quoteData); + PageInfo pageInfo = new PageInfo(logList); + return pageInfo; + } + + /** + * 修改数据 + * + */ + @RequestMapping("/updateById") + public Msg updateById(@RequestParam(value = "id") int id, @RequestParam(value = "field") String field, + @RequestParam(value = "value") String value, @RequestParam(value = "username") String username) { + return quoteDataService.updateById(id, field, value, username); + } + + /** + * 获取报过的产品 + * + */ + @RequestMapping("/getProTypeLabel") + public List getProType() { + return quoteDataService.getProType(); + } + + /** + * 修改【是否当天成交】状态(自己修改) + * + * @param id + * @return + */ + @RequestMapping("/changeIsBuyToDayStatus") + public Msg changeIsBuyToDay(@RequestParam(value = "id") Integer id, + @RequestParam(value = "username") String username) { + // 只有自己的数据才能更改【是否当天成交】状态 + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + // 超管、组长身份也能更改【是否当天成交】状态 + boolean flag = new CustomerDataControlle().isSuperOrManager(); + if (!username.equals(user.getUsername()) && !flag) { + return Msg.fail("只允许修改自己的数据!"); + } + return quoteDataService.changeIsBuyToDay(id); + } + + /** + * 修改【是否成交】状态(店长修改) + * + * @param id + * @return + */ + @RequestMapping("/changeIsBuyStatus") + public Msg changeIsBuy(@RequestParam(value = "id") Integer id) { + // 超管、组长身份才允许修改【成交状态】 + boolean flag = new CustomerDataControlle().isSuperOrManager(); + if (!flag) { + return Msg.fail(); + } + return quoteDataService.changeIsBuy(id); + } + + /** + * 修改所属店铺以及选择状态 + * + * @param id + * @return + */ + @RequestMapping("/updateShopname") + public Msg updateShopname(@RequestParam(value = "id") Integer id, @RequestParam(value = "shopname") String shopname, + @RequestParam(value = "username") String username) { + if (StringUtils.isEmpty(shopname)) { + return Msg.fail("请选择有效店铺!"); + } + // 只有自己的数据才能更改【所属店铺】 + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + if (!username.equals(user.getUsername())) { + return Msg.fail("只允许修改自己的数据!"); + } + return quoteDataService.updateShopnameSelect(shopname, id); + } + + @RequestMapping("/addOrderNumber") + public Msg addOrderNumber(@RequestParam(value = "id") Integer id, + @RequestParam(value = "orderNumber") String orderNumber) { + if (StringUtils.isEmpty(orderNumber)) { + return Msg.fail("请填写订单号"); + } + if (orderNumber.length() < 10 || orderNumber.length() > 25) { + return Msg.fail("请填写正确的订单号"); + } + return quoteDataService.addOrderNumber(id, orderNumber); + } + + /** + * 柱状图 + * + */ + @ResponseBody + @RequestMapping("/echartZhuSummary") + public Map echartZhuList(QuoteData quoteData) { + return quoteDataService.echartZhuList(quoteData, 0); + } + + /** + * 客服大单统计图 + * + */ + @ResponseBody + @RequestMapping("/echartKefuSummary") + public Map echartKefuList(QuoteData quoteData) { + return quoteDataService.echartZhuList(quoteData, 1); + } + + /** + * 导出 + * + * @param response + * @param request + * @param difference + * @throws Exception + */ + @RequestMapping("/excel_quoteData") + public void excel(HttpServletResponse response, QuoteData quoteData) throws Exception { + quoteDataService.excel(response, quoteData); + } +} diff --git a/src/main/java/lingtao/net/controller/QuoteLogController.java b/src/main/java/lingtao/net/controller/QuoteLogController.java new file mode 100644 index 0000000..e3f6b26 --- /dev/null +++ b/src/main/java/lingtao/net/controller/QuoteLogController.java @@ -0,0 +1,39 @@ +package lingtao.net.controller; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.QuoteLog; +import lingtao.net.service.QuoteLogService; + +@RestController +public class QuoteLogController { + + @Autowired + private QuoteLogService quoteLogService; + + /** + * 获取操作日志列表 + * + * @param page + * @param limit + * @param quoteLog + * @return + */ + @RequestMapping("/getQuoteLog") + public PageInfo logList(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, QuoteLog quoteLog) { + PageHelper.startPage(page, limit); + List logList = quoteLogService.quoteLogs(quoteLog); + PageInfo pageInfo = new PageInfo(logList); + return pageInfo; + } + +} diff --git a/src/main/java/lingtao/net/controller/SysDictSearchProController.java b/src/main/java/lingtao/net/controller/SysDictSearchProController.java new file mode 100644 index 0000000..e2a293a --- /dev/null +++ b/src/main/java/lingtao/net/controller/SysDictSearchProController.java @@ -0,0 +1,67 @@ +package lingtao.net.controller; + +import java.util.List; + +import javax.servlet.http.HttpSession; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysDictSearchPro; +import lingtao.net.service.SysDictSearchProService; + +@RestController +public class SysDictSearchProController { + + @Autowired + private SysDictSearchProService searchProService; + + /** + * 查询关键字 + * + * @param searchPro + * @return + */ + @RequestMapping("/getKeyWordsList") + public PageInfo keyWordsList(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, SysDictSearchPro searchPro) { + PageHelper.startPage(page, limit); + List keyWordsList = searchProService.keyWordsList(searchPro); + PageInfo pageInfo = new PageInfo(keyWordsList); + return pageInfo; + } + + /** + * 添加关键字 + */ + @RequestMapping("/addSearchPro") + public Msg addSearchPro(SysDictSearchPro searchPro, HttpSession session) { + return searchProService.addSearchPro(searchPro, session); + } + + /** + * 根据id修改关键字 + * + */ + @ResponseBody + @RequestMapping("/updateKeyWord") + public Msg updateKeyWordById(HttpSession session, @RequestParam(value = "id") int id, + @RequestParam(value = "value") String value, @RequestParam(value = "field") String field) throws Exception { + return searchProService.updateKeyWordById(session, id, value, field); + } + + /** + * 改变用户状态 + */ + @RequestMapping("/changeKeyWordsStatus") + public Msg changeKeyWordStatus(@RequestParam(value = "id") Integer id) { + return searchProService.changeKeyWordStatus(id); + } +} diff --git a/src/main/java/lingtao/net/controller/SysPermissionController.java b/src/main/java/lingtao/net/controller/SysPermissionController.java new file mode 100644 index 0000000..e794b7a --- /dev/null +++ b/src/main/java/lingtao/net/controller/SysPermissionController.java @@ -0,0 +1,42 @@ +package lingtao.net.controller; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import lingtao.net.bean.SysPermission; +import lingtao.net.service.SysPermissionService; + +@RequestMapping("/sysPermission") +@Controller +public class SysPermissionController { + + @Autowired + private SysPermissionService sysPermissionService; + + @RequestMapping("/index") + public String index() throws Exception { + return "system/permission/index"; + } + + @RequestMapping("/parentList") + @ResponseBody + public List parentList() { + return sysPermissionService.getParentPers(); + } + + @RequestMapping("/list") + @ResponseBody + public Map list() throws Exception { + Map map = new HashMap<>(); + map.put("code", 0); + map.put("msg", null); + map.put("data", sysPermissionService.getAll()); + return map; + } +} diff --git a/src/main/java/lingtao/net/controller/SysRoleController.java b/src/main/java/lingtao/net/controller/SysRoleController.java new file mode 100644 index 0000000..fcf1754 --- /dev/null +++ b/src/main/java/lingtao/net/controller/SysRoleController.java @@ -0,0 +1,172 @@ +package lingtao.net.controller; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysRole; +import lingtao.net.bean.SysUser; +import lingtao.net.service.SysRoleService; + +/** + * 角色权限 + */ +@Controller +public class SysRoleController { + + @Autowired + private SysRoleService sysRoleService; + + // 用户跳转页面 + @RequestMapping("/role/index") + public void index(HttpServletRequest request, HttpServletResponse response) throws Exception { + response.sendRedirect(request.getContextPath() + "/views/system/role/role.jsp"); + } + + /** + * 根据条件查询角色 + */ + @RequestMapping("/getRoleList") + @ResponseBody + private Msg roleList(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, SysRole role) { + PageHelper.startPage(page, limit); + List list = sysRoleService.getRoles(role); + // 查询所有的角色,不分页:用于查询 + List allRoleList = sysRoleService.getRoles(role); + PageInfo pageInfo = new PageInfo(list); + return Msg.success().add("roleList", pageInfo).add("allRoleList", allRoleList); + } + + /** + * 添加角色 + */ + @ResponseBody + @RequestMapping("/addRole") + public Msg addRole(SysRole role, HttpSession session) { + return sysRoleService.addRole(role, session); + } + + /** + * 修改角色 + */ + @ResponseBody + @RequestMapping("/updateRole") + public Msg updateRoleById(SysRole role) { + return sysRoleService.updateRoleById(role); + } + + /** + * 改变角色状态 + */ + @ResponseBody + @RequestMapping("/changeRoleStatus") + public Msg changeRoleStatus(@RequestParam(value = "roleId") String roleId) { + return sysRoleService.changeRoleStatus(roleId); + } + + /** + * 根据角色id查询角色拥有的权限 + * + * @param roleId + * @return List + */ + @RequestMapping("/rolePers") + @ResponseBody + public List rolePers(Integer roleId) throws Exception { + return sysRoleService.getPerIdsByRoleId(roleId); + } + + /** + * 根据角色id授权(先删除已有的权限,再插入新的权限集合) + */ + @RequestMapping("/assignPers") + @ResponseBody + public Map assignPers(Integer roleId, String persIds) throws Exception { + Map map = new HashMap<>(); + sysRoleService.deleteRolePermissions(roleId); + sysRoleService.addRolePermissions(roleId, persIds.split(",")); + return map; + } + + /** + * 角色名称字段转换 + * + * @return + */ + @RequestMapping("/changeRoleName") + @ResponseBody + public Map changeRoleName() { + Map map = new HashMap(); + List allRoleNames = sysRoleService.getAllRoleName(null); + + for (SysRole sysRole : allRoleNames) { + map.put(sysRole.getRoleId(), sysRole.getRoleName()); + } + + return map; + } + + /** + * 获取用户拥有的角色列表 + * + * @return + */ + @ResponseBody + @RequestMapping("/getUserRoles") + public Msg userRoles(String flag) { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + // 用户角色集合 + List userRoleList = null; + // 用户所拥有的角色 + String[] roleList = user.getRole().split(","); + // 判断是否拥有超管身份标识 + boolean isSuper = false; + boolean isAllShop = false; + for (int i = 0; i < roleList.length; i++) { + // 有‘超级管理员’身份,状态改为true + if ("1".equals(roleList[i])) { + isSuper = true; + break; + } + + // 客服数据管理页面 + if (StringUtils.isNotEmpty(flag)) { + // 拥有‘所有店铺’身份,状态为ture + if ("777".equals(roleList[i])) { + isAllShop = true; + break; + } + } + } + + // 如果有‘超级管理员’身份,查询所有角色;如果没,就查询用户所拥有的且允许被创建的角色 + if (isSuper) { + userRoleList = sysRoleService.getRoles(null); + } else { + // 如果有‘所有店铺’身份,查询所有允许被创建的角色;如果没,就查询用户所拥有的且允许被创建的角色 + if (isAllShop) { + userRoleList = sysRoleService.getAllRoleName("1"); + } else { + userRoleList = sysRoleService.getRolesByUserId(user.getUserId()); + } + } + return Msg.success().add("userRoleList", userRoleList); + } +} diff --git a/src/main/java/lingtao/net/controller/SysUserController.java b/src/main/java/lingtao/net/controller/SysUserController.java new file mode 100644 index 0000000..ce1e367 --- /dev/null +++ b/src/main/java/lingtao/net/controller/SysUserController.java @@ -0,0 +1,240 @@ +package lingtao.net.controller; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; + +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.service.SysUserService; +import lingtao.net.util.PublicMethods; + +/** + * 用户 + * + */ +@Controller +public class SysUserController { + + @Autowired + private SysUserService sysUserService; + + // 用户跳转页面 + @RequestMapping("/user/index") + public void index(HttpServletRequest request, HttpServletResponse response) throws Exception { + response.sendRedirect(request.getContextPath() + "/views/system/user/user.jsp"); + } + + /** + * 根据条件查询用户 + */ + @RequestMapping("/getUserList") + @ResponseBody + private Msg userList(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, SysUser user) { + PageHelper.startPage(page, limit); + List list = sysUserService.getUsers(user); + PageInfo pageInfo = new PageInfo(list); + return Msg.success().add("userList", pageInfo); + } + + /** + * 检查用户名是否存在 + */ + @ResponseBody + @RequestMapping("/checkUsername") + public Msg checkUsername(@RequestParam(value = "username") String username) { + return sysUserService.checkUsername(username); + } + + /** + * 添加用户 + */ + @ResponseBody + @RequestMapping("/addUser") + public Msg addUser(SysUser user) { + sysUserService.addUser(user); + if (StringUtils.isNotEmpty(user.getRole())) { + addUserRoles(user); + } + return Msg.success(); + } + + /** + * 修改用户 + */ + @ResponseBody + @RequestMapping("/updateUser") + public Msg updateUserById(SysUser user) { + sysUserService.updateUserById(user); + sysUserService.deleteUserRoles(user.getUserId()); + if (StringUtils.isNotEmpty(user.getRole())) { + addUserRoles(user); + } + return Msg.success(); + } + + /** + * 删除用户 + */ + @RequestMapping("/deleteUserById") + @ResponseBody + public Msg deleteUserById(@RequestParam("id") Integer userId) { + return sysUserService.deleteUserById(userId); + } + + /** + * 根据用户编号更改角色 + * + * @param user + */ + public void addUserRoles(SysUser user) { + String[] array = user.getRole().split(","); + Integer[] ids = new Integer[array.length]; + for (int i = 0; i < array.length; i++) { + ids[i] = Integer.parseInt(array[i]); + } + Integer userId = user.getUserId(); + sysUserService.addUserRoles(userId, ids); + } + + /** + * 改变用户状态 + */ + @ResponseBody + @RequestMapping("/changeUserStatus") + public Msg changeUserStatus(@RequestParam(value = "userId") Integer userId) { + return sysUserService.changeUserStatus(userId); + } + + /** + * 改变用户系统状态 + */ + @ResponseBody + @RequestMapping("/changeSysStatus") + public Msg changeSysStatus(@RequestParam(value = "userId") Integer userId) { + return sysUserService.changeSysStatus(userId); + } + + /** + * 改变所有用户的Ip状态 + */ + @ResponseBody + @RequestMapping("/changeNeedIp") + public Msg changeNeedIp() { + return sysUserService.changeNeedIp(); + } + + /** + * 改变用户阅读日志状态 + */ + @ResponseBody + @RequestMapping("/changeReadLogStatus") + public Msg changeReadLogStatus(HttpSession session) { + SysUser user = (SysUser) session.getAttribute("USER_SESSION"); + sysUserService.changeReadLogStatus(user.getUserId()); + return Msg.success(); + } + + /** + * 获取用户信息 + * + * @param session + * @return + */ + @ResponseBody + @RequestMapping("/getUserInfo") + public Msg getUserInfo(HttpSession session) { + SysUser user = (SysUser) session.getAttribute("USER_SESSION"); + SysUser userInfo = sysUserService.getUserInfo(user.getUserId()); + if (userInfo != null) { + return Msg.success().add("userInfo", userInfo); + } + return Msg.fail(); + } + + /** + * 修改密码 + * + */ + @ResponseBody + @RequestMapping("/updatePassword") + public Msg updatePassword(SysUser user) { + return sysUserService.updatePassword(user); + } + + /** + * 补充生日 + * + */ + @ResponseBody + @RequestMapping("/addBirthDay") + public Msg addBirthDay(SysUser user) { + return sysUserService.addBirthDay(user); + } + + /** + * 改变用户生日状态 + */ + @ResponseBody + @RequestMapping("/changeIsBirthDay") + public Msg changeIsBirthDay(HttpSession session) { + SysUser user = (SysUser) session.getAttribute("USER_SESSION"); + sysUserService.changeIsBirthDay(user.getUserId()); + return Msg.success(); + } + + /** + * 从session中取出登录用户到信息 + * + * @return + */ + @ResponseBody + @RequestMapping("/loginAttribute") + public Msg loginAttribute(HttpSession session) { + SysUser user = (SysUser) session.getAttribute("USER_SESSION"); + if (user != null) { + return Msg.success().add("user", user); + } + return Msg.fail(); + } + + /** + * 客服数据 -- 根据搜索的店铺获取人员 + * + * @return + */ + @RequestMapping("/getRealnamesByShopname") + @ResponseBody + public Map getRealnamesByShopname(@RequestParam(value = "shopname") String shopname, + HttpServletRequest request) { + Map map = new HashMap(); + SysUser user = (SysUser) request.getSession().getAttribute("USER_SESSION"); + // 没有选择店铺 没有超管或者 没有店铺身份 + if (StringUtils.isEmpty(shopname) && (!new PublicMethods().isSuper() && !user.getRole().contains("777"))) { + return null; + } + List realnameList = sysUserService.getRealnamesByShopname(shopname); + + for (SysUser sysUser : realnameList) { + map.put(sysUser.getRealname(), sysUser.getRealname()); + } + + return map; + } + +} diff --git a/src/main/java/lingtao/net/controller/UpdateLogControllef.java b/src/main/java/lingtao/net/controller/UpdateLogControllef.java new file mode 100644 index 0000000..c4269ec --- /dev/null +++ b/src/main/java/lingtao/net/controller/UpdateLogControllef.java @@ -0,0 +1,67 @@ +package lingtao.net.controller; + +import com.github.pagehelper.PageHelper; +import lingtao.net.bean.Msg; +import lingtao.net.bean.UpdateLog; +import lingtao.net.service.UpdateLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpSession; +import java.text.SimpleDateFormat; +import java.util.List; + +@RestController +public class UpdateLogControllef { + + @Autowired + private UpdateLogService updateLogService; + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + @RequestMapping("/getUpdateLogs") + public Msg getUpdateLogs(@RequestParam(value = "page", defaultValue = "1") Integer page, + @RequestParam(value = "limit", defaultValue = "10") Integer limit, UpdateLog updateLog) { + PageHelper.startPage(page, limit); + List updateLogList = updateLogService.getUpdateLogs(updateLog); + for (UpdateLog log : updateLogList) { + log.setAddTimeStr(sdf.format(log.getAddTime())); + } + return Msg.success().add("list", updateLogList); + } + + /** + * 添加更新日志 + * + * @throws Exception + */ + @RequestMapping("/addLog") + public Msg addLog(UpdateLog updateLog, HttpSession session) throws Exception { + // 把字符串转为日期格式 + updateLog.setAddTime(sdf.parse(updateLog.getAddTimeStr())); + updateLogService.addLog(updateLog, session); + // 更新日志后,把所有用户的阅读更新日志状态改为未读:0 + updateLogService.changeReadLogStatus(); + return Msg.success(); + } + + /** + * 修改更新日志 + */ + @RequestMapping("/updateLog") + public Msg updateLog(UpdateLog updateLog, HttpSession session) { + updateLogService.updateLogById(updateLog, session); + return Msg.success(); + } + + /** + * 删除 + */ + @RequestMapping("/deleteLog") + public Msg deleteLog(@RequestParam("id") Integer id) { + updateLogService.deleteLogById(id); + return Msg.success(); + } +} diff --git a/src/main/java/lingtao/net/dao/ArticleMapper.java b/src/main/java/lingtao/net/dao/ArticleMapper.java new file mode 100644 index 0000000..32b1b28 --- /dev/null +++ b/src/main/java/lingtao/net/dao/ArticleMapper.java @@ -0,0 +1,38 @@ +package lingtao.net.dao; + +import java.util.List; +import lingtao.net.bean.Article; +import lingtao.net.bean.ArticleExample; +import org.apache.ibatis.annotations.Param; + +public interface ArticleMapper { + long countByExample(ArticleExample example); + + int deleteByExample(ArticleExample example); + + int deleteByPrimaryKey(Integer id); + + int insert(Article record); + + int insertSelective(Article record); + + List
selectByExampleWithBLOBs(ArticleExample example); + + List
selectByExample(ArticleExample example); + + Article selectByPrimaryKey(Integer id); + + int updateByExampleSelective(@Param("record") Article record, @Param("example") ArticleExample example); + + int updateByExampleWithBLOBs(@Param("record") Article record, @Param("example") ArticleExample example); + + int updateByExample(@Param("record") Article record, @Param("example") ArticleExample example); + + int updateByPrimaryKeySelective(Article record); + + int updateByPrimaryKeyWithBLOBs(Article record); + + int updateByPrimaryKey(Article record); + + List
getArticle(Article article); +} \ No newline at end of file diff --git a/src/main/java/lingtao/net/dao/BugMapper.java b/src/main/java/lingtao/net/dao/BugMapper.java new file mode 100644 index 0000000..b770ce0 --- /dev/null +++ b/src/main/java/lingtao/net/dao/BugMapper.java @@ -0,0 +1,12 @@ +package lingtao.net.dao; + +import java.util.List; + +import lingtao.net.bean.Bug; + +public interface BugMapper { + + List getBugs(Bug bug); + + int addBug(Bug bug); +} diff --git a/src/main/java/lingtao/net/dao/CommonDao.java b/src/main/java/lingtao/net/dao/CommonDao.java new file mode 100644 index 0000000..6d06e1c --- /dev/null +++ b/src/main/java/lingtao/net/dao/CommonDao.java @@ -0,0 +1,21 @@ +package lingtao.net.dao; + +import java.io.Serializable; +import java.util.List; + +public interface CommonDao { + public List getAll(); + + public E get(PK id); + + public void add(E user); + + public void delete(PK id); + + public void batchDelete(PK[] ids); + + public void update(E user); + + public List getList(E condition); + +} diff --git a/src/main/java/lingtao/net/dao/CustomerAwardMapper.java b/src/main/java/lingtao/net/dao/CustomerAwardMapper.java new file mode 100644 index 0000000..c7f9f3c --- /dev/null +++ b/src/main/java/lingtao/net/dao/CustomerAwardMapper.java @@ -0,0 +1,23 @@ +package lingtao.net.dao; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import lingtao.net.bean.CustomerAward; + +@Mapper +public interface CustomerAwardMapper { + + void insertForeach(List list); + + List getCustomerAward(CustomerAward customerAward); + + // 批量删除 + public void deleteBatch(int[] ints); + + @Select("select distinct shopname from tbl_customer_award") + List getArardShopname(); + +} diff --git a/src/main/java/lingtao/net/dao/CustomerDataMapper.java b/src/main/java/lingtao/net/dao/CustomerDataMapper.java new file mode 100644 index 0000000..10e2696 --- /dev/null +++ b/src/main/java/lingtao/net/dao/CustomerDataMapper.java @@ -0,0 +1,28 @@ +package lingtao.net.dao; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; + +import lingtao.net.bean.CustomerData; + +public interface CustomerDataMapper { + + List getCustomerDatas(CustomerData customerData); + + void addCustomerData(CustomerData customerData); + + void updateCustomerDataById(CustomerData customerData); + + void deleteCustomerDataById(Integer id); + + void updateCommentManager(CustomerData customerData); + + @Update("UPDATE tbl_customer_data SET isBuy = '1',completeDate = now() WHERE id = #{id} ") + void changeIsBuy(@Param("id") Integer id); + + List getProductExplain(@Param("productExplain") String productExplain, @Param("username") String username); + + +} diff --git a/src/main/java/lingtao/net/dao/CustomerTrainMapper.java b/src/main/java/lingtao/net/dao/CustomerTrainMapper.java new file mode 100644 index 0000000..cf39263 --- /dev/null +++ b/src/main/java/lingtao/net/dao/CustomerTrainMapper.java @@ -0,0 +1,43 @@ +package lingtao.net.dao; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; + +import lingtao.net.bean.CustomerTrainContent; +import lingtao.net.bean.CustomerTrainKindLabel; +import lingtao.net.bean.CustomerTrainProType; + +@Mapper +public interface CustomerTrainMapper { + + List getCustomerTrainContents(CustomerTrainContent customerTrainContent); + + void addCustomerTrainContent(CustomerTrainContent customerTrainContent); + + void updateCustomerTrainContentById(CustomerTrainContent customerTrainContent); + + @Update("update t_customer_knowledge_content set sort = #{sort} where id = #{id}") + void updateCustomerTrainContentSort(@Param("id") int id, @Param("sort") int sort); + + void deleteCustomerTrainContentById(Integer id); + + List getCustomerTrainProTypes(CustomerTrainProType customerTrainProType); + + void addCustomerTrainProType(CustomerTrainProType customerTrainProType); + + void updateCustomerTrainProTypeById(CustomerTrainProType customerTrainProType); + + void deleteCustomerTrainProTypeById(Integer id); + + List getCustomerTrainKindLabelsByProType(CustomerTrainKindLabel customerTrainKindLabel); + + void addCustomerTrainKindLabel(CustomerTrainKindLabel customerTrainKindLabel); + + void updateCustomerTrainKindLabelById(CustomerTrainKindLabel customerTrainKindLabel); + + void deleteCustomerTrainKindLabelById(Integer id); + +} diff --git a/src/main/java/lingtao/net/dao/ExpressFeeMapper.java b/src/main/java/lingtao/net/dao/ExpressFeeMapper.java new file mode 100644 index 0000000..1c0180b --- /dev/null +++ b/src/main/java/lingtao/net/dao/ExpressFeeMapper.java @@ -0,0 +1,33 @@ +package lingtao.net.dao; + +import java.util.List; + +import org.apache.ibatis.annotations.Select; + +import lingtao.net.bean.ExpressFee; + +public interface ExpressFeeMapper { + + List getExpressFees(ExpressFee expressFee); + + void addExpressFee(ExpressFee expressFee); + + void updateExpressFeeById(ExpressFee expressFee); + + void deleteExpressFeeById(Integer id); + + List getShortAnswers(); + + @Select("select * from tbl_express_fee where pro_type_value = '999' order by id") + List getAllExpressFees(ExpressFee expressFee); + + @Select("select * from tbl_express_fee where pro_type_value = '11' order by id") + List getHandBagExpressFees(ExpressFee expressFee); + + @Select("select * from tbl_express_fee where pro_type_value = '6,7,8' order by id") + List getTaoExpressFees(ExpressFee expressFee); + + @Select("select * from tbl_express_fee where pro_type_value = '0' order by id") + List getOtherExpressFees(ExpressFee expressFee); + +} diff --git a/src/main/java/lingtao/net/dao/Finance2Mapper.java b/src/main/java/lingtao/net/dao/Finance2Mapper.java new file mode 100644 index 0000000..c3e0b1e --- /dev/null +++ b/src/main/java/lingtao/net/dao/Finance2Mapper.java @@ -0,0 +1,26 @@ +package lingtao.net.dao; + +import java.util.List; + +import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import lingtao.net.bean.Finance; + +@Mapper +public interface Finance2Mapper { + + List getFinance(Finance finance); + + void insertForeach(List list); + + // 查询数据是否存在,避免重复上传 + String checkAccountNumber(@Param("orderNumber") String orderNumber); + + List getAllFilename(@Param("creator") String creator); + + @Delete("delete from tbl_sys_finance where filename = #{filename} and creator = #{realname}") + void deleteDataByFilename(@Param("filename") String filename, @Param("realname") String realname); + +} diff --git a/src/main/java/lingtao/net/dao/Finance3Mapper.java b/src/main/java/lingtao/net/dao/Finance3Mapper.java new file mode 100644 index 0000000..173a12b --- /dev/null +++ b/src/main/java/lingtao/net/dao/Finance3Mapper.java @@ -0,0 +1,52 @@ +package lingtao.net.dao; + +import java.util.List; + +import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import lingtao.net.bean.Finance; + +@Mapper +public interface Finance3Mapper { + + List getFinance(Finance finance); + List getFinance4(Finance finance); + List getFinance5(Finance finance); + + void insertForeach(List list); + void insertForeach4(List list); + void insertForeach5(List list); + + // 查询数据是否存在,避免重复上传 + String checkAccountNumber(@Param("orderNumber") String orderNumber); + String checkAccountNumber4(@Param("orderNumber") String orderNumber); + String checkAccountNumber5(@Param("orderNumber") String orderNumber); + + List getAllFilename(@Param("creator") String creator); + List getAllFilename4(@Param("creator") String creator); + List getAllFilename5(@Param("creator") String creator); + + @Delete("delete from tbl_sys_finance3 where filename = #{filename} and creator = #{realname}") + void deleteDataByFilename(@Param("filename") String filename, @Param("realname") String realname); + @Delete("delete from tbl_sys_finance4 where filename = #{filename} and creator = #{realname}") + void deleteDataByFilename4(@Param("filename") String filename, @Param("realname") String realname); + @Delete("delete from tbl_sys_finance5 where filename = #{filename} and creator = #{realname}") + void deleteDataByFilename5(@Param("filename") String filename, @Param("realname") String realname); + + List getFinance6(Finance finance); + void insertForeach6(List list); + String checkAccountNumber6(@Param("orderNumber") String orderNumber); + List getAllFilename6(@Param("creator") String creator); + @Delete("delete from tbl_sys_finance6 where filename = #{filename} and creator = #{realname}") + void deleteDataByFilename6(@Param("filename") String filename, @Param("realname") String realname); + + List getFinance7(Finance finance); + void insertForeach7(List list); + String checkAccountNumber7(@Param("orderNumber") String orderNumber); + List getAllFilename7(@Param("creator") String creator); + @Delete("delete from tbl_sys_finance7 where filename = #{filename} and creator = #{realname}") + void deleteDataByFilename7(@Param("filename") String filename, @Param("realname") String realname); + +} diff --git a/src/main/java/lingtao/net/dao/FinanceDifferenceMapper.java b/src/main/java/lingtao/net/dao/FinanceDifferenceMapper.java new file mode 100644 index 0000000..678786f --- /dev/null +++ b/src/main/java/lingtao/net/dao/FinanceDifferenceMapper.java @@ -0,0 +1,17 @@ +package lingtao.net.dao; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; + +import lingtao.net.bean.FinanceDifference; + +public interface FinanceDifferenceMapper { + + List get(FinanceDifference difference); + + void insertForeach(List list); + + List getAllFilename(@Param("creator")String creator); + +} diff --git a/src/main/java/lingtao/net/dao/FinanceExtractMapper.java b/src/main/java/lingtao/net/dao/FinanceExtractMapper.java new file mode 100644 index 0000000..f112626 --- /dev/null +++ b/src/main/java/lingtao/net/dao/FinanceExtractMapper.java @@ -0,0 +1,26 @@ +package lingtao.net.dao; + +import java.util.List; + +import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import lingtao.net.bean.FinanceExtract; + +@Mapper +public interface FinanceExtractMapper { + + List getFinanceExtract(FinanceExtract financeExtract); + + void insertForeach(List list); + + // 查询数据是否存在,避免重复上传 + String checkAccountNumber(@Param("orderNumber") String orderNumber); + + List getFilename_extract(@Param("creator") String creator); + + @Delete("delete from tbl_sys_finance_extract where filename = #{filename} and creator = #{realname}") + void deleteDataByFilename(@Param("filename") String filename, @Param("realname") String realname); + +} diff --git a/src/main/java/lingtao/net/dao/FinanceMapper.java b/src/main/java/lingtao/net/dao/FinanceMapper.java new file mode 100644 index 0000000..64793ff --- /dev/null +++ b/src/main/java/lingtao/net/dao/FinanceMapper.java @@ -0,0 +1,26 @@ +package lingtao.net.dao; + +import java.util.List; + +import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import lingtao.net.bean.Finance; + +@Mapper +public interface FinanceMapper { + + List getFinance(Finance finance); + + void insertForeach(List list); + + // 查询数据是否存在,避免重复上传 + String checkAccountNumber(@Param("orderNumber") String orderNumber); + + List getAllFilename(@Param("creator") String creator); + + @Delete("delete from tbl_sys_finance where filename = #{filename} and creator = #{realname}") + void deleteDataByFilename(@Param("filename") String filename, @Param("realname") String realname); + +} diff --git a/src/main/java/lingtao/net/dao/InformationMapper.java b/src/main/java/lingtao/net/dao/InformationMapper.java new file mode 100644 index 0000000..a7e9f47 --- /dev/null +++ b/src/main/java/lingtao/net/dao/InformationMapper.java @@ -0,0 +1,19 @@ +package lingtao.net.dao; + +import java.util.List; + +import lingtao.net.bean.Information; + +public interface InformationMapper { + + List getInformations(Information information); + + void addInformation(Information information); + + void updateInformationById(Information information); + + void deleteInformationById(Integer id); + + List getShortAnswers(); + +} diff --git a/src/main/java/lingtao/net/dao/LoginIpMapper.java b/src/main/java/lingtao/net/dao/LoginIpMapper.java new file mode 100644 index 0000000..6b22bda --- /dev/null +++ b/src/main/java/lingtao/net/dao/LoginIpMapper.java @@ -0,0 +1,27 @@ +package lingtao.net.dao; + +import java.util.List; + +import org.apache.ibatis.annotations.Select; + +import lingtao.net.bean.LoginIp; + +public interface LoginIpMapper { + + public List getLoginIpList(LoginIp loginIp); + + @Select("select agreeIp from tbl_login_ip") + public List getAllIp(); + + public void addIp(LoginIp loginIp); + public void updateIp(LoginIp loginIp); + + public int deleteIpById(Integer id); + + // 批量删除 + public void deleteBatch(int[] ints); + + @Select("select * from tbl_login_ip where agreeIp = #{agreeIp}") + public LoginIp checkIP(String agreeIp); + +} diff --git a/src/main/java/lingtao/net/dao/LoginLogMapper.java b/src/main/java/lingtao/net/dao/LoginLogMapper.java new file mode 100644 index 0000000..5b9b7f3 --- /dev/null +++ b/src/main/java/lingtao/net/dao/LoginLogMapper.java @@ -0,0 +1,16 @@ +package lingtao.net.dao; + +import java.util.List; + +import org.apache.ibatis.annotations.Insert; + +import lingtao.net.bean.LoginLog; + +public interface LoginLogMapper { + + List getLoginLogList(LoginLog loginLog); + + @Insert("insert into tbl_login_log set remark = #{remark},status = #{status}") + int addLog(LoginLog loginLog); + +} diff --git a/src/main/java/lingtao/net/dao/MyFileMapper.java b/src/main/java/lingtao/net/dao/MyFileMapper.java new file mode 100644 index 0000000..f48621c --- /dev/null +++ b/src/main/java/lingtao/net/dao/MyFileMapper.java @@ -0,0 +1,32 @@ +package lingtao.net.dao; + +import java.util.List; +import lingtao.net.bean.MyFile; +import lingtao.net.bean.MyFileExample; +import org.apache.ibatis.annotations.Param; + +public interface MyFileMapper { + long countByExample(MyFileExample example); + + int deleteByExample(MyFileExample example); + + int deleteByPrimaryKey(Integer fileId); + + int insert(MyFile record); + + int insertSelective(MyFile record); + + List selectByExample(MyFileExample example); + + MyFile selectByPrimaryKey(Integer fileId); + + int updateByExampleSelective(@Param("record") MyFile record, @Param("example") MyFileExample example); + + int updateByExample(@Param("record") MyFile record, @Param("example") MyFileExample example); + + int updateByPrimaryKeySelective(MyFile record); + + int updateByPrimaryKey(MyFile record); + + List getFileList(MyFile myFile); +} \ No newline at end of file diff --git a/src/main/java/lingtao/net/dao/ProductImgMapper.java b/src/main/java/lingtao/net/dao/ProductImgMapper.java new file mode 100644 index 0000000..faffb71 --- /dev/null +++ b/src/main/java/lingtao/net/dao/ProductImgMapper.java @@ -0,0 +1,34 @@ +package lingtao.net.dao; + +import lingtao.net.bean.ProductImg; +import lingtao.net.bean.SysDictProduct; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +public interface ProductImgMapper { + + List getProKindList(ProductImg productImg); + + SysDictProduct getLabel(ProductImg productImg); + + int addImgUrl(ProductImg productImg); + + int updateImgUploadRemark(ProductImg productImg); + + List findAllPro(); + + List getKindsByPro(@Param("proTypeValue") String proTypeValue); + + List getKind2sByKind(@Param("proTypeValue") String proTypeValue, + @Param("kindValue") String kindValue); + + List getImgsByProKind(@Param("proTypeValue") String proTypeValue, @Param("kindValue") String kindValue, + @Param("kind2Value") String kind2Value, @Param("craftValue") String craftValue); + + // 获取视频地址 + @Select("select img_url from product_img where pro_type_value = '999'") + List getVideos(); + +} \ No newline at end of file diff --git a/src/main/java/lingtao/net/dao/ProductMapper.java b/src/main/java/lingtao/net/dao/ProductMapper.java new file mode 100644 index 0000000..c6c87bf --- /dev/null +++ b/src/main/java/lingtao/net/dao/ProductMapper.java @@ -0,0 +1,60 @@ +package lingtao.net.dao; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; + +import lingtao.net.bean.Product; +import lingtao.net.bean.SysDictSearchPro; + +public interface ProductMapper { + + // 价格列表 + List getProductList(Product product); + + // 更新价格 + int updatePriceById(Product product); + + // 得到所有的产品种类 + List findAllPro(); + + // 根据产品种类得到旗下的产品品种 + List getKindsByPro(@Param("proTypeValue") String proTypeValue); + + // 根据关键字搜索产品菜单 + List searchPro(@Param("likeProTypeLabel") String likeProTypeLabel); + + // 价格导入 + void insertSelective(Product vo); + + // 根据种类和品种得到单价,再根据尺寸—数量计算价格 + List getThanPrice(Product product); + + // 优惠券5位以上1万以内价格 + List couponThanPrice(Product dto); + + // 优惠券位以上1万以内价格 + List couponThanPrices(Product dto); + + // 优惠券5位以上1万以上价格 + List couponThousandThanPrice(Product dto); + + // 吊旗/宣传单5位数以上价格计算(同 couponThanPrice) + List diaoqiThanPrice(Product dto); + + // 吊旗比优惠券价格贵5/10块钱一位--1万以内 + List hangingFlagsThanPrice(Product dto); + + // 吊旗比优惠券价格贵10--1万以上的价格 + List hangingFlagsThousandThanPrice(Product dto); + + // 便签本联单/稿纸超过1千数量的价格 + List notePaperPrice(Product dto); + + // 优惠券、吊旗、腰封;便签本彩胶纸/红头文件;扇子;超过1万数量的价格 + List thanThousandPrice(Product dto); + + //慕斯垫价格计算 + List getMsdPrice(Product dto); + +} \ No newline at end of file diff --git a/src/main/java/lingtao/net/dao/QuestionMapper.java b/src/main/java/lingtao/net/dao/QuestionMapper.java new file mode 100644 index 0000000..81b757f --- /dev/null +++ b/src/main/java/lingtao/net/dao/QuestionMapper.java @@ -0,0 +1,25 @@ +package lingtao.net.dao; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; + +import lingtao.net.bean.Question; + +public interface QuestionMapper { + + List questions(Question question); + + int addQuestion(Question question); + + int updateQuestionById(Question question); + + int deleteQuestionById(@Param("id") Integer id); + + List getSingleQuestions(); + + List getMultipleQuestions(); + + List getFillQuestions(); + +} diff --git a/src/main/java/lingtao/net/dao/QuoteDataMapper.java b/src/main/java/lingtao/net/dao/QuoteDataMapper.java new file mode 100644 index 0000000..c2e4683 --- /dev/null +++ b/src/main/java/lingtao/net/dao/QuoteDataMapper.java @@ -0,0 +1,42 @@ +package lingtao.net.dao; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import lingtao.net.bean.QuoteData; + +public interface QuoteDataMapper { + + List quoteDatas(QuoteData quoteData); + + void updateById(QuoteData quoteData); + + void changeIsBuyToDay(@Param("id") Integer id); + + void changeIsBuy(@Param("id") Integer id); + + @Update("update tbl_quote_data set shopname = #{shopname},isSelect = 1,selectDate = now() where id = #{id}") + void updateShopnameSelect(@Param("shopname") String shopname, @Param("id") Integer id); + + @Update("update tbl_quote_data set orderNumber = #{orderNumber} where id = #{id}") + void addOrderNumber(@Param("id") Integer id, @Param("orderNumber") String orderNumber); + + void addQuoteData(QuoteData quoteData); + + List getQuoteDataByMinutes(String username); + + List getShopName(QuoteData quoteData); + + @Select("select distinct proTypeLabel from tbl_quote_data WHERE proTypeLabel IS NOT NULL") + List getProType(); + + List getRealnames(@Param("shopname") String shopname); + + QuoteData getEchartList(QuoteData quoteData); + + QuoteData getKefuEchartList(QuoteData quoteData);//客服大单流失列表 + +} diff --git a/src/main/java/lingtao/net/dao/QuoteLogMapper.java b/src/main/java/lingtao/net/dao/QuoteLogMapper.java new file mode 100644 index 0000000..0c66d2a --- /dev/null +++ b/src/main/java/lingtao/net/dao/QuoteLogMapper.java @@ -0,0 +1,12 @@ +package lingtao.net.dao; + +import java.util.List; + +import lingtao.net.bean.QuoteLog; + +public interface QuoteLogMapper { + + List quoteLogs(QuoteLog quoteLog); + + void insertSelective(QuoteLog log); +} diff --git a/src/main/java/lingtao/net/dao/SysDictSearchProMapper.java b/src/main/java/lingtao/net/dao/SysDictSearchProMapper.java new file mode 100644 index 0000000..10cc68a --- /dev/null +++ b/src/main/java/lingtao/net/dao/SysDictSearchProMapper.java @@ -0,0 +1,19 @@ +package lingtao.net.dao; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; + +import lingtao.net.bean.SysDictSearchPro; + +public interface SysDictSearchProMapper { + + List keyWordsList(SysDictSearchPro searchPro); + + int changeKeyWordStatus(@Param("id") Integer id); + + int insertSelective(SysDictSearchPro searchPro); + + int updateKeyWordById(SysDictSearchPro searchPro); + +} diff --git a/src/main/java/lingtao/net/dao/SysPermissionMapper.java b/src/main/java/lingtao/net/dao/SysPermissionMapper.java new file mode 100644 index 0000000..140c5e2 --- /dev/null +++ b/src/main/java/lingtao/net/dao/SysPermissionMapper.java @@ -0,0 +1,15 @@ +package lingtao.net.dao; + +import java.util.List; + +import lingtao.net.bean.SysPermission; + +public interface SysPermissionMapper { + + List getAll(); + + List getParentPers(); + + List getPersByUserId(Integer integer); + +} diff --git a/src/main/java/lingtao/net/dao/SysRoleMapper.java b/src/main/java/lingtao/net/dao/SysRoleMapper.java new file mode 100644 index 0000000..39db371 --- /dev/null +++ b/src/main/java/lingtao/net/dao/SysRoleMapper.java @@ -0,0 +1,37 @@ +package lingtao.net.dao; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import lingtao.net.bean.SysRole; + +public interface SysRoleMapper { + + int insertSelective(SysRole role); + + List getRoles(SysRole role); + + int updateByPrimaryKeySelective(SysRole role); + + int changeRoleStatus(@Param("roleId") String roleId); + + // 根据角色编号查询对应的权限编号集合 + public List getPerIdsByRoleId(@Param("roleId") Integer roleId); + + public void deleteRolePermissions(Integer roleId); + + public void addRolePermissions(@Param("roleId") Integer roleId, @Param("perIds") String[] perIds); + + List getAllRoleName(@Param("isRegist") String isRegist); + + // 查询出用户所拥有的且允许被创建的角色 + List getRolesByUserId(@Param("userId") Integer userId); + + @Select("select roleId from tbl_sys_role where isRegist = '0'") + List getRoleIdsWhenIsNotRegist(); + + @Select("select roleId from tbl_sys_role where isSelf = '0'") + List getRoleIdsWhenIsNotLingTao(); +} diff --git a/src/main/java/lingtao/net/dao/SysUserMapper.java b/src/main/java/lingtao/net/dao/SysUserMapper.java new file mode 100644 index 0000000..bdda96c --- /dev/null +++ b/src/main/java/lingtao/net/dao/SysUserMapper.java @@ -0,0 +1,73 @@ +package lingtao.net.dao; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import lingtao.net.bean.SysUser; + +public interface SysUserMapper { + int deleteByPrimaryKey(Integer userId); + + int insertSelective(SysUser record); + + int updateByPrimaryKeySelective(SysUser record); + + @Select("select * from tbl_sys_user where username = #{username}") + SysUser getUserByUsername(@Param("username") String username); + + List getUsers(SysUser user); + + int changeUserStatus(@Param("userId") Integer userId); + + public void addUserRoles(@Param("userId") Integer userId, @Param("roleIds") Integer[] roleIds); + + void deleteUserRoles(@Param("userId") Integer userId); + + int addBirthDay(SysUser user); + + int changeSysStatus(@Param("userId") Integer userId); + + int changeNeedIp(); + + @Update("update tbl_sys_user set sysStatus = 1 where sysStatus = 0 and userId = #{userId}") + int videoOverToChangeSysStatus(@Param("userId") Integer userId); + + @Update("update tbl_sys_user set sysStatus = 2 where userId = #{userId}") + int examOverToChangeSysStatus(@Param("userId") Integer userId); + + @Update("update tbl_sys_user set readLogStatus = 1 where userId = #{userId}") + int changeReadLogStatus(Integer userId); + + @Select("select * from tbl_sys_user where userId = #{userId}") + SysUser getUserInfo(Integer userId); + + /** + * 如果当天生日,更改状态 + * + * @param isBirthDay + * @param userId + * @return + */ + @Update("update tbl_sys_user set isBirthDay = #{isBirthDay} where userId = #{userId}") + int setIsBirthDay(@Param("isBirthDay") Integer isBirthDay, @Param("userId") Integer userId); + + /** + * 改变生日状态 + * + * @param userId + */ + @Update("update tbl_sys_user set isBirthDay = 0 where userId = #{userId}") + void changeIsBirthDay(Integer userId); + + /** + * 客服数据 -- 根据搜索的店铺获取人员 + * + * @param shopname + */ + @Select("select * from tbl_sys_user where role like '%${shopname}%'") + List getRealnamesByShopname(@Param("shopname") String shopname); + +} \ No newline at end of file diff --git a/src/main/java/lingtao/net/dao/UpdateLogMapper.java b/src/main/java/lingtao/net/dao/UpdateLogMapper.java new file mode 100644 index 0000000..517506a --- /dev/null +++ b/src/main/java/lingtao/net/dao/UpdateLogMapper.java @@ -0,0 +1,22 @@ +package lingtao.net.dao; + +import java.util.List; + +import org.apache.ibatis.annotations.Update; + +import lingtao.net.bean.UpdateLog; + +public interface UpdateLogMapper { + + List getUpdateLogs(UpdateLog updateLog); + + int addLog(UpdateLog updateLog); + + int deleteLogById(Integer id); + + int updateLogById(UpdateLog updateLog); + + @Update("UPDATE tbl_sys_user SET readLogStatus = 0") + void changeReadLogStatus(); + +} diff --git a/src/main/java/lingtao/net/entity/ClothingTag.java b/src/main/java/lingtao/net/entity/ClothingTag.java new file mode 100644 index 0000000..dd6a5c1 --- /dev/null +++ b/src/main/java/lingtao/net/entity/ClothingTag.java @@ -0,0 +1,59 @@ +package lingtao.net.entity; + +import lingtao.net.enums.ClothingTagMater; +import lingtao.net.enums.ClothingTagTechEnum; +import lingtao.net.enums.ProductMembrane; +import lingtao.net.enums.ProductSlice; +import lombok.Data; + +import java.util.List; + +@Data +public class ClothingTag { + + private Long id; + + /** + * 材质 + */ + private ClothingTagMater material; + + /** + * 工艺 + */ + private ClothingTagTechEnum technique; + + /** + * 覆膜 + */ + private ProductMembrane productMembrane; + /** + * 切割 + */ + private ProductSlice productSlice; + + /** + * 是否加棉绳 + */ + private boolean isRope; + + /** + * 绳子公式 + */ + private String ropeFormula; + + /** + * 计算方法 + */ + private List compute; + + /** + * 是否多面 + */ + private boolean isMulti; + + /** + * 计算公式 + */ + private String formula; +} diff --git a/src/main/java/lingtao/net/entity/SelfAdhesiveSticker.java b/src/main/java/lingtao/net/entity/SelfAdhesiveSticker.java new file mode 100644 index 0000000..a4b511f --- /dev/null +++ b/src/main/java/lingtao/net/entity/SelfAdhesiveSticker.java @@ -0,0 +1,4 @@ +package lingtao.net.entity; + +public class SelfAdhesiveSticker { +} diff --git a/src/main/java/lingtao/net/enums/ClothingTagMater.java b/src/main/java/lingtao/net/enums/ClothingTagMater.java new file mode 100644 index 0000000..f81fecd --- /dev/null +++ b/src/main/java/lingtao/net/enums/ClothingTagMater.java @@ -0,0 +1,23 @@ +package lingtao.net.enums; + +public enum ClothingTagMater { + g350(0, "350克铜版纸"), + g600(1, "600克铜版纸"); + + ClothingTagMater(Integer code, String value) { + this.code = code; + this.value = value; + } + + private Integer code; + + private String value; + + public Integer getCode() { + return code; + } + + public String getValue() { + return value; + } +} diff --git a/src/main/java/lingtao/net/enums/ClothingTagTechEnum.java b/src/main/java/lingtao/net/enums/ClothingTagTechEnum.java new file mode 100644 index 0000000..dd71e9f --- /dev/null +++ b/src/main/java/lingtao/net/enums/ClothingTagTechEnum.java @@ -0,0 +1,28 @@ +package lingtao.net.enums; + +public enum ClothingTagTechEnum { + + none(0, "无"), + hot_gold_on_one_side(1, "单面烫金"), + single_concave_and_convex(2, "凹凸"), + hot_gold_on_two_side(3, "双面烫金"), + hot_gold_concave_and_convex_on_one_side(4, "单面烫金+凹凸"), + ; + + ClothingTagTechEnum(Integer code, String value) { + this.code = code; + this.value = value; + } + + private Integer code; + + private String value; + + public Integer getCode() { + return code; + } + + public String getValue() { + return value; + } +} diff --git a/src/main/java/lingtao/net/enums/ProductEnum.java b/src/main/java/lingtao/net/enums/ProductEnum.java new file mode 100644 index 0000000..4330a97 --- /dev/null +++ b/src/main/java/lingtao/net/enums/ProductEnum.java @@ -0,0 +1,25 @@ +package lingtao.net.enums; + +import lingtao.net.entity.SelfAdhesiveSticker; + +public enum ProductEnum { + clothing_Tag(0, "服装吊牌"), + self_adhesive_sticker(1, "不干胶"); + + ProductEnum(Integer code, String value) { + this.code = code; + this.value = value; + } + + private Integer code; + + private String value; + + public Integer getCode() { + return code; + } + + public String getValue() { + return value; + } +} diff --git a/src/main/java/lingtao/net/enums/ProductMembrane.java b/src/main/java/lingtao/net/enums/ProductMembrane.java new file mode 100644 index 0000000..542ca38 --- /dev/null +++ b/src/main/java/lingtao/net/enums/ProductMembrane.java @@ -0,0 +1,24 @@ +package lingtao.net.enums; + +public enum ProductMembrane { + + none(0, "不覆膜"), + double_matte_film(1, "双面覆哑膜"); + + ProductMembrane(Integer code, String value) { + this.code = code; + this.value = value; + } + + private Integer code; + + private String value; + + public Integer getCode() { + return code; + } + + public String getValue() { + return value; + } +} diff --git a/src/main/java/lingtao/net/enums/ProductSlice.java b/src/main/java/lingtao/net/enums/ProductSlice.java new file mode 100644 index 0000000..e679468 --- /dev/null +++ b/src/main/java/lingtao/net/enums/ProductSlice.java @@ -0,0 +1,24 @@ +package lingtao.net.enums; + +public enum ProductSlice { + none(0, "不操作"), + right_angle_punch(1, "直角打孔"), + profiled_die_cutting(2, "异形模切"); + + ProductSlice(Integer code, String value) { + this.code = code; + this.value = value; + } + + private Integer code; + + private String value; + + public Integer getCode() { + return code; + } + + public String getValue() { + return value; + } +} diff --git a/src/main/java/lingtao/net/gui/LoginGui.java b/src/main/java/lingtao/net/gui/LoginGui.java new file mode 100644 index 0000000..16dce8e --- /dev/null +++ b/src/main/java/lingtao/net/gui/LoginGui.java @@ -0,0 +1,106 @@ +//package lingtao.net.gui; +// +//import java.awt.EventQueue; +//import java.awt.event.ActionEvent; +//import java.awt.event.ActionListener; +//import java.util.List; +// +//import javax.swing.JButton; +//import javax.swing.JFrame; +//import javax.swing.JLabel; +//import javax.swing.JPanel; +//import javax.swing.JTextField; +//import javax.swing.border.EmptyBorder; +// +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.stereotype.Controller; +// +//import lingtao.net.bean.Product; +//import lingtao.net.service.ProductService; +// +// +//@Controller +//public class LoginGui extends JFrame { +// +// private JPanel contentPane; +// private JTextField username; +// private JTextField password; +// private JLabel textField__1; +// private JLabel textField__2; +// private JButton btn_submit; +// @Autowired +// private ProductService priceService; +// +// /** +// * Launch the application. +// */ +// public static void main(String[] args) { +// EventQueue.invokeLater(new Runnable() { +// public void run() { +// try { +// LoginGui frame = new LoginGui(); +// frame.setVisible(true); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// }); +// } +// +// /** +// * Create the frame. +// */ +// public LoginGui() { +// init(); +// listener(); +// } +// +// //登录监听 +// public void listener() { +// btn_submit.addActionListener(new ActionListener() { +// public void actionPerformed(ActionEvent e) { +// username.getText(); +// password.getText(); +// List allPro = priceService.findAllPro(); +// System.out.println(allPro); +// } +// }); +// +// } +// +// private void init() { +// setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); +// setBounds(100, 100, 450, 300); +// contentPane = new JPanel(); +// contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); +// setContentPane(contentPane); +// contentPane.setLayout(null); +// +// JPanel panel = new JPanel(); +// panel.setBounds(0, 0, 434, 262); +// contentPane.add(panel); +// panel.setLayout(null); +// +// textField__1 = new JLabel("用户名:"); +// textField__1.setBounds(99, 54, 54, 15); +// panel.add(textField__1); +// +// textField__2 = new JLabel("密码:"); +// textField__2.setBounds(99, 110, 43, 15); +// panel.add(textField__2); +// +// username = new JTextField(); +// username.setBounds(152, 54, 175, 21); +// panel.add(username); +// username.setColumns(10); +// +// password = new JTextField(); +// password.setColumns(10); +// password.setBounds(152, 110, 175, 21); +// panel.add(password); +// +// btn_submit = new JButton("登录"); +// btn_submit.setBounds(158, 160, 130, 37); +// panel.add(btn_submit); +// } +//} diff --git a/src/main/java/lingtao/net/gui/PriceGui.java b/src/main/java/lingtao/net/gui/PriceGui.java new file mode 100644 index 0000000..d0d5265 --- /dev/null +++ b/src/main/java/lingtao/net/gui/PriceGui.java @@ -0,0 +1,98 @@ +//package lingtao.net.gui; +// +//import java.awt.BorderLayout; +//import java.awt.EventQueue; +// +//import javax.swing.JFrame; +//import javax.swing.JPanel; +//import javax.swing.border.EmptyBorder; +//import javax.swing.JRadioButton; +//import javax.swing.JComboBox; +//import javax.swing.DefaultComboBoxModel; +// +//public class PriceGui extends JFrame { +// +// private JPanel contentPane; +// +// /** +// * Launch the application. +// */ +// public static void main(String[] args) { +// EventQueue.invokeLater(new Runnable() { +// public void run() { +// try { +// PriceGui frame = new PriceGui(); +// frame.setVisible(true); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// }); +// } +// +// /** +// * Create the frame. +// */ +// public PriceGui() { +// setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); +// setBounds(100, 100, 861, 558); +// contentPane = new JPanel(); +// contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); +// setContentPane(contentPane); +// contentPane.setLayout(null); +// +// JPanel panel = new JPanel(); +// panel.setBounds(0, 0, 845, 520); +// contentPane.add(panel); +// panel.setLayout(null); +// +// JRadioButton rdbtnNewRadioButton = new JRadioButton("不干胶"); +// rdbtnNewRadioButton.setBounds(0, 26, 89, 23); +// panel.add(rdbtnNewRadioButton); +// +// JRadioButton 特殊不干胶 = new JRadioButton("特殊不干胶"); +// 特殊不干胶.setBounds(0, 67, 111, 23); +// panel.add(特殊不干胶); +// +// JComboBox comboBox = new JComboBox(); +// comboBox.setModel(new DefaultComboBoxModel(new String[] {"", "A级铜板不干胶(加胶加粘)", "哑膜A级铜版纸不干胶(加胶加粘)", "pvc透明(加胶加粘)", "复古牛皮纸贴纸(加胶加粘)"})); +// comboBox.setBounds(119, 27, 203, 21); +// panel.add(comboBox); +// +// JRadioButton rdbtnNewRadioButton_2 = new JRadioButton("卷装标签"); +// rdbtnNewRadioButton_2.setBounds(0, 104, 106, 23); +// panel.add(rdbtnNewRadioButton_2); +// +// JRadioButton rdbtnNewRadioButton_1 = new JRadioButton("插卡"); +// rdbtnNewRadioButton_1.setBounds(0, 144, 106, 34); +// panel.add(rdbtnNewRadioButton_1); +// +// JRadioButton rdbtnNewRadioButton_3 = new JRadioButton("优惠券"); +// rdbtnNewRadioButton_3.setBounds(0, 180, 111, 23); +// panel.add(rdbtnNewRadioButton_3); +// +// JRadioButton rdbtnNewRadioButton_3_1 = new JRadioButton("腰封"); +// rdbtnNewRadioButton_3_1.setBounds(0, 218, 106, 23); +// panel.add(rdbtnNewRadioButton_3_1); +// +// JComboBox comboBox_1 = new JComboBox(); +// comboBox_1.setBounds(119, 68, 203, 21); +// panel.add(comboBox_1); +// +// JComboBox comboBox_2 = new JComboBox(); +// comboBox_2.setBounds(119, 105, 203, 21); +// panel.add(comboBox_2); +// +// JComboBox comboBox_3 = new JComboBox(); +// comboBox_3.setBounds(119, 145, 203, 21); +// panel.add(comboBox_3); +// +// JComboBox comboBox_4 = new JComboBox(); +// comboBox_4.setBounds(119, 181, 203, 21); +// panel.add(comboBox_4); +// +// JComboBox comboBox_5 = new JComboBox(); +// comboBox_5.setBounds(119, 219, 203, 21); +// panel.add(comboBox_5); +// } +//} diff --git a/src/main/java/lingtao/net/handler/MapToVarcharTypeHandler.java b/src/main/java/lingtao/net/handler/MapToVarcharTypeHandler.java new file mode 100644 index 0000000..d06b170 --- /dev/null +++ b/src/main/java/lingtao/net/handler/MapToVarcharTypeHandler.java @@ -0,0 +1,46 @@ +package lingtao.net.handler; + +import com.alibaba.fastjson.JSON; +import org.apache.commons.lang.StringUtils; +import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.TypeHandler; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Map; + +public class MapToVarcharTypeHandler implements TypeHandler> { + @Override + public void setParameter(PreparedStatement ps, int i, Map parameter, JdbcType jdbcType) throws SQLException { + ps.setString(i, JSON.toJSONString(parameter)); + } + + @Override + public Map getResult(ResultSet rs, String columnName) throws SQLException { + String resultString = rs.getString(columnName); + if (StringUtils.isEmpty(resultString)) { + return JSON.parseObject(resultString, Map.class); + } + return null; + } + + @Override + public Map getResult(ResultSet rs, int columnIndex) throws SQLException { + String resultString = rs.getString(columnIndex); + if (StringUtils.isEmpty(resultString)) { + return JSON.parseObject(resultString, Map.class); + } + return null; + } + + @Override + public Map getResult(CallableStatement cs, int columnIndex) throws SQLException { + String resultString = cs.getString(columnIndex); + if (StringUtils.isEmpty(resultString)) { + return JSON.parseObject(resultString, Map.class); + } + return null; + } +} diff --git a/src/main/java/lingtao/net/mapper/ClothingTagMapper.java b/src/main/java/lingtao/net/mapper/ClothingTagMapper.java new file mode 100644 index 0000000..0b9c9ca --- /dev/null +++ b/src/main/java/lingtao/net/mapper/ClothingTagMapper.java @@ -0,0 +1,8 @@ +package lingtao.net.mapper; + +import lingtao.net.entity.ClothingTag; + +public interface ClothingTagMapper { + + void insert(ClothingTag clothingTag); +} diff --git a/src/main/java/lingtao/net/realm/ShiroRealm.java b/src/main/java/lingtao/net/realm/ShiroRealm.java new file mode 100644 index 0000000..02d5cab --- /dev/null +++ b/src/main/java/lingtao/net/realm/ShiroRealm.java @@ -0,0 +1,187 @@ +package lingtao.net.realm; + +import com.github.pagehelper.util.StringUtil; +import lingtao.net.bean.LoginLog; +import lingtao.net.bean.SysPermission; +import lingtao.net.bean.SysUser; +import lingtao.net.dao.LoginIpMapper; +import lingtao.net.dao.LoginLogMapper; +import lingtao.net.dao.SysPermissionMapper; +import lingtao.net.dao.SysUserMapper; +import lingtao.net.util.DateFormatUtils; +import lingtao.net.util.LunarCalendarUtil; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.*; +import org.apache.shiro.authz.AuthorizationInfo; +import org.apache.shiro.realm.AuthorizingRealm; +import org.apache.shiro.session.Session; +import org.apache.shiro.session.mgt.eis.SessionDAO; +import org.apache.shiro.subject.PrincipalCollection; +import org.apache.shiro.subject.support.DefaultSubjectContext; +import org.apache.shiro.util.SimpleByteSource; +import org.springframework.beans.factory.annotation.Autowired; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Collection; +import java.util.Date; +import java.util.List; + +public class ShiroRealm extends AuthorizingRealm { + @Autowired + private SysUserMapper userMapper; + @Autowired + private SysPermissionMapper sysPermissionMapper; + @Autowired + private LoginIpMapper loginIpMapper; + @Autowired + private LoginLogMapper loginLogMapper; + @Autowired + private SessionDAO sessionDAO; + // 日期格式化 + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + // 授权 + @Override + protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) { + // TODO Auto-generated method stub + return null; + } + + private boolean ipIsInWildCardNoCheck(String ipWildCard, String ip) { + String[] s1 = ipWildCard.split("\\."); + String[] s2 = ip.split("\\."); + boolean isMatchedSeg = true; + for (int i = 0; i < s1.length && !s1[i].equals("*"); i++) { + if (!s1[i].equals(s2[i])) { + isMatchedSeg = false; + break; + } + } + return isMatchedSeg; + } + + private boolean isPassIp(String loginIp) { + // 获取所有的授权IP + List ipList = loginIpMapper.getAllIp(); + if(loginIp == "127.0.0.1"){ + return true; + } + for (String agreeIp : ipList) { + // 如果当前登录的IP在授权IP中 + if (ipIsInWildCardNoCheck(agreeIp, loginIp)) { + return true; + } + } + return false; + } + + + // 登录验证 + @Override + protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { + UsernamePasswordToken token2 = (UsernamePasswordToken) token; +// String username = token2.getUsername(); + SimpleAuthenticationInfo info = null; + + // 从token中取出用户名 + String username = (String) token.getPrincipal(); +// String username = "admin"; + SysUser user = userMapper.getUserByUsername(username); + + if (user != null) { + if ("0".contentEquals(user.getUserStatus())) { + throw new LockedAccountException("用户未激活,请联系管理员"); + } + /** 处理账号只能在授权的IP中登录 */ + // 是否允许登录标识 + boolean agreeLogin = true; + // 当前登录用户的IP地址 +// String loginIp = SecurityUtils.getSubject().getSession().getHost(); + String loginIp = token2.getHost(); + System.out.println("当前登录用户的IP地址:" + loginIp); + // 登录说明 + String loginRemark = formatter.format(new Date()) + "【" + user.getRealname() + " - " + username + "】 IP:" + loginIp; + LoginLog loginLog = new LoginLog(); + if (isPassIp(loginIp)) { + loginRemark += "--已知IP"; + loginLog.setStatus("正常"); + agreeLogin = true; + } else { + loginRemark += "--未知IP"; + loginLog.setStatus("异常"); + agreeLogin = false; + } + + loginLog.setLoginTime(new Date()); + loginLog.setRemark(loginRemark); + loginLogMapper.addLog(loginLog); + + if (!agreeLogin) { + throw new AuthenticationException("IP受限" + loginIp); + } + + /** 处理生日 */ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date birthDate = null; + String birthDay = ""; + // 生日日期/类型不为空 + if (StringUtil.isNotEmpty(user.getBirthDay()) && StringUtil.isNotEmpty(user.getBirthType())) { + // 如果是新历生日,直接获取生日日期 + if (user.getBirthType().equals("1")) { + birthDay = String.format("%tY", new Date()) + "-" + user.getBirthDay(); + } else if (user.getBirthType().equals("0")) {// 如果是农历生日 + // 先将农历生日转换成新历;调用工具类转换,使用String.format获取年、月、日 + int[] lunarToSolar = LunarCalendarUtil.lunarToSolar( + Integer.valueOf(String.format("%tY", new Date())), + Integer.valueOf(user.getBirthDay().split("-")[0]), + Integer.valueOf(user.getBirthDay().split("-")[1]), true); + for (int i = 0; i < 3; i++) { + birthDay += lunarToSolar[i] + "-"; + } + birthDay = birthDay.substring(0, birthDay.length() - 1); + } + try { + birthDate = sdf.parse(birthDay); + // 如果当天生日,改变状态 + if (Math.abs(DateFormatUtils.getSubtractiveDays(birthDate, new Date())) == 0) { + // 生日:1 + userMapper.setIsBirthDay(1, user.getUserId()); + } + } catch (ParseException e) { + // e.printStackTrace(); + } + } + + /** 处理session(将用户信息存入session) */ + // 将用户信息存入session + SecurityUtils.getSubject().getSession().setAttribute("USER_SESSION", user); + // 获取权限列表 + List persList = sysPermissionMapper.getPersByUserId(user.getUserId()); + // 将权限list存入session + SecurityUtils.getSubject().getSession().setAttribute("USERPERS_SESSION", persList); + info = new SimpleAuthenticationInfo(user, user.getPassword(), new SimpleByteSource("lingtao"), getName()); + // 设置session过期时间(毫秒) :正负都可以,为负数时表示永不超时。 + SecurityUtils.getSubject().getSession().setTimeout(1000 * 60 * 60 * 14); + + /** 处理session(账号只允许同时一人登录) */ + // shiro获取所有在线用户 + Collection sessionsCollections = sessionDAO.getActiveSessions(); + // 遍历所有的在线用户 + for (Session session : sessionsCollections) { + // 获得session中已经登录的单个用户对象 + String loginUsername = String + .valueOf(session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY)); + // 这里的user对象也就是当前登录的loginUsername对象,判断当前登录的用户是否已是在线用户,是的话就清除 + if (String.valueOf(user).equals(loginUsername)) { + // 这里就把session清除, + session.setTimeout(0); + break; + } + } + } + // 框架完成验证 + return info; + } + +} diff --git a/src/main/java/lingtao/net/service/ArticleService.java b/src/main/java/lingtao/net/service/ArticleService.java new file mode 100644 index 0000000..75976c2 --- /dev/null +++ b/src/main/java/lingtao/net/service/ArticleService.java @@ -0,0 +1,64 @@ +package lingtao.net.service; + +import java.util.Date; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import lingtao.net.bean.Article; +import lingtao.net.bean.Msg; +import lingtao.net.dao.ArticleMapper; + +@Service +public class ArticleService { + + @Autowired + ArticleMapper articlesMapper; + + public List
getArticle(Article article) { + return articlesMapper.getArticle(article); + + } + + public Msg addArticle(Article article) { + try { + article.setCreateDate(new Date()); + articlesMapper.insertSelective(article); + return Msg.success(); + } catch (Exception e) { + e.printStackTrace(); + return Msg.fail("新增失败"); + } + } + + public Msg updateArticleById(Article article) { + try { + article.setUpdateDate(new Date()); + articlesMapper.updateByPrimaryKeySelective(article); + return Msg.success(); + } catch (Exception e) { + e.printStackTrace(); + return Msg.fail("修改失败"); + } + } + + public Msg delArticleById(Integer id) { + try { + articlesMapper.deleteByPrimaryKey(id); + return Msg.success(); + } catch (Exception e) { + e.printStackTrace(); + return Msg.fail("删除失败"); + } + } + + public Article articleInfo(Integer id) { + try { + return articlesMapper.selectByPrimaryKey(id); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } +} diff --git a/src/main/java/lingtao/net/service/BugService.java b/src/main/java/lingtao/net/service/BugService.java new file mode 100644 index 0000000..62121e1 --- /dev/null +++ b/src/main/java/lingtao/net/service/BugService.java @@ -0,0 +1,35 @@ +package lingtao.net.service; + +import java.util.List; + +import javax.servlet.http.HttpSession; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import lingtao.net.bean.Bug; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.dao.BugMapper; + +@Service +public class BugService { + + @Autowired + private BugMapper bugMapper; + + public List getBugs(Bug bug) { + return bugMapper.getBugs(bug); + } + + public Msg addBug(Bug bug, HttpSession session) { + SysUser user = (SysUser) session.getAttribute("USER_SESSION"); + bug.setCreateBy(user.getRealname()); + int i = bugMapper.addBug(bug); + if (i < 0) { + return Msg.fail(); + } + return Msg.success(); + } + +} diff --git a/src/main/java/lingtao/net/service/CustomerAwardService.java b/src/main/java/lingtao/net/service/CustomerAwardService.java new file mode 100644 index 0000000..e0e6090 --- /dev/null +++ b/src/main/java/lingtao/net/service/CustomerAwardService.java @@ -0,0 +1,677 @@ +package lingtao.net.service; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import lingtao.net.bean.CustomerAward; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.dao.CustomerAwardMapper; +import lingtao.net.util.DateFormatUtils; +import lingtao.net.util.ExcelUtils; + +@Service +public class CustomerAwardService { + + @Autowired + private CustomerAwardMapper customerAwardMapper; + + public List getCustomerAward(CustomerAward customerAward) { + customerAward.setCreateTimeEnd(new DateFormatUtils().formatEndTime(customerAward.getCreateTimeBegin())); + customerAward.setCreateTimeBegin(new DateFormatUtils().formatBeginTime(customerAward.getCreateTimeBegin())); + return customerAwardMapper.getCustomerAward(customerAward); + } + + // 批量删除 + public Msg deleteBatch(int[] ints) { + try { + customerAwardMapper.deleteBatch(ints); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + public List getArardShopname() { + return customerAwardMapper.getArardShopname(); + } + + public Msg ajaxUploadExcel(MultipartFile file) throws Exception { + if (file.isEmpty()) { + throw new Exception("文件不存在!"); + } + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + InputStream in = null; + List> listob = null; + String awardDate = ""; + List matches = null; + List list = new ArrayList(1000); + try { + in = file.getInputStream(); + listob = new ExcelUtils().getBankListByExcel(in, file.getOriginalFilename()); + } catch (IOException e) { + e.printStackTrace(); + } + + String filename = file.getOriginalFilename(); + // 获取字符串中的日期正则 + Pattern p = Pattern.compile("(\\d{1,4}[-|\\/]\\d{1,2}[-|\\/]\\d{1,2})", + Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); + Matcher matcher = p.matcher(listob.get(0).toString().trim()); + + if (matcher.find() && matcher.groupCount() >= 1) { + matches = new ArrayList(); + for (int i = 1; i <= matcher.groupCount(); i++) { + String temp = matcher.group(i); + matches.add(temp); + } + } + if (matches.size() > 0) { + awardDate = ((String) matches.get(0)).trim(); + } + + filename = filename.substring(0, filename.indexOf(".")); + System.out.println(filename); + for (int i = 0; i < listob.size(); i++) { + synchronized (this) { + CustomerAward vo = new CustomerAward(); + List lo = listob.get(i); + if (lo.size() == 0 || lo.size() == 1) { + System.out.println("++++++++++++++"); + continue; + } + String nickname = String.valueOf(lo.get(0)).trim(); + String payPercent2 = (String.valueOf(lo.get(1)).trim()); + String askNumber2 = (String.valueOf(lo.get(2)).trim()); + String customerPrice2 = (String.valueOf(lo.get(3)).trim()); + payPercent2 = payPercent2.replaceAll("%", " "); + Double payPercent = 0.0; + Double askNumber = 0.0; + Double customerPrice = 0.0; + try { + payPercent = Double.valueOf(payPercent2); + askNumber = Double.valueOf(askNumber2); + customerPrice = Double.valueOf(customerPrice2); + } catch (NumberFormatException e) { + continue; + } + if (payPercent == 1) { + payPercent = 100.0; + } + int award = 0; + switch (filename) { + case "菇凉": + award = guliang(nickname, payPercent, askNumber, customerPrice); + break; + case "榆家": + award = yujia(nickname, payPercent, askNumber, customerPrice); + break; + case "奥丽芙": + award = aolifu(nickname, payPercent, askNumber, customerPrice); + break; + case "翊喜": + award = yixi(nickname, payPercent, askNumber, customerPrice); + break; + case "航和": + award = hanghe(nickname, payPercent, askNumber, customerPrice); + break; + case "卓胜": + award = zhuosheng(nickname, payPercent, askNumber, customerPrice); + break; + case "欣克利": + award = xinkeli(nickname, payPercent, askNumber, customerPrice); + break; + case "米笛儿": + award = midier(nickname, payPercent, askNumber, customerPrice); + break; + case "阳光猫": + award = yangguangmao(nickname, payPercent, askNumber, customerPrice); + break; + default: + break; + } + + vo.setNickname(nickname); + vo.setPayPercent(payPercent); + vo.setAskNumber(askNumber); + vo.setCustomerPrice(customerPrice); + vo.setAward(award); + vo.setShopname(filename); + vo.setAwardDate(awardDate); + vo.setCreator(user.getRealname()); + list.add(vo); + } + } + if (list.size() > 0) { + customerAwardMapper.insertForeach(list); + } + in.close(); + return Msg.success(); + + } + + // 菇凉店客服日奖励 + private int guliang(String nickname, Double payPercent, Double askNumber, Double customerPrice) { + // IF(C4>=46,"奖励档80元",IF(C4>=44,"奖励档60元",IF(C4>=43,"奖励档50元",IF(C4>=42,"奖励档40元", + // IF(C4>=41,"奖励档30元",IF(C4>=40,"奖励档20元")))))) + int payPercentPrice = 0; + if (payPercent >= 46) { + payPercentPrice = 80; + } else if (payPercent >= 44) { + payPercentPrice = 60; + } else if (payPercent >= 43) { + payPercentPrice = 50; + } else if (payPercent >= 42) { + payPercentPrice = 40; + } else if (payPercent >= 41) { + payPercentPrice = 30; + } else if (payPercent >= 40) { + payPercentPrice = 20; + } + + // IF(D4>=70,"询单人数档80元",IF(D4>=50,"询单人数档60元"))) + int askNumberPrice = 0; + if ("平均".equals(nickname)) { + // IF(D4>=50%,"询单人数档80元",IF(D4>=30%,"询单人数档60元"))) + if (askNumber >= 0.5) { + askNumberPrice = 80; + } else if (askNumber >= 0.3) { + askNumberPrice = 60; + } + } else { + if (askNumber >= 70) { + askNumberPrice = 80; + } else if (askNumber >= 50) { + askNumberPrice = 60; + } + + } + + // =IF(E4>=240,"客单档80元",IF(E4>=220,"客单档60元",IF(E4>=200,"客单档50元",IF(E4>=190,"客单档40元", + // IF(E4>=180,"客单档30元",IF(E4>=0,"客单档20元")))))) + int customerPricePrice = 0; + if (customerPrice >= 240) { + customerPricePrice = 80; + } else if (customerPrice >= 220) { + customerPricePrice = 60; + } else if (customerPrice >= 200) { + customerPricePrice = 50; + } else if (customerPrice >= 190) { + customerPricePrice = 40; + } else if (customerPrice >= 180) { + customerPricePrice = 30; + } else if (customerPrice >= 0) { + customerPricePrice = 20; + } + + double award = Math.min(Math.min(payPercentPrice, askNumberPrice), customerPricePrice); + + return (int) award; + } + + // 榆家店客服日奖励 + private int yujia(String nickname, Double payPercent, Double askNumber, Double customerPrice) { + // IF(C4>=43,"奖励档80元",IF(C4>=42,"奖励档60元",IF(C4>=41,"奖励档50元",IF(C4>=40,"奖励档40元", + // IF(C4>=39,"奖励档30元",IF(C4>=38,"奖励档20元")))))) + int payPercentPrice = 0; + if (payPercent >= 43) { + payPercentPrice = 80; + } else if (payPercent >= 42) { + payPercentPrice = 60; + } else if (payPercent >= 41) { + payPercentPrice = 50; + } else if (payPercent >= 40) { + payPercentPrice = 40; + } else if (payPercent >= 39) { + payPercentPrice = 30; + } else if (payPercent >= 38) { + payPercentPrice = 20; + } + + // IF(D4>=70,"询单人数档80元",IF(D4>=50,"询单人数档60元"))) + int askNumberPrice = 0; + if ("平均".equals(nickname)) { + // IF(D4>=50%,"询单人数档80元",IF(D4>=30%,"询单人数档60元"))) + if (askNumber >= 0.5) { + askNumberPrice = 80; + } else if (askNumber >= 0.3) { + askNumberPrice = 60; + } + } else { + if (askNumber >= 70) { + askNumberPrice = 80; + } else if (askNumber >= 50) { + askNumberPrice = 60; + } + } + + // =IF(E4>=190,"客单档80元",IF(E4>=180,"客单档60元",IF(E4>=170,"客单档50元",IF(E4>=160,"客单档40元", + // IF(E4>=150,"客单档30元",IF(E4>=0,"客单档20元")))))) + int customerPricePrice = 0; + if (customerPrice >= 190) { + customerPricePrice = 80; + } else if (customerPrice >= 180) { + customerPricePrice = 60; + } else if (customerPrice >= 170) { + customerPricePrice = 50; + } else if (customerPrice >= 160) { + customerPricePrice = 40; + } else if (customerPrice >= 150) { + customerPricePrice = 30; + } else if (customerPrice >= 0) { + customerPricePrice = 20; + } + + double award = Math.min(Math.min(payPercentPrice, askNumberPrice), customerPricePrice); + + return (int) award; + } + + // 奥丽芙店客服日奖励 + private int aolifu(String nickname, Double payPercent, Double askNumber, Double customerPrice) { + // IF(C4>=43,"奖励档80元",IF(C4>=42,"奖励档60元",IF(C4>=41,"奖励档50元",IF(C4>=40,"奖励档40元", + // IF(C4>=39,"奖励档30元",IF(C4>=38,"奖励档20元")))))) + int payPercentPrice = 0; + if (payPercent >= 43) { + payPercentPrice = 80; + } else if (payPercent >= 42) { + payPercentPrice = 60; + } else if (payPercent >= 41) { + payPercentPrice = 50; + } else if (payPercent >= 40) { + payPercentPrice = 40; + } else if (payPercent >= 39) { + payPercentPrice = 30; + } else if (payPercent >= 38) { + payPercentPrice = 20; + } + + // IF(D4>=70,"询单人数档80元",IF(D4>=50,"询单人数档60元"))) + int askNumberPrice = 0; + if ("平均".equals(nickname)) { + // IF(D4>=50%,"询单人数档80元",IF(D4>=30%,"询单人数档60元"))) + if (askNumber >= 0.5) { + askNumberPrice = 80; + } else if (askNumber >= 0.3) { + askNumberPrice = 60; + } + } else { + if (askNumber >= 70) { + askNumberPrice = 80; + } else if (askNumber >= 50) { + askNumberPrice = 60; + } + } + + // =IF(E4>=240,"客单档80元",IF(E4>=220,"客单档60元",IF(E4>=200,"客单档50元",IF(E4>=190,"客单档40元", + // IF(E4>=180,"客单档30元",IF(E4>=0,"客单档20元")))))) + int customerPricePrice = 0; + if (customerPrice >= 240) { + customerPricePrice = 80; + } else if (customerPrice >= 220) { + customerPricePrice = 60; + } else if (customerPrice >= 200) { + customerPricePrice = 50; + } else if (customerPrice >= 190) { + customerPricePrice = 40; + } else if (customerPrice >= 180) { + customerPricePrice = 30; + } else if (customerPrice >= 0) { + customerPricePrice = 20; + } + + double award = Math.min(Math.min(payPercentPrice, askNumberPrice), customerPricePrice); + + return (int) award; + } + + // 翊喜店客服日奖励 + private int yixi(String nickname, Double payPercent, Double askNumber, Double customerPrice) { + // IF(C4>=42,"奖励档80元",IF(C4>=41,"奖励档60元",IF(C4>=40,"奖励档50元",IF(C4>=39,"奖励档40元", + // IF(C4>=38,"奖励档30元",IF(C4>=37,"奖励档20元")))))) + int payPercentPrice = 0; + if (payPercent >= 42) { + payPercentPrice = 80; + } else if (payPercent >= 41) { + payPercentPrice = 60; + } else if (payPercent >= 40) { + payPercentPrice = 50; + } else if (payPercent >= 39) { + payPercentPrice = 40; + } else if (payPercent >= 38) { + payPercentPrice = 30; + } else if (payPercent >= 37) { + payPercentPrice = 20; + } + + // IF(D4>=75,"询单人数档80元",IF(D4>=55,"询单人数档60元"))) + int askNumberPrice = 0; + if ("平均".equals(nickname)) { + // IF(D4>=50%,"询单人数档80元",IF(D4>=30%,"询单人数档60元"))) + if (askNumber >= 0.5) { + askNumberPrice = 80; + } else if (askNumber >= 0.3) { + askNumberPrice = 60; + } + } else { + if (askNumber >= 75) { + askNumberPrice = 80; + } else if (askNumber >= 55) { + askNumberPrice = 60; + } + } + + // =IF(E4>=190,"客单档80元",IF(E4>=180,"客单档60元",IF(E4>=170,"客单档50元",IF(E4>=160,"客单档40元", + // IF(E4>=150,"客单档30元",IF(E4>=0,"客单档20元")))))) + int customerPricePrice = 0; + if (customerPrice >= 190) { + customerPricePrice = 80; + } else if (customerPrice >= 180) { + customerPricePrice = 60; + } else if (customerPrice >= 170) { + customerPricePrice = 50; + } else if (customerPrice >= 160) { + customerPricePrice = 40; + } else if (customerPrice >= 150) { + customerPricePrice = 30; + } else if (customerPrice >= 0) { + customerPricePrice = 20; + } + + double award = Math.min(Math.min(payPercentPrice, askNumberPrice), customerPricePrice); + + return (int) award; + } + + // 航和店客服日奖励 + private int hanghe(String nickname, Double payPercent, Double askNumber, Double customerPrice) { + // IF(C4>=40,"奖励档80元",IF(C4>=38,"奖励档60元",IF(C4>=37,"奖励档50元",IF(C4>=36,"奖励档40元", + // IF(C4>=35,"奖励档30元",IF(C4>=34,"奖励档20元")))))) + int payPercentPrice = 0; + if (payPercent >= 40) { + payPercentPrice = 80; + } else if (payPercent >= 38) { + payPercentPrice = 60; + } else if (payPercent >= 37) { + payPercentPrice = 50; + } else if (payPercent >= 36) { + payPercentPrice = 40; + } else if (payPercent >= 35) { + payPercentPrice = 30; + } else if (payPercent >= 34) { + payPercentPrice = 20; + } + + // IF(D4>=80,"询单人数档80元",IF(D4>=60,"询单人数档60元"))) + int askNumberPrice = 0; + if ("平均".equals(nickname)) { + // IF(D4>=50%,"询单人数档80元",IF(D4>=30%,"询单人数档60元"))) + // 航和没有这个,写个大数字 + askNumberPrice = 100; + } else { + if (askNumber >= 80) { + askNumberPrice = 80; + } else if (askNumber >= 60) { + askNumberPrice = 60; + } + } + + // =IF(E4>=195,"客单档80元",IF(E4>=185,"客单档60元",IF(E4>=175,"客单档50元",IF(E4>=165,"客单档40元", + // IF(E4>=155,"客单档30元",IF(E4>=0,"客单档20元")))))) + int customerPricePrice = 0; + if (customerPrice >= 195) { + customerPricePrice = 80; + } else if (customerPrice >= 185) { + customerPricePrice = 60; + } else if (customerPrice >= 175) { + customerPricePrice = 50; + } else if (customerPrice >= 165) { + customerPricePrice = 40; + } else if (customerPrice >= 155) { + customerPricePrice = 30; + } else if (customerPrice >= 0) { + customerPricePrice = 20; + } + + double award = Math.min(Math.min(payPercentPrice, askNumberPrice), customerPricePrice); + + return (int) award; + } + + // 卓胜店客服日奖励 + private int zhuosheng(String nickname, Double payPercent, Double askNumber, Double customerPrice) { + // IF(C4>=38,"奖励档80元",IF(C4>=37,"奖励档60元",IF(C4>=36,"奖励档50元",IF(C4>=35,"奖励档40元", + // IF(C4>=34,"奖励档30元",IF(C4>=33,"奖励档20元")))))) + int payPercentPrice = 0; + if (payPercent >= 38) { + payPercentPrice = 80; + } else if (payPercent >= 37) { + payPercentPrice = 60; + } else if (payPercent >= 36) { + payPercentPrice = 50; + } else if (payPercent >= 35) { + payPercentPrice = 40; + } else if (payPercent >= 34) { + payPercentPrice = 30; + } else if (payPercent >= 33) { + payPercentPrice = 20; + } + + // IF(D4>=65,"询单人数档80元",IF(D4>=45,"询单人数档60元"))) + int askNumberPrice = 0; + if ("平均".equals(nickname)) { + // IF(D4>=50%,"询单人数档80元",IF(D4>=30%,"询单人数档60元"))) + if (askNumber >= 0.5) { + askNumberPrice = 80; + } else if (askNumber >= 0.3) { + askNumberPrice = 60; + } + } else { + if (askNumber >= 65) { + askNumberPrice = 80; + } else if (askNumber >= 45) { + askNumberPrice = 60; + } + } + + // IF(E4>=190,"客单档80元",IF(E4>=180,"客单档60元",IF(E4>=170,"客单档50元",IF(E4>=160,"客单档40元", + // IF(E4>=150,"客单档30元",IF(E4>=0,"客单档20元")))))) + int customerPricePrice = 0; + if (customerPrice >= 190) { + customerPricePrice = 80; + } else if (customerPrice >= 180) { + customerPricePrice = 60; + } else if (customerPrice >= 170) { + customerPricePrice = 50; + } else if (customerPrice >= 160) { + customerPricePrice = 40; + } else if (customerPrice >= 150) { + customerPricePrice = 30; + } else if (customerPrice >= 0) { + customerPricePrice = 20; + } + double award = Math.min(Math.min(payPercentPrice, askNumberPrice), customerPricePrice); + + return (int) award; + } + + // 欣克利店客服日奖励 + private int xinkeli(String nickname, Double payPercent, Double askNumber, Double customerPrice) { + // IF(C4>=37,"奖励档80元",IF(C4>=36,"奖励档60元",IF(C4>=35,"奖励档50元",IF(C4>=34,"奖励档40元", + // IF(C4>=33,"奖励档30元",IF(C4>=32,"奖励档20元")))))) + int payPercentPrice = 0; + if (payPercent >= 37) { + payPercentPrice = 80; + } else if (payPercent >= 36) { + payPercentPrice = 60; + } else if (payPercent >= 35) { + payPercentPrice = 50; + } else if (payPercent >= 34) { + payPercentPrice = 40; + } else if (payPercent >= 33) { + payPercentPrice = 30; + } else if (payPercent >= 32) { + payPercentPrice = 20; + } + + // IF(D4>=50,"询单人数档80元",IF(D4>=30,"询单人数档60元"))) + int askNumberPrice = 0; + if ("平均".equals(nickname)) { + // IF(D4>=50%,"询单人数档80元",IF(D4>=30%,"询单人数档60元"))) + if (askNumber >= 0.5) { + askNumberPrice = 80; + } else if (askNumber >= 0.3) { + askNumberPrice = 60; + } + } else { + if (askNumber >= 50) { + askNumberPrice = 80; + } else if (askNumber >= 30) { + askNumberPrice = 60; + } + } + + // IF(E4>=165,"客单档80元",IF(E4>=155,"客单档60元",IF(E4>=145,"客单档50元",IF(E4>=135,"客单档40元", + // IF(E4>=125,"客单档30元",IF(E4>=0,"客单档20元")))))) + int customerPricePrice = 0; + if (customerPrice >= 165) { + customerPricePrice = 80; + } else if (customerPrice >= 155) { + customerPricePrice = 60; + } else if (customerPrice >= 145) { + customerPricePrice = 50; + } else if (customerPrice >= 135) { + customerPricePrice = 40; + } else if (customerPrice >= 125) { + customerPricePrice = 30; + } else if (customerPrice >= 0) { + customerPricePrice = 20; + } + double award = Math.min(Math.min(payPercentPrice, askNumberPrice), customerPricePrice); + + return (int) award; + } + + // 米笛儿店客服日奖励 + private int midier(String nickname, Double payPercent, Double askNumber, Double customerPrice) { + // IF(C4>=35,"奖励档80元",IF(C4>=34,"奖励档60元",IF(C4>=33,"奖励档50元",IF(C4>=32,"奖励档40元", + // IF(C4>=31,"奖励档30元",IF(C4>=30,"奖励档20元")))))) + int payPercentPrice = 0; + if (payPercent >= 35) { + payPercentPrice = 80; + } else if (payPercent >= 34) { + payPercentPrice = 60; + } else if (payPercent >= 33) { + payPercentPrice = 50; + } else if (payPercent >= 32) { + payPercentPrice = 40; + } else if (payPercent >= 31) { + payPercentPrice = 30; + } else if (payPercent >= 30) { + payPercentPrice = 20; + } + + // IF(D4>=55,"询单人数档80元",IF(D4>=35,"询单人数档60元"))) + int askNumberPrice = 0; + if ("平均".equals(nickname)) { + // IF(D4>=50%,"询单人数档80元",IF(D4>=30%,"询单人数档60元"))) + if (askNumber >= 0.5) { + askNumberPrice = 80; + } else if (askNumber >= 0.3) { + askNumberPrice = 60; + } + } else { + if (askNumber >= 55) { + askNumberPrice = 80; + } else if (askNumber >= 35) { + askNumberPrice = 60; + } + } + + // IF(E4>=210,"客单档80元",IF(E4>=195,"客单档60元",IF(E4>=185,"客单档50元",IF(E4>=175,"客单档40元", + // IF(E4>=165,"客单档30元",IF(E4>=0,"客单档20元")))))) + int customerPricePrice = 0; + if (customerPrice >= 210) { + customerPricePrice = 80; + } else if (customerPrice >= 195) { + customerPricePrice = 60; + } else if (customerPrice >= 185) { + customerPricePrice = 50; + } else if (customerPrice >= 175) { + customerPricePrice = 40; + } else if (customerPrice >= 165) { + customerPricePrice = 30; + } else if (customerPrice >= 0) { + customerPricePrice = 20; + } + double award = Math.min(Math.min(payPercentPrice, askNumberPrice), customerPricePrice); + + return (int) award; + } + + // 阳光猫店客服日奖励 + private int yangguangmao(String nickname, Double payPercent, Double askNumber, Double customerPrice) { + // IF(C4>=40,"奖励档80元",IF(C4>=38,"奖励档60元",IF(C4>=37,"奖励档50元",IF(C4>=36,"奖励档40元", + // IF(C4>=35,"奖励档30元",IF(C4>=34,"奖励档20元")))))) + int payPercentPrice = 0; + if (payPercent >= 40) { + payPercentPrice = 80; + } else if (payPercent >= 38) { + payPercentPrice = 60; + } else if (payPercent >= 37) { + payPercentPrice = 50; + } else if (payPercent >= 36) { + payPercentPrice = 40; + } else if (payPercent >= 35) { + payPercentPrice = 30; + } else if (payPercent >= 34) { + payPercentPrice = 20; + } + + // IF(D4>=70,"询单人数档80元",IF(D4>=50,"询单人数档60元"))) + int askNumberPrice = 0; + if ("平均".equals(nickname)) { + // IF(D4>=50%,"询单人数档80元",IF(D4>=30%,"询单人数档60元"))) + if (askNumber >= 0.5) { + askNumberPrice = 80; + } else if (askNumber >= 0.3) { + askNumberPrice = 60; + } + } else { + if (askNumber >= 70) { + askNumberPrice = 80; + } else if (askNumber >= 50) { + askNumberPrice = 60; + } + } + + // IF(E4>=190,"客单档80元",IF(E4>=180,"客单档60元",IF(E4>=170,"客单档50元",IF(E4>=160,"客单档40元", + // IF(E4>=150,"客单档30元",IF(E4>=0,"客单档20元")))))) + int customerPricePrice = 0; + if (customerPrice >= 190) { + customerPricePrice = 80; + } else if (customerPrice >= 180) { + customerPricePrice = 60; + } else if (customerPrice >= 170) { + customerPricePrice = 50; + } else if (customerPrice >= 160) { + customerPricePrice = 40; + } else if (customerPrice >= 150) { + customerPricePrice = 30; + } else if (customerPrice >= 0) { + customerPricePrice = 20; + } + double award = Math.min(Math.min(payPercentPrice, askNumberPrice), customerPricePrice); + + return (int) award; + } +} diff --git a/src/main/java/lingtao/net/service/CustomerDataService.java b/src/main/java/lingtao/net/service/CustomerDataService.java new file mode 100644 index 0000000..742eff3 --- /dev/null +++ b/src/main/java/lingtao/net/service/CustomerDataService.java @@ -0,0 +1,132 @@ +package lingtao.net.service; + +import java.util.List; + +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import lingtao.net.bean.CustomerData; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.dao.CustomerDataMapper; +import lingtao.net.util.DateFormatUtils; + +@Service +public class CustomerDataService { + + @Autowired + private CustomerDataMapper customerDatamapper; + + /** + * 根据角色身份查询数据列表 + */ + public List getCustomerDatas(CustomerData customerData) { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + customerData.setCreateDateEnd(new DateFormatUtils().formatEndTime(customerData.getCreateDateBegin())); + customerData.setCreateDateBegin(new DateFormatUtils().formatBeginTime(customerData.getCreateDateBegin())); + // 用户所拥有的角色 + String[] roleArr = user.getRole().split(","); + // 判断是否拥有超管身份标识 + boolean isSuper = false; + for (int i = 0; i < roleArr.length; i++) { + // 有‘超级管理员’身份,状态改为true + if ("1".equals(roleArr[i]) || "777".equals(roleArr[i])) { + isSuper = true; + break; + } + } + + // 如果没有‘超级管理员’身份,就展示所拥有的店铺数据;如果有就不加条件,直接查询所有 + if (!isSuper) { + // 如果有多个 + if (user.getRole().contains(",")) { + customerData.setRoleArr(roleArr); + } else {// 只有一个角色 + customerData.setRoleSearch(user.getRole()); + } + } + + return customerDatamapper.getCustomerDatas(customerData); + } + + /** + * 新增数据 + * + * @param customerData + */ + public void addCustomerData(CustomerData customerData) { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + // 未成交数据 + customerData.setIsBuy("0"); + customerData.setUsername(user.getUsername()); + customerData.setRealname(user.getRealname()); + customerData.setCreateBy(user.getRealname()); + customerDatamapper.addCustomerData(customerData); + } + + /** + * 修改数据 + * + * @param customerData + */ + public void updateCustomerDataById(CustomerData customerData) { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + customerData.setUpdateBy(user.getRealname()); + customerDatamapper.updateCustomerDataById(customerData); + } + + /** + * 删除数据 + * + * @param id + */ + public void deleteCustomerDataById(Integer id) { + customerDatamapper.deleteCustomerDataById(id); + } + + /** + * 修改 店长评语 + * + * @param id + * @param field + * @param value + */ + public void updateRemarkById(int id, String field, String value) { + CustomerData customerData = new CustomerData(); + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + if ("commentManager".equals(field)) { + customerData.setId(id); + customerData.setCommentManager(value); + customerData.setUpdateBy(user.getRealname()); + } + customerDatamapper.updateCommentManager(customerData); + } + + /** + * 修改完成状态 + * + * @param id + * @return + */ + public Msg changeIsBuy(Integer id) { + try { + customerDatamapper.changeIsBuy(id); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + /** + * 查询产品说明报价记录 + * + * @param productExplain + * @return + */ + public List getProductExplain(String productExplain) { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + return customerDatamapper.getProductExplain(productExplain, user.getUsername()); + } + +} diff --git a/src/main/java/lingtao/net/service/CustomerTrainService.java b/src/main/java/lingtao/net/service/CustomerTrainService.java new file mode 100644 index 0000000..c18b8db --- /dev/null +++ b/src/main/java/lingtao/net/service/CustomerTrainService.java @@ -0,0 +1,162 @@ +package lingtao.net.service; + +import java.util.List; + +import javax.servlet.http.HttpSession; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import lingtao.net.bean.CustomerTrainContent; +import lingtao.net.bean.CustomerTrainKindLabel; +import lingtao.net.bean.CustomerTrainProType; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.dao.CustomerTrainMapper; + +@Service +public class CustomerTrainService { + + @Autowired + private CustomerTrainMapper customerTrainMapper; + + // 查询列表 + public List getCustomerTrainContents(CustomerTrainContent customerTrainContent) { + return customerTrainMapper.getCustomerTrainContents(customerTrainContent); + } + + // 新增 + public Msg addCustomerTrainContent(CustomerTrainContent customerTrainContent, HttpSession session) { + SysUser user = (SysUser) session.getAttribute("USER_SESSION"); + customerTrainContent.setCreateBy(user.getRealname()); + try { + customerTrainMapper.addCustomerTrainContent(customerTrainContent); + return Msg.success(); + } catch (Exception e) { + System.out.println(e); + return Msg.fail(); + } + } + + // 修改 + public Msg updateCustomerTrainContentById(CustomerTrainContent customerTrainContent, HttpSession session) { + SysUser user = (SysUser) session.getAttribute("USER_SESSION"); + customerTrainContent.setUpdateBy(user.getRealname()); + try { + customerTrainMapper.updateCustomerTrainContentById(customerTrainContent); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + // 修改排序 + public Msg updateCustomerTrainContentSort(int id, String value) { + customerTrainMapper.updateCustomerTrainContentSort(id, Integer.valueOf(value)); + return Msg.success(); + } + + // 删除 + public Msg deleteCustomerTrainContentById(Integer id) { + try { + customerTrainMapper.deleteCustomerTrainContentById(id); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + // 产品种类字典 + + /** + * + * @param customerTrainProType + * @return + */ + // 查询 + public List getCustomerTrainProTypes(CustomerTrainProType customerTrainProType) { + return customerTrainMapper.getCustomerTrainProTypes(customerTrainProType); + } + + // 新增 + public Msg addCustomerTrainProType(CustomerTrainProType customerTrainProType, HttpSession session) { + SysUser user = (SysUser) session.getAttribute("USER_SESSION"); + customerTrainProType.setCreateBy(user.getRealname()); + try { + customerTrainMapper.addCustomerTrainProType(customerTrainProType); + return Msg.success(); + } catch (Exception e) { + System.out.println(e); + return Msg.fail(); + } + } + + // 修改 + public Msg updateCustomerTrainProTypeById(CustomerTrainProType customerTrainProType, HttpSession session) { + SysUser user = (SysUser) session.getAttribute("USER_SESSION"); + customerTrainProType.setUpdateBy(user.getRealname()); + try { + customerTrainMapper.updateCustomerTrainProTypeById(customerTrainProType); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + // 删除 + public Msg deleteCustomerTrainProTypeById(Integer id) { + try { + customerTrainMapper.deleteCustomerTrainProTypeById(id); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + // 类型字典 + /** + * + * @param customerTrainKindLabel + * @return + */ + // 查询 + public List getCustomerTrainKindLabelsByProType( + CustomerTrainKindLabel customerTrainKindLabel) { + return customerTrainMapper.getCustomerTrainKindLabelsByProType(customerTrainKindLabel); + } + + // 新增 + public Msg addCustomerTrainKindLabel(CustomerTrainKindLabel customerTrainKindLabel, HttpSession session) { + SysUser user = (SysUser) session.getAttribute("USER_SESSION"); + customerTrainKindLabel.setCreateBy(user.getRealname()); + try { + customerTrainMapper.addCustomerTrainKindLabel(customerTrainKindLabel); + return Msg.success(); + } catch (Exception e) { + System.out.println(e); + return Msg.fail(); + } + } + + // 修改 + public Msg updateCustomerTrainKindLabelById(CustomerTrainKindLabel customerTrainKindLabel, HttpSession session) { + SysUser user = (SysUser) session.getAttribute("USER_SESSION"); + customerTrainKindLabel.setUpdateBy(user.getRealname()); + try { + customerTrainMapper.updateCustomerTrainKindLabelById(customerTrainKindLabel); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + // 删除 + public Msg deleteCustomerTrainKindLabelById(Integer id) { + try { + customerTrainMapper.deleteCustomerTrainKindLabelById(id); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } +} diff --git a/src/main/java/lingtao/net/service/ExpressFeeService.java b/src/main/java/lingtao/net/service/ExpressFeeService.java new file mode 100644 index 0000000..d9ee7b6 --- /dev/null +++ b/src/main/java/lingtao/net/service/ExpressFeeService.java @@ -0,0 +1,113 @@ +package lingtao.net.service; + +import java.util.List; + +import javax.servlet.http.HttpSession; + +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import lingtao.net.bean.ExpressFee; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.dao.ExpressFeeMapper; + +@Service +public class ExpressFeeService { + + @Autowired + private ExpressFeeMapper expressFeeMapper; + + public List getExpressFees(ExpressFee expressFee) { + return expressFeeMapper.getExpressFees(expressFee); + } + + public Msg addExpressFee(ExpressFee expressFee, HttpSession session) { + SysUser user = (SysUser) session.getAttribute("USER_SESSION"); + expressFee.setCreateBy(user.getRealname()); + try { + expressFeeMapper.addExpressFee(expressFee); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(e.toString()); + } + } + + public Msg updateExpressFeeById(ExpressFee expressFee, HttpSession session) { + SysUser user = (SysUser) session.getAttribute("USER_SESSION"); + expressFee.setUpdateBy(user.getRealname()); + try { + expressFeeMapper.updateExpressFeeById(expressFee); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + + } + + public Msg deleteExpressFeeById(Integer id) { + try { + expressFeeMapper.deleteExpressFeeById(id); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + + } + + public List getShortAnswers() { + return expressFeeMapper.getShortAnswers(); + } + + public Msg updateExpressFeeById(HttpSession session, int id, String field, String value) { + ExpressFee expressFee = new ExpressFee(); + SysUser user = (SysUser) session.getAttribute("USER_SESSION"); + expressFee.setUpdateBy(user.getRealname()); + expressFee.setId(id); + switch (field) { + case "province": + expressFee.setProvince(value); + break; + case "firstWeightPrice": + if (StringUtils.isEmpty(value)) + return Msg.fail("更新失败"); + expressFee.setFirstWeightPrice(Double.valueOf(value)); + break; + case "continuedWeightPrice": + if (StringUtils.isEmpty(value)) + return Msg.fail("更新失败"); + expressFee.setContinuedWeightPrice(Double.valueOf(value)); + break; + case "startPrice": + if (StringUtils.isEmpty(value)) + return Msg.fail("更新失败"); + expressFee.setStartPrice(Double.valueOf(value)); + break; + } + try { + expressFeeMapper.updateExpressFeeById(expressFee); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + + } + + public List getAllExpressFees(ExpressFee expressFee) { + return expressFeeMapper.getAllExpressFees(expressFee); + } + + public List getHandBagExpressFees(ExpressFee expressFee) { + return expressFeeMapper.getHandBagExpressFees(expressFee); + } + + public List getTaoExpressFees(ExpressFee expressFee) { + return expressFeeMapper.getTaoExpressFees(expressFee); + } + + public List getOtherExpressFees(ExpressFee expressFee) { + return expressFeeMapper.getOtherExpressFees(expressFee); + } + +} diff --git a/src/main/java/lingtao/net/service/Finance2Service.java b/src/main/java/lingtao/net/service/Finance2Service.java new file mode 100644 index 0000000..ba20c3f --- /dev/null +++ b/src/main/java/lingtao/net/service/Finance2Service.java @@ -0,0 +1,401 @@ +package lingtao.net.service; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFDateUtil; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import lingtao.net.bean.Finance; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.dao.Finance2Mapper; +import lingtao.net.util.ExcelUtils; + +@Service +public class Finance2Service { + + @Autowired + private Finance2Mapper finance2Mapper; + + public List getFinance(Finance finance) { + return finance2Mapper.getFinance(finance); + } + + public List getAllFilename(String creator) { + return finance2Mapper.getAllFilename(creator); + } + + public Msg deleteDataByFilename(String filename, String realname) { + try { + finance2Mapper.deleteDataByFilename(filename, realname); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + public Msg ajaxUploadExcel(MultipartFile file) throws Exception { + if (file.isEmpty()) { + throw new Exception("文件不存在!"); + } + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + InputStream in = null; + List> listob = null; + List list = new ArrayList(1000); + try { + in = file.getInputStream(); + listob = new ExcelUtils().getBankListByExcel(in, file.getOriginalFilename()); + } catch (IOException e) { + e.printStackTrace(); + } + String filename = file.getOriginalFilename(); + System.out.println(filename); + for (int i = 0; i < listob.size(); i++) { + synchronized (this) { + Finance vo = new Finance(); + List lo = listob.get(i); + if (lo.size() == 0 || lo.size() == 1 || lo.get(6) == "") { + System.out.println("++++++++++++++"); + continue; + } + String addTime = String.valueOf(lo.get(0)).trim(); + String supplier = String.valueOf(lo.get(1)).trim(); + String shopname = String.valueOf(lo.get(2)).trim(); + String kind = String.valueOf(lo.get(3)).trim(); + String kind2 = String.valueOf(lo.get(4)).trim(); + String orderNumber = String.valueOf(lo.get(5)).trim(); + String remark = String.valueOf(lo.get(6)).trim(); + remark = remark.replace("MM", "mm").replace("CM", "mm"); + if (remark.indexOf("mm") == -1 && remark.indexOf("cm") == -1) { + System.out.println(remark); + System.out.println("================="); + } + // 判断数据是否已经存在 + + /* + * String checkAccountNumber = finance2Mapper.checkAccountNumber(orderNumber); + * if (StringUtils.isNotEmpty(checkAccountNumber)) { continue; } + */ + + // 数量 + String count = "#"; + // 拼版数 + String number = "#"; + // 所需张数 + double zhang = 0; + try { + // 处理备注 + String cutSizeStr = remark; + String cutCountStr = remark; + number = cutSize(cutSizeStr); + count = cutCount(cutCountStr); + if (count != "#" && number != "#") { + if (count.contains("*")) { + String[] countSplit = count.split("\\*"); + System.out.println(Double.valueOf(countSplit[0])); + System.out.println(Double.valueOf(countSplit[1])); + zhang = Math.ceil(Double.valueOf(countSplit[0]) * Double.valueOf(countSplit[1]) + / Double.valueOf(number)); + } else { + zhang = Math.ceil(Double.valueOf(count) / Double.valueOf(number)); + } + } + orderNumber = remark.substring(remark.indexOf("(") + 1, remark.indexOf(")")); + } catch (Exception e) { + System.out.println(remark); +// return Msg.fail(remark); + } + if (StringUtils.isNotEmpty(addTime)) { + Date javaDate = HSSFDateUtil.getJavaDate(Double.parseDouble(addTime)); + vo.setAddTime(javaDate); + } +// SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); +// Date add_date = formatter.parse(addTime);// 把字符串转为日期格式 + vo.setSupplier(supplier); + vo.setShopname(shopname); + vo.setKind(kind); + vo.setKind2(kind2); + vo.setOrderNumber(orderNumber); + vo.setFilename(filename); + vo.setCount(count); + vo.setNumber(number); + vo.setZhang(String.valueOf(zhang)); + vo.setRemark(remark); + vo.setCreator(user.getRealname()); + list.add(vo); + // finance2Mapper.insertSelective(vo); + } + } + if (list.size() == 0) { + return Msg.fail("上传失败,请检查文件表头是否正确"); + } else if (list.size() > 0) { + finance2Mapper.insertForeach(list); + } + in.close(); + return Msg.success(); + + } + + private String cutCount(String remark) { + remark = remark.replaceAll(" ", "").replace("x", "X").replace("×", "X").replace("(", "(").replace(")", ")"); + String countStr = ""; + String numberStr = ""; + Integer number; + Integer count; + int indexM = remark.indexOf("m"); + int indexZhang = remark.indexOf("张"); + int indexGe = remark.indexOf("个"); + int indexTao = remark.indexOf("套"); + int indexMei = remark.indexOf("枚"); + if (remark.indexOf("张") != -1 && indexZhang - indexM < 15) { + if (remark.indexOf("m-") == -1) { + countStr = remark.substring(remark.indexOf("m") + 1, remark.indexOf("张")); + } else { + countStr = remark.substring(remark.indexOf("m-") + 2, remark.indexOf("张")); + } + } else if (remark.indexOf("个") != -1 && indexGe - indexM < 15) { + if (remark.indexOf("m-") == -1) { + countStr = remark.substring(remark.indexOf("m") + 1, remark.indexOf("个")); + } else { + countStr = remark.substring(remark.indexOf("m-") + 2, remark.indexOf("个")); + } + } else if (remark.indexOf("套") != -1 && indexTao - indexM < 15) { + if (remark.indexOf("m-") == -1) { + countStr = remark.substring(remark.indexOf("m") + 1, remark.indexOf("套")); + } else { + countStr = remark.substring(remark.indexOf("m-") + 2, remark.indexOf("套")); + } + } else if (remark.indexOf("枚") != -1 && indexMei - indexM < 15) { + if (remark.indexOf("m-") == -1) { + countStr = remark.substring(remark.indexOf("m") + 1, remark.indexOf("枚")); + } else { + countStr = remark.substring(remark.indexOf("m-") + 2, remark.indexOf("枚")); + } + } + // 第一个“款”的位置 + int firstK = countStr.indexOf("款"); + // 第一个“各”的位置 + int firstGe = countStr.indexOf("各"); + // 第二个“款”的位置 + int countStrSecondK = countStr.indexOf("款", firstK + 1); + // 第3个“款”的位置 + int countStrThirdK = countStr.indexOf("款", countStrSecondK + 1); + if (countStrSecondK > 0 && countStrThirdK > 0) { + return "#"; + } + // “共***张” + if (countStr.contains("共")) { + String[] split = countStr.split("共"); + countStr = split[1].replaceAll("[^(0-9)]", ""); + return "" + countStr; + } + // “合计***张” + if (countStr.contains("合计")) { + String[] split = countStr.split("合计"); + countStr = split[1].replaceAll("[^(0-9)]", ""); + return "" + countStr; + } + // “总的***张” + if (countStr.contains("总")) { + String[] split = countStr.split("总"); + countStr = split[1].replaceAll("[^(0-9)]", ""); + return "" + countStr; + } + // “***款各***张” + if (firstGe > 0) { + String[] split = countStr.split("各"); + numberStr = split[0]; + countStr = split[1]; + numberStr = numberStr.replaceAll("[^(0-9)]", ""); + countStr = countStr.replaceAll("[^(0-9)]", ""); + if (StringUtils.isEmpty(numberStr)) { + return "#"; + } + number = Integer.valueOf(numberStr); + count = Integer.valueOf(countStr); + if (number == 1 || count == 1) { + return "" + number * count; + } + return number + "*" + count; + } + // **款**张 + if (firstK > 0) { + String[] split = countStr.split("款"); + numberStr = split[0]; + countStr = split[1]; + if (countStrSecondK > 0) { + countStr = split[2]; + } + numberStr = numberStr.replaceAll("[^(0-9)]", ""); + countStr = countStr.replaceAll("[^(0-9)]", ""); + if (StringUtils.isEmpty(numberStr)) { + return "#"; + } + number = Integer.valueOf(numberStr); + count = Integer.valueOf(countStr); + if (number == 1 || count == 1) { + return "" + number * count; + } + return number + "*" + count; + } + countStr = countStr.replaceAll("[^(0-9)]", ""); + return countStr; + } + + private String cutSize(String remark) { + remark = remark.replaceAll(" ", "").replace("x", "X").replace("×", "X").replace("(", "(").replace(")", ")") + .replace("专版打印", "").replace("下", "").replace("上", "").replace("专版", "").replace("-", "") + .replace("多拍返10元", ""); + // 第一个X的位置 + int firstX = remark.indexOf("X"); + // 第二个X的位置 + int secondX = remark.indexOf("X", firstX + 1); + int secondmm = remark.indexOf("mm", remark.indexOf("mm") + 1); + if (secondX > 0 && secondmm > 0) { + return "#"; + } + // System.out.println(remark); + String size = ""; + double length; + double width; + // 提取整数/小数的正则 + String regex = "([1-9]\\d*\\.?\\d+)|(0\\.\\d*[1-9])|(\\d+)"; + if (remark.indexOf("mm") == -1 && remark.indexOf("cm") != -1) { + String l = remark.substring(remark.indexOf("X") - 3, remark.indexOf("X")); + String w = remark.substring(remark.indexOf("X") + 1, remark.indexOf("cm")); + // 如果l里有小数点,往前数5位 + if (l.indexOf(".") != -1) { + Pattern pattern = Pattern.compile(regex); + l = remark.substring(remark.indexOf("X") - 5, remark.indexOf("X")); + Matcher matcher = pattern.matcher(l); + while (matcher.find()) { + l = matcher.group(); + } + } else { + l = l.replaceAll("[^(0-9)]", ""); + } + size = l + "X" + w; + String[] split = size.split("X"); + length = Double.valueOf(split[0]) * 10 + 4; + if ("按比例".equals(split[1])) { + width = Double.valueOf(split[0]) * 10 + 4; + } else { + width = Double.valueOf(split[1]) * 10 + 4; + } + } else { + String l = remark.substring(remark.indexOf("X") - 3, remark.indexOf("X")); + String w = remark.substring(remark.indexOf("X") + 1, remark.indexOf("mm")); + // 如果l里有小数点,往前数5位 + if (l.indexOf(".") != -1) { + if (l.indexOf(".") != -1) { + l = remark.substring(remark.indexOf("X") - 5, remark.indexOf("X")); + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(l); + while (matcher.find()) { + l = matcher.group(); + } + } + } else { + l = l.replaceAll("[^(0-9)]", ""); + } + size = l + "X" + w; + String[] split = size.split("X"); + length = Double.valueOf(split[0]) + 4; + if ("按比例".equals(split[1])) { + width = Double.valueOf(split[0]) + 4; + } else { + width = Double.valueOf(split[1]) + 4; + } + } + + double l = 390; + double w = 272; + if (length == l + 4) { + return "1"; + } + if ((length > l || width > w) && (length > w || width > l)) + return "#"; + // 一张纸 390*272 能做多少个此类尺寸的产品 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + return String.valueOf(max); + } + + @SuppressWarnings("resource") + public void excel(HttpServletResponse response, Finance finance) throws Exception { + response.setCharacterEncoding("UTF-8"); + List financesList = new ArrayList(); + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + finance.setCreator(user.getRealname()); + financesList = getFinance(finance); + + // 创建excel文件 + HSSFWorkbook wb = new HSSFWorkbook(); + // 创建sheet页 + HSSFSheet sheet = wb.createSheet("总表"); + String filename = ""; + // 创建标题行 + HSSFRow titleRow = sheet.createRow(0); + titleRow.createCell(0).setCellValue("日期"); + titleRow.createCell(1).setCellValue("供应商"); + titleRow.createCell(2).setCellValue("店铺"); + titleRow.createCell(3).setCellValue("大类别"); + titleRow.createCell(4).setCellValue("小类别"); + titleRow.createCell(5).setCellValue("订单号"); + titleRow.createCell(6).setCellValue("文件名"); + titleRow.createCell(7).setCellValue("数量"); + titleRow.createCell(8).setCellValue("拼版数"); + titleRow.createCell(9).setCellValue("张数"); + titleRow.createCell(10).setCellValue("导入人"); + titleRow.createCell(11).setCellValue("导入日期"); + // 遍历将数据放到excel列中 + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + for (Finance finances : financesList) { + filename = finance.getFilename(); + HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1); + dataRow.createCell(0).setCellValue(""); + if (finances.getAddTime() != null) { + dataRow.createCell(0).setCellValue(formatter.format(finances.getAddTime())); + } + dataRow.createCell(1).setCellValue(finances.getSupplier()); + dataRow.createCell(2).setCellValue(finances.getShopname()); + dataRow.createCell(3).setCellValue(finances.getKind()); + dataRow.createCell(4).setCellValue(finances.getKind2()); + dataRow.createCell(5).setCellValue(finances.getOrderNumber()); + dataRow.createCell(6).setCellValue(finances.getRemark()); + dataRow.createCell(7).setCellValue(finances.getCount()); + dataRow.createCell(8).setCellValue(finances.getNumber()); + dataRow.createCell(9).setCellValue(finances.getZhang()); + dataRow.createCell(10).setCellValue(finances.getCreator()); + dataRow.createCell(11).setCellValue(formatter.format(finances.getCreateDate())); + } + + // 设置下载时客户端Excel的名称 + response.setContentType("application/octet-stream;charset=utf-8"); + response.setHeader("Content-Disposition", + "attachment;filename=" + new String(filename.getBytes(), "iso-8859-1"));// + ".xls" + + OutputStream ouputStream = response.getOutputStream(); + wb.write(ouputStream); + ouputStream.flush(); + ouputStream.close(); + } + +} diff --git a/src/main/java/lingtao/net/service/Finance3Service.java b/src/main/java/lingtao/net/service/Finance3Service.java new file mode 100644 index 0000000..07157dc --- /dev/null +++ b/src/main/java/lingtao/net/service/Finance3Service.java @@ -0,0 +1,388 @@ +package lingtao.net.service; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFDateUtil; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import lingtao.net.bean.Finance; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.dao.Finance3Mapper; +import lingtao.net.util.ExcelUtils; + +@Service +public class Finance3Service { + + @Autowired + private Finance3Mapper finance3Mapper; + + public List getFinance(Finance finance) { + return finance3Mapper.getFinance(finance); + } + + public List getAllFilename(String creator) { + return finance3Mapper.getAllFilename(creator); + } + + public Msg deleteDataByFilename(String filename, String realname) { + try { + finance3Mapper.deleteDataByFilename(filename, realname); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + public Msg ajaxUploadExcel(MultipartFile file) throws Exception { + if (file.isEmpty()) { + throw new Exception("文件不存在!"); + } + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + InputStream in = null; + List> listob = null; + List list = new ArrayList(1000); + try { + in = file.getInputStream(); + listob = new ExcelUtils().getBankListByExcel(in, file.getOriginalFilename()); + } catch (IOException e) { + e.printStackTrace(); + } + String filename = file.getOriginalFilename(); + System.out.println(filename); + for (int i = 0; i < listob.size(); i++) { + synchronized (this) { + Finance vo = new Finance(); + List lo = listob.get(i); + if (lo.size() == 0 || lo.size() == 1 || lo.get(6) == "") { + System.out.println("++++++++++++++"); + continue; + } + + String addTime = String.valueOf(lo.get(0)).trim(); + if(addTime.equals("日期")) { + continue; + } + String supplier = String.valueOf(lo.get(1)).trim(); + String shopname = String.valueOf(lo.get(2)).trim(); + String kind = String.valueOf(lo.get(3)).trim(); + String kind2 = String.valueOf(lo.get(4)).trim(); + String orderNumber = String.valueOf(lo.get(5)).trim(); + String remark = String.valueOf(lo.get(6)).trim(); + remark = remark.replace("MM", "mm").replace("CM", "cm"); + if (remark.indexOf("mm") == -1 && remark.indexOf("cm") == -1) { + System.out.println(remark); + System.out.println("================="); + } + // 判断数据是否已经存在 + + /* + * String checkAccountNumber = finance2Mapper.checkAccountNumber(orderNumber); + * if (StringUtils.isNotEmpty(checkAccountNumber)) { continue; } + */ + + // 数量 + String count = "#"; + // 拼版数 + String number = "#"; + // 所需张数 + double zhang = 0; + String total = ""; + try { + // 处理备注 + remark = remark.replace(",", ","); + number = cutSize(remark); + count = cutCount(remark); + if(remark.indexOf(",") > 0) { + String[] countList = count.split(","); + String[] numberList = number.split(","); + for(int j = 0;j < countList.length; j++) { + if (countList[j].equals("#") || numberList[j].equals("#")) { + zhang = 0; + }else { + zhang = Math.ceil(Double.valueOf(countList[j]) / Double.valueOf(numberList[j])); + } + total += ","+zhang; + } + total = total.substring(0); + }else { + if (count != "#" && number != "#") { + if (count.contains("*")) { + String[] countSplit = count.split("\\*"); + System.out.println(Double.valueOf(countSplit[0])); + System.out.println(Double.valueOf(countSplit[1])); + zhang = Math.ceil(Double.valueOf(countSplit[0]) * Double.valueOf(countSplit[1]) + / Double.valueOf(number)); + } else { + zhang = Math.ceil(Double.valueOf(count) / Double.valueOf(number)); + } + } + orderNumber = remark.substring(remark.indexOf("(") + 1, remark.indexOf(")")); + } + } catch (Exception e) { + System.out.println(remark); +// return Msg.fail(remark); + } + if (StringUtils.isNotEmpty(addTime)) { + Date javaDate = HSSFDateUtil.getJavaDate(Double.parseDouble(addTime)); + vo.setAddTime(javaDate); + } +// SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); +// Date add_date = formatter.parse(addTime);// 把字符串转为日期格式 + vo.setSupplier(supplier); + vo.setShopname(shopname); + vo.setKind(kind); + vo.setKind2(kind2); + vo.setOrderNumber(orderNumber); + vo.setFilename(filename); + vo.setCount(count); + vo.setNumber(number); + if(total.length() > 0) { + vo.setZhang(total); + }else { + vo.setZhang(String.valueOf(zhang)); + } + vo.setRemark(remark); + vo.setCreator(user.getRealname()); + list.add(vo); + // finance2Mapper.insertSelective(vo); + } + } + if (list.size() == 0) { + return Msg.fail("上传失败,请检查文件表头是否正确"); + } else if (list.size() > 0) { + finance3Mapper.insertForeach(list); + } + in.close(); + return Msg.success(); + + } + + private String cutCount(String remark) { + int number = 0, count = 0, index = 0; + String totalCount = ""; + String counts = ""; + String[] countList = {}; + if( remark.indexOf(",") > 0) {//合包的拼版计算 + String[] total = remark.split(","); + for(int i = 0 ;i < total.length; i++) { + String[] lists = total[i].split("-"); + for(int j = 0; j < lists.length; j++) { + index = lists[j].indexOf("mm"); + if(index == -1) { + index = lists[j].indexOf("cm"); + } + } + + if(counts.indexOf("各") > 0) { + countList = counts.split("款"); + number = Integer.valueOf(countList[0].replace("各", "")); + count = Integer.valueOf(countList[1].substring(1, countList[1].length()-1)); + totalCount += "," + count * number; + }else { + totalCount += "," + Integer.valueOf(counts.substring(0, counts.length()-1)) * 1; + } + } + totalCount = totalCount.substring(1); + return totalCount; + }else {//单款尺寸 + String[] list = remark.split("-"); + for(int m = 0;m < list.length; m++) { + index = list[m].indexOf("mm"); + if(index == -1) { + index = list[m].indexOf("cm"); + } + if(index > 0) { + counts = list[m+1]; + break; + } + } + + if(counts.indexOf("各") > 0) { + countList = counts.split("款"); + countList[1].substring(0, countList[1].length()-1); + number = Integer.valueOf(countList[0].replace("各", "")); + count = Integer.valueOf(countList[1].substring(1, countList[1].length()-1)); + count = count * number; + }else { + count = Integer.valueOf(counts.substring(0, counts.length()-1)) * 1; + } + + return String.valueOf(count); + } + } + + private String cutSize(String remark) { + double length = 0,width = 0; + int sizeIndex = 0; + String totalSize = ""; + String size = ""; + String[] sizeList = {}; + double l = 290,w = 195; + if( remark.indexOf(",") > 0) {//合包的拼版计算 + String[] total = remark.split(","); + for(int i = 0 ;i < total.length; i++) { + String[] lists = total[i].split("-"); + for(int j = 0; j < lists.length; j++) { + sizeIndex = lists[j].indexOf("mm"); + if(sizeIndex == 0) { + sizeIndex = lists[j].indexOf("cm"); + } + + if(sizeIndex > 0) { + size = lists[j].replace("mm", ""); + size = size.replace("cm", ""); + break; + } + } + + if(size.indexOf("×") > 0 ) { + sizeList = size.split("×"); + }else if(size.indexOf("x") > 0){ + sizeList = size.split("x"); + } + + length = Double.valueOf(sizeList[0]); + width = Double.valueOf(sizeList[1]); + + //+3mm出血 + length += 3; + width += 3; + + if (length == l + 3 || width == l + 3) { + totalSize = "1"; + continue; + }else if ((length > l || width > w) && (length > w || width > l)) { + totalSize = "#"; + continue; + } + + // 一张纸 能做多少个此类尺寸的产品 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + + totalSize += "," + String.valueOf(max); + } + + if(totalSize.indexOf("#") != 0) { + totalSize = totalSize.substring(1); + } + + return totalSize; + }else { + String[] list = remark.split("-"); + for(int m = 0;m < list.length; m++) { + sizeIndex = list[m].indexOf("mm"); + if(sizeIndex == 0) { + sizeIndex = list[m].indexOf("cm"); + } + + if(sizeIndex > 0) { + size = list[m].replace("mm", ""); + size = size.replace("cm", ""); + break; + } + } + + if(size.indexOf("×") > 0 ) { + sizeList = size.split("×"); + }else if(size.indexOf("x") > 0){ + sizeList = size.split("x"); + } + + length = Double.valueOf(sizeList[0]); + width = Double.valueOf(sizeList[1]); + //+3mm出血 + length += 3; + width += 3; + + if (length == l + 3 || width == l + 3) { + return "1"; + } + if ((length > l || width > w) && (length > w || width > l)) + return "#"; + // 一张纸 能做多少个此类尺寸的产品 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + return String.valueOf(max); + } + } + + @SuppressWarnings("resource") + public void excel(HttpServletResponse response, Finance finance) throws Exception { + response.setCharacterEncoding("UTF-8"); + List financesList = new ArrayList(); + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + finance.setCreator(user.getRealname()); + financesList = getFinance(finance); + + // 创建excel文件 + HSSFWorkbook wb = new HSSFWorkbook(); + // 创建sheet页 + HSSFSheet sheet = wb.createSheet("总表"); + String filename = ""; + // 创建标题行 + HSSFRow titleRow = sheet.createRow(0); + titleRow.createCell(0).setCellValue("日期"); + titleRow.createCell(1).setCellValue("供应商"); + titleRow.createCell(2).setCellValue("店铺"); + titleRow.createCell(3).setCellValue("大类别"); + titleRow.createCell(4).setCellValue("小类别"); + titleRow.createCell(5).setCellValue("订单号"); + titleRow.createCell(6).setCellValue("文件名"); + titleRow.createCell(7).setCellValue("数量"); + titleRow.createCell(8).setCellValue("拼版数"); + titleRow.createCell(9).setCellValue("张数"); + titleRow.createCell(10).setCellValue("导入人"); + titleRow.createCell(11).setCellValue("导入日期"); + // 遍历将数据放到excel列中 + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + for (Finance finances : financesList) { + filename = finance.getFilename(); + HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1); + dataRow.createCell(0).setCellValue(""); + if (finances.getAddTime() != null) { + dataRow.createCell(0).setCellValue(formatter.format(finances.getAddTime())); + } + dataRow.createCell(1).setCellValue(finances.getSupplier()); + dataRow.createCell(2).setCellValue(finances.getShopname()); + dataRow.createCell(3).setCellValue(finances.getKind()); + dataRow.createCell(4).setCellValue(finances.getKind2()); + dataRow.createCell(5).setCellValue(finances.getOrderNumber()); + dataRow.createCell(6).setCellValue(finances.getRemark()); + dataRow.createCell(7).setCellValue(finances.getCount()); + dataRow.createCell(8).setCellValue(finances.getNumber()); + dataRow.createCell(9).setCellValue(finances.getZhang()); + dataRow.createCell(10).setCellValue(finances.getCreator()); + dataRow.createCell(11).setCellValue(formatter.format(finances.getCreateDate())); + } + + // 设置下载时客户端Excel的名称 + response.setContentType("application/octet-stream;charset=utf-8"); + response.setHeader("Content-Disposition", + "attachment;filename=" + new String(filename.getBytes(), "iso-8859-1"));// + ".xls" + + OutputStream ouputStream = response.getOutputStream(); + wb.write(ouputStream); + ouputStream.flush(); + ouputStream.close(); + } + +} diff --git a/src/main/java/lingtao/net/service/Finance4Service.java b/src/main/java/lingtao/net/service/Finance4Service.java new file mode 100644 index 0000000..8316196 --- /dev/null +++ b/src/main/java/lingtao/net/service/Finance4Service.java @@ -0,0 +1,393 @@ +package lingtao.net.service; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFDateUtil; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import lingtao.net.bean.Finance; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.dao.Finance3Mapper; +import lingtao.net.util.ExcelUtils; + +@Service +public class Finance4Service { + + @Autowired + private Finance3Mapper finance3Mapper; + + public List getFinance(Finance finance) { + return finance3Mapper.getFinance4(finance); + } + + public List getAllFilename(String creator) { + return finance3Mapper.getAllFilename4(creator); + } + + public Msg deleteDataByFilename(String filename, String realname) { + try { + finance3Mapper.deleteDataByFilename4(filename, realname); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + public Msg ajaxUploadExcel(MultipartFile file) throws Exception { + if (file.isEmpty()) { + throw new Exception("文件不存在!"); + } + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + InputStream in = null; + List> listob = null; + List list = new ArrayList(1000); + try { + in = file.getInputStream(); + listob = new ExcelUtils().getBankListByExcel(in, file.getOriginalFilename()); + } catch (IOException e) { + e.printStackTrace(); + } + String filename = file.getOriginalFilename(); + System.out.println(filename); + for (int i = 0; i < listob.size(); i++) { + synchronized (this) { + Finance vo = new Finance(); + List lo = listob.get(i); + if (lo.size() == 0 || lo.size() == 1 || lo.get(6) == "") { + System.out.println("++++++++++++++"); + continue; + } + + String addTime = String.valueOf(lo.get(0)).trim(); + if(addTime.equals("日期")) { + continue; + } + String supplier = String.valueOf(lo.get(1)).trim(); + String shopname = String.valueOf(lo.get(2)).trim(); + String kind = String.valueOf(lo.get(4)).trim(); + String kind2 = String.valueOf(lo.get(4)).trim(); + String orderNumber = String.valueOf(lo.get(5)).trim(); + String remark = String.valueOf(lo.get(6)).trim(); + remark = remark.replace("MM", "mm").replace("CM", "cm"); + if (remark.indexOf("mm") == -1 && remark.indexOf("cm") == -1) { + System.out.println(remark); + System.out.println("================="); + } + + // 数量 + String count = "#"; + // 拼版数 + String number = "#"; + // 所需张数 + double zhang = 0; + String total = ""; + try { + // 处理备注 + remark = remark.replace(",", ","); + number = cutSize(remark); + count = cutCount(remark); + if(remark.indexOf(",") > 0) { + String[] countList = count.split(","); + String[] numberList = number.split(","); + for(int j = 0;j < countList.length; j++) { + if (countList[j].equals("#") || numberList[j].equals("#")) { + zhang = 0; + }else { + zhang = Math.ceil(Double.valueOf(countList[j]) / Double.valueOf(numberList[j])); + } + total += ","+zhang; + } + total = total.substring(1); + }else { + if (count != "#" && number != "#") { + if (count.contains("*")) { + String[] countSplit = count.split("\\*"); + System.out.println(Double.valueOf(countSplit[0])); + System.out.println(Double.valueOf(countSplit[1])); + zhang = Math.ceil(Double.valueOf(countSplit[0]) * Double.valueOf(countSplit[1]) + / Double.valueOf(number)); + } else { + zhang = Math.ceil(Double.valueOf(count) / Double.valueOf(number)); + } + } + orderNumber = remark.substring(remark.indexOf("(") + 1, remark.indexOf(")")); + } + } catch (Exception e) { + System.out.println(remark); +// return Msg.fail(remark); + } + if (StringUtils.isNotEmpty(addTime)) { + Date javaDate = HSSFDateUtil.getJavaDate(Double.parseDouble(addTime)); + vo.setAddTime(javaDate); + } +// SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); +// Date add_date = formatter.parse(addTime);// 把字符串转为日期格式 + vo.setSupplier(supplier); + vo.setShopname(shopname); + vo.setKind(kind); + vo.setKind2(kind2); + vo.setOrderNumber(orderNumber); + vo.setFilename(filename); + vo.setCount(count); + vo.setNumber(number); + if(total.length() > 0) { + vo.setZhang(total); + }else { + vo.setZhang(String.valueOf(zhang)); + } + vo.setRemark(remark); + vo.setCreator(user.getRealname()); + list.add(vo); + // finance2Mapper.insertSelective(vo); + } + } + if (list.size() == 0) { + return Msg.fail("上传失败,请检查文件表头是否正确"); + } else if (list.size() > 0) { + finance3Mapper.insertForeach4(list); + } + in.close(); + return Msg.success(); + + } + + private String cutCount(String remark) { + int number = 0, count = 0, index = 0; + String totalCount = ""; + String counts = ""; + String[] countList = {}; + if( remark.indexOf(",") > 0) {//合包的拼版计算 + String[] total = remark.split(","); + for(int i = 0 ;i < total.length; i++) { + String[] lists = total[i].split("-"); + for(int j = 0; j < lists.length; j++) { + index = lists[j].indexOf("mm"); + if(index == -1) { + index = lists[j].indexOf("cm"); + } + + if(index > 0) { + counts = lists[j+1]; + break; + } + } + + if(counts.indexOf("各") > 0 && counts.indexOf("共") < 0) { + countList = counts.split("款"); + number = Integer.valueOf(countList[0].replace("各", "")); + count = Integer.valueOf(countList[1].substring(1, countList[1].length()-1)); + totalCount += "," + count * number; + }else if(counts.indexOf("共") > 0){ + int coutIndex = counts.indexOf("共"); + String countValue = counts.substring(coutIndex, counts.length()-1); + count = Integer.valueOf(countValue); + }else { + totalCount += "," + Integer.valueOf(counts.substring(0, counts.length()-1)) * 1; + } + } + totalCount = totalCount.substring(1); + return totalCount; + }else {//单款尺寸 + String[] list = remark.split("-"); + for(int m = 0;m < list.length; m++) { + index = list[m].indexOf("mm"); + if(index == -1) { + index = list[m].indexOf("cm"); + } + if(index > 0) { + counts = list[m+1]; + break; + } + } + + if(counts.indexOf("各") > 0 && counts.indexOf("共") < 0 ) { + countList = counts.split("款"); + countList[1].substring(0, countList[1].length()-1); + number = Integer.valueOf(countList[0].replace("各", "")); + count = Integer.valueOf(countList[1].substring(1, countList[1].length()-1)); + count = count * number; + }else if(counts.indexOf("共") > 0){ + int coutIndex = counts.indexOf("共"); + String countValue = counts.substring(coutIndex+1, counts.length()-1); + count = Integer.valueOf(countValue); + }else { + count = Integer.valueOf(counts.substring(0, counts.length()-1)) * 1; + } + + return String.valueOf(count); + } + } + + private String cutSize(String remark) { + double length = 0,width = 0; + int sizeIndex = 0; + String totalSize = ""; + String size = ""; + String[] sizeList = {}; + double l = 430,w = 300; + if( remark.indexOf(",") > 0) {//合包的拼版计算 + String[] total = remark.split(","); + for(int i = 0 ;i < total.length; i++) { + String[] lists = total[i].split("-"); + for(int j = 0; j < lists.length; j++) { + sizeIndex = lists[j].indexOf("mm"); + if(sizeIndex == 0) { + sizeIndex = lists[j].indexOf("cm"); + } + + if(sizeIndex > 0) { + size = lists[j].replace("mm", ""); + size = size.replace("cm", ""); + break; + } + } + + if(size.indexOf("×") > 0 ) { + sizeList = size.split("×"); + }else if(size.indexOf("x") > 0){ + sizeList = size.split("x"); + } + + length = Double.valueOf(sizeList[0]); + width = Double.valueOf(sizeList[1]); + + //+3mm出血 + length += 6; + width += 6; + + if (length == l + 6 || width == l + 6) { + totalSize = "1"; + continue; + }else if ((length > l || width > w) && (length > w || width > l)) { + totalSize = "#"; + continue; + } + + // 一张纸 能做多少个此类尺寸的产品 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + + totalSize += "," + String.valueOf(max); + } + + if(totalSize.indexOf("#") != 0) { + totalSize = totalSize.substring(1); + } + + return totalSize; + }else { + String[] list = remark.split("-"); + for(int m = 0;m < list.length; m++) { + sizeIndex = list[m].indexOf("mm"); + if(sizeIndex == 0) { + sizeIndex = list[m].indexOf("cm"); + } + + if(sizeIndex > 0) { + size = list[m].replace("mm", ""); + size = size.replace("cm", ""); + break; + } + } + + if(size.indexOf("×") > 0 ) { + sizeList = size.split("×"); + }else if(size.indexOf("x") > 0){ + sizeList = size.split("x"); + } + + length = Double.valueOf(sizeList[0]); + width = Double.valueOf(sizeList[1]); + //+3mm出血 + length += 6; + width += 6; + + if (length == l + 6 || width == 2 + 6) { + return "1"; + }else if ((length > l || width > w) && (length > w || width > l)) { + return "#"; + } + // 一张纸 能做多少个此类尺寸的产品 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + return String.valueOf(max); + } + } + + @SuppressWarnings("resource") + public void excel(HttpServletResponse response, Finance finance) throws Exception { + response.setCharacterEncoding("UTF-8"); + List financesList = new ArrayList(); + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + finance.setCreator(user.getRealname()); + financesList = getFinance(finance); + + // 创建excel文件 + HSSFWorkbook wb = new HSSFWorkbook(); + // 创建sheet页 + HSSFSheet sheet = wb.createSheet("总表"); + String filename = ""; + // 创建标题行 + HSSFRow titleRow = sheet.createRow(0); + titleRow.createCell(0).setCellValue("日期"); + titleRow.createCell(1).setCellValue("供应商"); + titleRow.createCell(2).setCellValue("店铺"); + titleRow.createCell(3).setCellValue("大类别"); + titleRow.createCell(4).setCellValue("小类别"); + titleRow.createCell(5).setCellValue("订单号"); + titleRow.createCell(6).setCellValue("文件名"); + titleRow.createCell(7).setCellValue("数量"); + titleRow.createCell(8).setCellValue("拼版数"); + titleRow.createCell(9).setCellValue("张数"); + titleRow.createCell(10).setCellValue("导入人"); + titleRow.createCell(11).setCellValue("导入日期"); + // 遍历将数据放到excel列中 + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + for (Finance finances : financesList) { + filename = finance.getFilename(); + HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1); + dataRow.createCell(0).setCellValue(""); + if (finances.getAddTime() != null) { + dataRow.createCell(0).setCellValue(formatter.format(finances.getAddTime())); + } + dataRow.createCell(1).setCellValue(finances.getSupplier()); + dataRow.createCell(2).setCellValue(finances.getShopname()); + dataRow.createCell(3).setCellValue(finances.getKind()); + dataRow.createCell(4).setCellValue(finances.getKind2()); + dataRow.createCell(5).setCellValue(finances.getOrderNumber()); + dataRow.createCell(6).setCellValue(finances.getRemark()); + dataRow.createCell(7).setCellValue(finances.getCount()); + dataRow.createCell(8).setCellValue(finances.getNumber()); + dataRow.createCell(9).setCellValue(finances.getZhang()); + dataRow.createCell(10).setCellValue(finances.getCreator()); + dataRow.createCell(11).setCellValue(formatter.format(finances.getCreateDate())); + } + + // 设置下载时客户端Excel的名称 + response.setContentType("application/octet-stream;charset=utf-8"); + response.setHeader("Content-Disposition", + "attachment;filename=" + new String(filename.getBytes(), "iso-8859-1"));// + ".xls" + + OutputStream ouputStream = response.getOutputStream(); + wb.write(ouputStream); + ouputStream.flush(); + ouputStream.close(); + } + +} diff --git a/src/main/java/lingtao/net/service/Finance5Service.java b/src/main/java/lingtao/net/service/Finance5Service.java new file mode 100644 index 0000000..02ee0ae --- /dev/null +++ b/src/main/java/lingtao/net/service/Finance5Service.java @@ -0,0 +1,399 @@ +package lingtao.net.service; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFDateUtil; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import lingtao.net.bean.Finance; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.dao.Finance3Mapper; +import lingtao.net.util.ExcelUtils; + +@Service +public class Finance5Service { + + @Autowired + private Finance3Mapper finance3Mapper; + + public List getFinance(Finance finance) { + return finance3Mapper.getFinance5(finance); + } + + public List getAllFilename(String creator) { + return finance3Mapper.getAllFilename5(creator); + } + + public Msg deleteDataByFilename(String filename, String realname) { + try { + finance3Mapper.deleteDataByFilename5(filename, realname); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + public Msg ajaxUploadExcel(MultipartFile file) throws Exception { + if (file.isEmpty()) { + throw new Exception("文件不存在!"); + } + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + InputStream in = null; + List> listob = null; + List list = new ArrayList(1000); + try { + in = file.getInputStream(); + listob = new ExcelUtils().getBankListByExcel(in, file.getOriginalFilename()); + } catch (IOException e) { + e.printStackTrace(); + } + String filename = file.getOriginalFilename(); + System.out.println(filename); + for (int i = 0; i < listob.size(); i++) { + synchronized (this) { + Finance vo = new Finance(); + List lo = listob.get(i); + if (lo.size() == 0 || lo.size() == 1 || lo.get(6) == "") { + System.out.println("++++++++++++++"); + continue; + } + + String addTime = String.valueOf(lo.get(0)).trim(); + if(addTime.equals("日期")) { + continue; + } + String supplier = String.valueOf(lo.get(1)).trim(); + String shopname = String.valueOf(lo.get(2)).trim(); + String kind = String.valueOf(lo.get(3)).trim(); + String kind2 = String.valueOf(lo.get(4)).trim(); + String orderNumber = String.valueOf(lo.get(5)).trim(); + String remark = String.valueOf(lo.get(6)).trim(); + remark = remark.replace("MM", "mm").replace("CM", "cm"); + if (remark.indexOf("mm") == -1 && remark.indexOf("cm") == -1) { + System.out.println(remark); + System.out.println("================="); + } + + // 数量 + String count = "#"; + // 拼版数 + String number = "#"; + // 所需张数 + double zhang = 0; + String total = ""; + try { + // 处理备注 + remark = remark.replace(",", ","); + number = cutSize(remark); + count = cutCount(remark); + if(remark.indexOf(",") > 0) { + String[] countList = count.split(","); + String[] numberList = number.split(","); + for(int j = 0;j < countList.length; j++) { + if (countList[j].equals("#") || numberList[j].equals("#")) { + zhang = 0; + }else { + zhang = Math.ceil(Double.valueOf(countList[j]) / Double.valueOf(numberList[j])); + } + total += ","+zhang; + } + total = total.substring(1); + }else { + if (count != "#" && number != "#") { + if (count.contains("*")) { + String[] countSplit = count.split("\\*"); + System.out.println(Double.valueOf(countSplit[0])); + System.out.println(Double.valueOf(countSplit[1])); + zhang = Math.ceil(Double.valueOf(countSplit[0]) * Double.valueOf(countSplit[1]) + / Double.valueOf(number)); + } else { + zhang = Math.ceil(Double.valueOf(count) / Double.valueOf(number)); + } + } + orderNumber = remark.substring(remark.indexOf("(") + 1, remark.indexOf(")")); + } + } catch (Exception e) { + System.out.println(remark); +// return Msg.fail(remark); + } + if (StringUtils.isNotEmpty(addTime)) { + Date javaDate = HSSFDateUtil.getJavaDate(Double.parseDouble(addTime)); + vo.setAddTime(javaDate); + } +// SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); +// Date add_date = formatter.parse(addTime);// 把字符串转为日期格式 + vo.setSupplier(supplier); + vo.setShopname(shopname); + vo.setKind(kind); + vo.setKind2(kind2); + vo.setOrderNumber(orderNumber); + vo.setFilename(filename); + vo.setCount(count); + vo.setNumber(number); + if(total.length() > 0) { + vo.setZhang(total); + }else { + vo.setZhang(String.valueOf(zhang)); + } + vo.setRemark(remark); + vo.setCreator(user.getRealname()); + list.add(vo); + // finance2Mapper.insertSelective(vo); + } + } + if (list.size() == 0) { + return Msg.fail("上传失败,请检查文件表头是否正确"); + } else if (list.size() > 0) { + finance3Mapper.insertForeach5(list); + } + in.close(); + return Msg.success(); + + } + + private String cutCount(String remark) { + int number = 0, count = 0, index = 0; + String totalCount = ""; + String counts = ""; + String[] countList = {}; + if( remark.indexOf(",") > 0) {//合包的拼版计算 + String[] total = remark.split(","); + for(int i = 0 ;i < total.length; i++) { + String[] lists = total[i].split("-"); + for(int j = 0; j < lists.length; j++) { + index = lists[j].indexOf("mm"); + if(index == -1) { + index = lists[j].indexOf("cm"); + } + + if(index > 0) { + counts = lists[j+1]; + break; + } + } + + if(counts.indexOf("各") > 0 && counts.indexOf("共") < 0) { + countList = counts.split("款"); + number = Integer.valueOf(countList[0].replace("各", "")); + count = Integer.valueOf(countList[1].substring(1, countList[1].length()-1)); + totalCount += "," + count * number; + }else if(counts.indexOf("共") > 0){ + int coutIndex = counts.indexOf("共"); + String countValue = counts.substring(coutIndex, counts.length()-1); + count = Integer.valueOf(countValue); + totalCount += "," + count; + }else { + totalCount += "," + Integer.valueOf(counts.substring(0, counts.length()-1)) * 1; + } + } + totalCount = totalCount.substring(1); + return totalCount; + }else {//单款尺寸 + String[] list = remark.split("-"); + for(int m = 0;m < list.length; m++) { + index = list[m].indexOf("mm"); + if(index == -1) { + index = list[m].indexOf("cm"); + } + if(index > 0) { + counts = list[m+1]; + break; + } + } + + if(counts.indexOf("各") > 0 && counts.indexOf("共") < 0 ) { + countList = counts.split("款"); + countList[1].substring(0, countList[1].length()-1); + number = Integer.valueOf(countList[0].replace("各", "")); + count = Integer.valueOf(countList[1].substring(1, countList[1].length()-1)); + count = count * number; + }else if(counts.indexOf("共") > 0){ + int coutIndex = counts.indexOf("共"); + String countValue = counts.substring(coutIndex+1, counts.length()-1); + count = Integer.valueOf(countValue); + }else { + count = Integer.valueOf(counts.substring(0, counts.length()-1)) * 1; + } + + return String.valueOf(count); + } + } + + private String cutSize(String remark) { + double length = 0,width = 0; + int sizeIndex = 0; + String totalSize = ""; + String size = ""; + String[] sizeList = {}; + double l = 440,w = 310; + if( remark.indexOf(",") > 0) {//合包的拼版计算 + String[] total = remark.split(","); + for(int i = 0 ;i < total.length; i++) { + String[] lists = total[i].split("-"); + for(int j = 0; j < lists.length; j++) { + sizeIndex = lists[j].indexOf("mm"); + if(sizeIndex == 0) { + sizeIndex = lists[j].indexOf("cm"); + } + + if(sizeIndex > 0) { + size = lists[j].replace("mm", ""); + size = size.replace("cm", ""); + break; + } + } + + if(size.indexOf("×") > 0 ) { + sizeList = size.split("×"); + }else if(size.indexOf("x") > 0){ + sizeList = size.split("x"); + } + + length = Double.valueOf(sizeList[0]); + width = Double.valueOf(sizeList[1]); + + //+3mm出血 + length += 6; + width += 6; + + if (length == l + 6 ) { + totalSize = String.valueOf(w/width); + continue; + }else if(width == w + 6) { + totalSize = String.valueOf(l/length); + continue; + }else if ((length > l || width > w) && (length > w || width > l)) { + totalSize = "#"; + continue; + } + + // 一张纸 能做多少个此类尺寸的产品 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + + totalSize += "," + String.valueOf(max); + } + + if(totalSize.indexOf("#") != 0) { + totalSize = totalSize.substring(1); + } + + return totalSize; + }else { + String[] list = remark.split("-"); + for(int m = 0;m < list.length; m++) { + sizeIndex = list[m].indexOf("mm"); + if(sizeIndex == 0) { + sizeIndex = list[m].indexOf("cm"); + } + + if(sizeIndex > 0) { + size = list[m].replace("mm", ""); + size = size.replace("cm", ""); + break; + } + } + + if(size.indexOf("×") > 0 ) { + sizeList = size.split("×"); + }else if(size.indexOf("x") > 0){ + sizeList = size.split("x"); + } + + length = Double.valueOf(sizeList[0]); + width = Double.valueOf(sizeList[1]); + //+3mm出血 + length += 6; + width += 6; + + if (length == l + 6 ) { + return String.valueOf(w/width); + }else if(width == w + 6) { + return String.valueOf(l/length); + }else if ((length > l || width > w) && (length > w || width > l)) { + return "#"; + } + // 一张纸 能做多少个此类尺寸的产品 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + return String.valueOf(max); + } + } + + @SuppressWarnings("resource") + public void excel(HttpServletResponse response, Finance finance) throws Exception { + response.setCharacterEncoding("UTF-8"); + List financesList = new ArrayList(); + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + finance.setCreator(user.getRealname()); + financesList = getFinance(finance); + + // 创建excel文件 + HSSFWorkbook wb = new HSSFWorkbook(); + // 创建sheet页 + HSSFSheet sheet = wb.createSheet("总表"); + String filename = ""; + // 创建标题行 + HSSFRow titleRow = sheet.createRow(0); + titleRow.createCell(0).setCellValue("日期"); + titleRow.createCell(1).setCellValue("供应商"); + titleRow.createCell(2).setCellValue("店铺"); + titleRow.createCell(3).setCellValue("大类别"); + titleRow.createCell(4).setCellValue("小类别"); + titleRow.createCell(5).setCellValue("订单号"); + titleRow.createCell(6).setCellValue("文件名"); + titleRow.createCell(7).setCellValue("数量"); + titleRow.createCell(8).setCellValue("拼版数"); + titleRow.createCell(9).setCellValue("张数"); + titleRow.createCell(10).setCellValue("导入人"); + titleRow.createCell(11).setCellValue("导入日期"); + // 遍历将数据放到excel列中 + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + for (Finance finances : financesList) { + filename = finance.getFilename(); + HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1); + dataRow.createCell(0).setCellValue(""); + if (finances.getAddTime() != null) { + dataRow.createCell(0).setCellValue(formatter.format(finances.getAddTime())); + } + dataRow.createCell(1).setCellValue(finances.getSupplier()); + dataRow.createCell(2).setCellValue(finances.getShopname()); + dataRow.createCell(3).setCellValue(finances.getKind()); + dataRow.createCell(4).setCellValue(finances.getKind2()); + dataRow.createCell(5).setCellValue(finances.getOrderNumber()); + dataRow.createCell(6).setCellValue(finances.getRemark()); + dataRow.createCell(7).setCellValue(finances.getCount()); + dataRow.createCell(8).setCellValue(finances.getNumber()); + dataRow.createCell(9).setCellValue(finances.getZhang()); + dataRow.createCell(10).setCellValue(finances.getCreator()); + dataRow.createCell(11).setCellValue(formatter.format(finances.getCreateDate())); + } + + // 设置下载时客户端Excel的名称 + response.setContentType("application/octet-stream;charset=utf-8"); + response.setHeader("Content-Disposition", + "attachment;filename=" + new String(filename.getBytes(), "iso-8859-1"));// + ".xls" + + OutputStream ouputStream = response.getOutputStream(); + wb.write(ouputStream); + ouputStream.flush(); + ouputStream.close(); + } + +} diff --git a/src/main/java/lingtao/net/service/Finance6Service.java b/src/main/java/lingtao/net/service/Finance6Service.java new file mode 100644 index 0000000..e33d827 --- /dev/null +++ b/src/main/java/lingtao/net/service/Finance6Service.java @@ -0,0 +1,399 @@ +package lingtao.net.service; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFDateUtil; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import lingtao.net.bean.Finance; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.dao.Finance3Mapper; +import lingtao.net.util.ExcelUtils; + +@Service +public class Finance6Service { + + @Autowired + private Finance3Mapper finance3Mapper; + + public List getFinance(Finance finance) { + return finance3Mapper.getFinance6(finance); + } + + public List getAllFilename(String creator) { + return finance3Mapper.getAllFilename6(creator); + } + + public Msg deleteDataByFilename(String filename, String realname) { + try { + finance3Mapper.deleteDataByFilename6(filename, realname); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + public Msg ajaxUploadExcel(MultipartFile file) throws Exception { + if (file.isEmpty()) { + throw new Exception("文件不存在!"); + } + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + InputStream in = null; + List> listob = null; + List list = new ArrayList(1000); + try { + in = file.getInputStream(); + listob = new ExcelUtils().getBankListByExcel(in, file.getOriginalFilename()); + } catch (IOException e) { + e.printStackTrace(); + } + String filename = file.getOriginalFilename(); + System.out.println(filename); + for (int i = 0; i < listob.size(); i++) { + synchronized (this) { + Finance vo = new Finance(); + List lo = listob.get(i); + if (lo.size() == 0 || lo.size() == 1 || lo.get(6) == "") { + System.out.println("++++++++++++++"); + continue; + } + + String addTime = String.valueOf(lo.get(0)).trim(); + if(addTime.equals("日期")) { + continue; + } + String supplier = String.valueOf(lo.get(1)).trim(); + String shopname = String.valueOf(lo.get(2)).trim(); + String kind = String.valueOf(lo.get(3)).trim(); + String kind2 = String.valueOf(lo.get(4)).trim(); + String orderNumber = String.valueOf(lo.get(5)).trim(); + String remark = String.valueOf(lo.get(6)).trim(); + remark = remark.replace("MM", "mm").replace("CM", "cm"); + if (remark.indexOf("mm") == -1 && remark.indexOf("cm") == -1) { + System.out.println(remark); + System.out.println("================="); + } + + // 数量 + String count = "#"; + // 拼版数 + String number = "#"; + // 所需张数 + double zhang = 0; + String total = ""; + try { + // 处理备注 + remark = remark.replace(",", ","); + number = cutSize(remark); + count = cutCount(remark); + if(remark.indexOf(",") > 0) { + String[] countList = count.split(","); + String[] numberList = number.split(","); + for(int j = 0;j < countList.length; j++) { + if (countList[j].equals("#") || numberList[j].equals("#")) { + zhang = 0; + }else { + zhang = Math.ceil(Double.valueOf(countList[j]) / Double.valueOf(numberList[j])); + } + total += ","+zhang; + } + total = total.substring(1); + }else { + if (count != "#" && number != "#") { + if (count.contains("*")) { + String[] countSplit = count.split("\\*"); + System.out.println(Double.valueOf(countSplit[0])); + System.out.println(Double.valueOf(countSplit[1])); + zhang = Math.ceil(Double.valueOf(countSplit[0]) * Double.valueOf(countSplit[1]) + / Double.valueOf(number)); + } else { + zhang = Math.ceil(Double.valueOf(count) / Double.valueOf(number)); + } + } + orderNumber = remark.substring(remark.indexOf("(") + 1, remark.indexOf(")")); + } + } catch (Exception e) { + System.out.println(remark); +// return Msg.fail(remark); + } + if (StringUtils.isNotEmpty(addTime)) { + Date javaDate = HSSFDateUtil.getJavaDate(Double.parseDouble(addTime)); + vo.setAddTime(javaDate); + } +// SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); +// Date add_date = formatter.parse(addTime);// 把字符串转为日期格式 + vo.setSupplier(supplier); + vo.setShopname(shopname); + vo.setKind(kind); + vo.setKind2(kind2); + vo.setOrderNumber(orderNumber); + vo.setFilename(filename); + vo.setCount(count); + vo.setNumber(number); + if(total.length() > 0) { + vo.setZhang(total); + }else { + vo.setZhang(String.valueOf(zhang)); + } + vo.setRemark(remark); + vo.setCreator(user.getRealname()); + list.add(vo); + // finance2Mapper.insertSelective(vo); + } + } + if (list.size() == 0) { + return Msg.fail("上传失败,请检查文件表头是否正确"); + } else if (list.size() > 0) { + finance3Mapper.insertForeach6(list); + } + in.close(); + return Msg.success(); + + } + + private String cutCount(String remark) { + int number = 0, count = 0, index = 0; + String totalCount = ""; + String counts = ""; + String[] countList = {}; + if( remark.indexOf(",") > 0) {//合包的拼版计算 + String[] total = remark.split(","); + for(int i = 0 ;i < total.length; i++) { + String[] lists = total[i].split("-"); + for(int j = 0; j < lists.length; j++) { + index = lists[j].indexOf("mm"); + if(index == -1) { + index = lists[j].indexOf("cm"); + } + + if(index > 0) { + counts = lists[j+1]; + break; + } + } + + if(counts.indexOf("各") > 0 && counts.indexOf("共") < 0) { + countList = counts.split("款"); + number = Integer.valueOf(countList[0].replace("各", "")); + count = Integer.valueOf(countList[1].substring(1, countList[1].length()-1)); + totalCount += "," + count * number; + }else if(counts.indexOf("共") > 0){ + int coutIndex = counts.indexOf("共"); + String countValue = counts.substring(coutIndex+1, counts.length()-1); + count = Integer.valueOf(countValue); + totalCount += "," + count; + }else { + totalCount += "," + Integer.valueOf(counts.substring(0, counts.length()-1)) * 1; + } + } + totalCount = totalCount.substring(1); + return totalCount; + }else {//单款尺寸 + String[] list = remark.split("-"); + for(int m = 0;m < list.length; m++) { + index = list[m].indexOf("mm"); + if(index == -1) { + index = list[m].indexOf("cm"); + } + if(index > 0) { + counts = list[m+1]; + break; + } + } + + if(counts.indexOf("各") > 0 && counts.indexOf("共") < 0 ) { + countList = counts.split("款"); + countList[1].substring(0, countList[1].length()-1); + number = Integer.valueOf(countList[0].replace("各", "")); + count = Integer.valueOf(countList[1].substring(1, countList[1].length()-1)); + count = count * number; + }else if(counts.indexOf("共") > 0){ + int coutIndex = counts.indexOf("共"); + String countValue = counts.substring(coutIndex+1, counts.length()-1); + count = Integer.valueOf(countValue); + }else { + count = Integer.valueOf(counts.substring(0, counts.length()-1)); + } + + return String.valueOf(count); + } + } + + private String cutSize(String remark) { + double length = 0,width = 0; + int sizeIndex = 0; + String totalSize = ""; + String size = ""; + String[] sizeList = {}; + double l = 425,w = 300; + if( remark.indexOf(",") > 0) {//合包的拼版计算 + String[] total = remark.split(","); + for(int i = 0 ;i < total.length; i++) { + String[] lists = total[i].split("-"); + for(int j = 0; j < lists.length; j++) { + sizeIndex = lists[j].indexOf("mm"); + if(sizeIndex == 0) { + sizeIndex = lists[j].indexOf("cm"); + } + + if(sizeIndex > 0) { + size = lists[j].replace("mm", ""); + size = size.replace("cm", ""); + break; + } + } + + if(size.indexOf("×") > 0 ) { + sizeList = size.split("×"); + }else if(size.indexOf("x") > 0){ + sizeList = size.split("x"); + } + + length = Double.valueOf(sizeList[0]); + width = Double.valueOf(sizeList[1]); + + //+4mm出血 + length += 8; + width += 8; + + if (length == l + 8 ) { + totalSize = String.valueOf(w/width); + continue; + }else if(width == w + 8) { + totalSize = String.valueOf(l/length); + continue; + }else if ((length > l || width > w) && (length > w || width > l)) { + totalSize = "#"; + continue; + } + + // 一张纸 能做多少个此类尺寸的产品 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + + totalSize += "," + String.valueOf(max); + } + + if(totalSize.indexOf("#") != 0) { + totalSize = totalSize.substring(1); + } + + return totalSize; + }else { + String[] list = remark.split("-"); + for(int m = 0;m < list.length; m++) { + sizeIndex = list[m].indexOf("mm"); + if(sizeIndex == 0) { + sizeIndex = list[m].indexOf("cm"); + } + + if(sizeIndex > 0) { + size = list[m].replace("mm", ""); + size = size.replace("cm", ""); + break; + } + } + + if(size.indexOf("×") > 0 ) { + sizeList = size.split("×"); + }else if(size.indexOf("x") > 0){ + sizeList = size.split("x"); + } + + length = Double.valueOf(sizeList[0]); + width = Double.valueOf(sizeList[1]); + //+4mm出血 + length += 8; + width += 8; + + if (length == l + 8 ) { + return String.valueOf(w/width); + }else if(width == w + 8) { + return String.valueOf(l/length); + }else if ((length > l || width > w) && (length > w || width > l)) { + return "#"; + } + // 一张纸 能做多少个此类尺寸的产品 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + return String.valueOf(max); + } + } + + @SuppressWarnings("resource") + public void excel(HttpServletResponse response, Finance finance) throws Exception { + response.setCharacterEncoding("UTF-8"); + List financesList = new ArrayList(); + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + finance.setCreator(user.getRealname()); + financesList = getFinance(finance); + + // 创建excel文件 + HSSFWorkbook wb = new HSSFWorkbook(); + // 创建sheet页 + HSSFSheet sheet = wb.createSheet("总表"); + String filename = ""; + // 创建标题行 + HSSFRow titleRow = sheet.createRow(0); + titleRow.createCell(0).setCellValue("日期"); + titleRow.createCell(1).setCellValue("供应商"); + titleRow.createCell(2).setCellValue("店铺"); + titleRow.createCell(3).setCellValue("大类别"); + titleRow.createCell(4).setCellValue("小类别"); + titleRow.createCell(5).setCellValue("订单号"); + titleRow.createCell(6).setCellValue("文件名"); + titleRow.createCell(7).setCellValue("数量"); + titleRow.createCell(8).setCellValue("拼版数"); + titleRow.createCell(9).setCellValue("张数"); + titleRow.createCell(10).setCellValue("导入人"); + titleRow.createCell(11).setCellValue("导入日期"); + // 遍历将数据放到excel列中 + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + for (Finance finances : financesList) { + filename = finance.getFilename(); + HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1); + dataRow.createCell(0).setCellValue(""); + if (finances.getAddTime() != null) { + dataRow.createCell(0).setCellValue(formatter.format(finances.getAddTime())); + } + dataRow.createCell(1).setCellValue(finances.getSupplier()); + dataRow.createCell(2).setCellValue(finances.getShopname()); + dataRow.createCell(3).setCellValue(finances.getKind()); + dataRow.createCell(4).setCellValue(finances.getKind2()); + dataRow.createCell(5).setCellValue(finances.getOrderNumber()); + dataRow.createCell(6).setCellValue(finances.getRemark()); + dataRow.createCell(7).setCellValue(finances.getCount()); + dataRow.createCell(8).setCellValue(finances.getNumber()); + dataRow.createCell(9).setCellValue(finances.getZhang()); + dataRow.createCell(10).setCellValue(finances.getCreator()); + dataRow.createCell(11).setCellValue(formatter.format(finances.getCreateDate())); + } + + // 设置下载时客户端Excel的名称 + response.setContentType("application/octet-stream;charset=utf-8"); + response.setHeader("Content-Disposition", + "attachment;filename=" + new String(filename.getBytes(), "iso-8859-1"));// + ".xls" + + OutputStream ouputStream = response.getOutputStream(); + wb.write(ouputStream); + ouputStream.flush(); + ouputStream.close(); + } + +} diff --git a/src/main/java/lingtao/net/service/Finance7Service.java b/src/main/java/lingtao/net/service/Finance7Service.java new file mode 100644 index 0000000..7e65d92 --- /dev/null +++ b/src/main/java/lingtao/net/service/Finance7Service.java @@ -0,0 +1,399 @@ +package lingtao.net.service; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFDateUtil; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import lingtao.net.bean.Finance; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.dao.Finance3Mapper; +import lingtao.net.util.ExcelUtils; + +@Service +public class Finance7Service { + + @Autowired + private Finance3Mapper finance3Mapper; + + public List getFinance(Finance finance) { + return finance3Mapper.getFinance7(finance); + } + + public List getAllFilename(String creator) { + return finance3Mapper.getAllFilename7(creator); + } + + public Msg deleteDataByFilename(String filename, String realname) { + try { + finance3Mapper.deleteDataByFilename7(filename, realname); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + public Msg ajaxUploadExcel(MultipartFile file) throws Exception { + if (file.isEmpty()) { + throw new Exception("文件不存在!"); + } + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + InputStream in = null; + List> listob = null; + List list = new ArrayList(1000); + try { + in = file.getInputStream(); + listob = new ExcelUtils().getBankListByExcel(in, file.getOriginalFilename()); + } catch (IOException e) { + e.printStackTrace(); + } + String filename = file.getOriginalFilename(); + System.out.println(filename); + for (int i = 0; i < listob.size(); i++) { + synchronized (this) { + Finance vo = new Finance(); + List lo = listob.get(i); + if (lo.size() == 0 || lo.size() == 1 || lo.get(6) == "") { + System.out.println("++++++++++++++"); + continue; + } + + String addTime = String.valueOf(lo.get(0)).trim(); + if(addTime.equals("日期")) { + continue; + } + String supplier = String.valueOf(lo.get(1)).trim(); + String shopname = String.valueOf(lo.get(2)).trim(); + String kind = String.valueOf(lo.get(3)).trim(); + String kind2 = String.valueOf(lo.get(4)).trim(); + String orderNumber = String.valueOf(lo.get(5)).trim(); + String remark = String.valueOf(lo.get(6)).trim(); + remark = remark.replace("MM", "mm").replace("CM", "cm"); + if (remark.indexOf("mm") == -1 && remark.indexOf("cm") == -1) { + System.out.println(remark); + System.out.println("================="); + } + + // 数量 + String count = "#"; + // 拼版数 + String number = "#"; + // 所需张数 + double zhang = 0; + String total = ""; + try { + // 处理备注 + remark = remark.replace(",", ","); + number = cutSize(remark); + count = cutCount(remark); + if(remark.indexOf(",") > 0) { + String[] countList = count.split(","); + String[] numberList = number.split(","); + for(int j = 0;j < countList.length; j++) { + if (countList[j].equals("#") || numberList[j].equals("#")) { + zhang = 0; + }else { + zhang = Math.ceil(Double.valueOf(countList[j]) / Double.valueOf(numberList[j])); + } + total += ","+zhang; + } + total = total.substring(1); + }else { + if (count != "#" && number != "#") { + if (count.contains("*")) { + String[] countSplit = count.split("\\*"); + System.out.println(Double.valueOf(countSplit[0])); + System.out.println(Double.valueOf(countSplit[1])); + zhang = Math.ceil(Double.valueOf(countSplit[0]) * Double.valueOf(countSplit[1]) + / Double.valueOf(number)); + } else { + zhang = Math.ceil(Double.valueOf(count) / Double.valueOf(number)); + } + } + orderNumber = remark.substring(remark.indexOf("(") + 1, remark.indexOf(")")); + } + } catch (Exception e) { + System.out.println(remark); +// return Msg.fail(remark); + } + if (StringUtils.isNotEmpty(addTime)) { + Date javaDate = HSSFDateUtil.getJavaDate(Double.parseDouble(addTime)); + vo.setAddTime(javaDate); + } +// SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); +// Date add_date = formatter.parse(addTime);// 把字符串转为日期格式 + vo.setSupplier(supplier); + vo.setShopname(shopname); + vo.setKind(kind); + vo.setKind2(kind2); + vo.setOrderNumber(orderNumber); + vo.setFilename(filename); + vo.setCount(count); + vo.setNumber(number); + if(total.length() > 0) { + vo.setZhang(total); + }else { + vo.setZhang(String.valueOf(zhang)); + } + vo.setRemark(remark); + vo.setCreator(user.getRealname()); + list.add(vo); + // finance2Mapper.insertSelective(vo); + } + } + if (list.size() == 0) { + return Msg.fail("上传失败,请检查文件表头是否正确"); + } else if (list.size() > 0) { + finance3Mapper.insertForeach7(list); + } + in.close(); + return Msg.success(); + + } + + private String cutCount(String remark) { + int number = 0, count = 0, index = 0; + String totalCount = ""; + String counts = ""; + String[] countList = {}; + if( remark.indexOf(",") > 0) {//合包的拼版计算 + String[] total = remark.split(","); + for(int i = 0 ;i < total.length; i++) { + String[] lists = total[i].split("-"); + for(int j = 0; j < lists.length; j++) { + index = lists[j].indexOf("mm"); + if(index == -1) { + index = lists[j].indexOf("cm"); + } + + if(index > 0) { + counts = lists[j+1]; + break; + } + } + + if(counts.indexOf("各") > 0 && counts.indexOf("共") < 0) { + countList = counts.split("款"); + number = Integer.valueOf(countList[0].replace("各", "")); + count = Integer.valueOf(countList[1].substring(1, countList[1].length()-1)); + totalCount += "," + count * number; + }else if(counts.indexOf("共") > 0){ + int coutIndex = counts.indexOf("共"); + String countValue = counts.substring(coutIndex+1, counts.length()-1); + count = Integer.valueOf(countValue); + totalCount += "," + count; + }else { + totalCount += "," + Integer.valueOf(counts.substring(0, counts.length()-1)) * 1; + } + } + totalCount = totalCount.substring(1); + return totalCount; + }else {//单款尺寸 + String[] list = remark.split("-"); + for(int m = 0;m < list.length; m++) { + index = list[m].indexOf("mm"); + if(index == -1) { + index = list[m].indexOf("cm"); + } + if(index > 0) { + counts = list[m+1]; + break; + } + } + + if(counts.indexOf("各") > 0 && counts.indexOf("共") < 0 ) { + countList = counts.split("款"); + countList[1].substring(0, countList[1].length()-1); + number = Integer.valueOf(countList[0].replace("各", "")); + count = Integer.valueOf(countList[1].substring(1, countList[1].length()-1)); + count = count * number; + }else if(counts.indexOf("共") > 0){ + int coutIndex = counts.indexOf("共"); + String countValue = counts.substring(coutIndex+1, counts.length()-1); + count = Integer.valueOf(countValue); + }else { + count = Integer.valueOf(counts.substring(0, counts.length()-1)); + } + + return String.valueOf(count); + } + } + + private String cutSize(String remark) { + double length = 0,width = 0; + int sizeIndex = 0; + String totalSize = ""; + String size = ""; + String[] sizeList = {}; + double l = 420,w = 280; + if( remark.indexOf(",") > 0) {//合包的拼版计算 + String[] total = remark.split(","); + for(int i = 0 ;i < total.length; i++) { + String[] lists = total[i].split("-"); + for(int j = 0; j < lists.length; j++) { + sizeIndex = lists[j].indexOf("mm"); + if(sizeIndex == 0) { + sizeIndex = lists[j].indexOf("cm"); + } + + if(sizeIndex > 0) { + size = lists[j].replace("mm", ""); + size = size.replace("cm", ""); + break; + } + } + + if(size.indexOf("×") > 0 ) { + sizeList = size.split("×"); + }else if(size.indexOf("x") > 0){ + sizeList = size.split("x"); + } + + length = Double.valueOf(sizeList[0]); + width = Double.valueOf(sizeList[1]); + + //+2mm出血 + length += 4; + width += 4; + + if (length == l + 4 ) { + totalSize = String.valueOf(w/width); + continue; + }else if(width == w + 4) { + totalSize = String.valueOf(l/length); + continue; + }else if ((length > l || width > w) && (length > w || width > l)) { + totalSize = "#"; + continue; + } + + // 一张纸 能做多少个此类尺寸的产品 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + + totalSize += "," + String.valueOf(max); + } + + if(totalSize.indexOf("#") != 0) { + totalSize = totalSize.substring(1); + } + + return totalSize; + }else { + String[] list = remark.split("-"); + for(int m = 0;m < list.length; m++) { + sizeIndex = list[m].indexOf("mm"); + if(sizeIndex == 0) { + sizeIndex = list[m].indexOf("cm"); + } + + if(sizeIndex > 0) { + size = list[m].replace("mm", ""); + size = size.replace("cm", ""); + break; + } + } + + if(size.indexOf("×") > 0 ) { + sizeList = size.split("×"); + }else if(size.indexOf("x") > 0){ + sizeList = size.split("x"); + } + + length = Double.valueOf(sizeList[0]); + width = Double.valueOf(sizeList[1]); + //+2mm出血 + length += 4; + width += 4; + + if (length == l + 4 ) { + return String.valueOf(w/width); + }else if(width == w + 4) { + return String.valueOf(l/length); + }else if ((length > l || width > w) && (length > w || width > l)) { + return "#"; + } + // 一张纸 能做多少个此类尺寸的产品 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + return String.valueOf(max); + } + } + + @SuppressWarnings("resource") + public void excel(HttpServletResponse response, Finance finance) throws Exception { + response.setCharacterEncoding("UTF-8"); + List financesList = new ArrayList(); + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + finance.setCreator(user.getRealname()); + financesList = getFinance(finance); + + // 创建excel文件 + HSSFWorkbook wb = new HSSFWorkbook(); + // 创建sheet页 + HSSFSheet sheet = wb.createSheet("总表"); + String filename = ""; + // 创建标题行 + HSSFRow titleRow = sheet.createRow(0); + titleRow.createCell(0).setCellValue("日期"); + titleRow.createCell(1).setCellValue("供应商"); + titleRow.createCell(2).setCellValue("店铺"); + titleRow.createCell(3).setCellValue("大类别"); + titleRow.createCell(4).setCellValue("小类别"); + titleRow.createCell(5).setCellValue("订单号"); + titleRow.createCell(6).setCellValue("文件名"); + titleRow.createCell(7).setCellValue("数量"); + titleRow.createCell(8).setCellValue("拼版数"); + titleRow.createCell(9).setCellValue("张数"); + titleRow.createCell(10).setCellValue("导入人"); + titleRow.createCell(11).setCellValue("导入日期"); + // 遍历将数据放到excel列中 + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + for (Finance finances : financesList) { + filename = finance.getFilename(); + HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1); + dataRow.createCell(0).setCellValue(""); + if (finances.getAddTime() != null) { + dataRow.createCell(0).setCellValue(formatter.format(finances.getAddTime())); + } + dataRow.createCell(1).setCellValue(finances.getSupplier()); + dataRow.createCell(2).setCellValue(finances.getShopname()); + dataRow.createCell(3).setCellValue(finances.getKind()); + dataRow.createCell(4).setCellValue(finances.getKind2()); + dataRow.createCell(5).setCellValue(finances.getOrderNumber()); + dataRow.createCell(6).setCellValue(finances.getRemark()); + dataRow.createCell(7).setCellValue(finances.getCount()); + dataRow.createCell(8).setCellValue(finances.getNumber()); + dataRow.createCell(9).setCellValue(finances.getZhang()); + dataRow.createCell(10).setCellValue(finances.getCreator()); + dataRow.createCell(11).setCellValue(formatter.format(finances.getCreateDate())); + } + + // 设置下载时客户端Excel的名称 + response.setContentType("application/octet-stream;charset=utf-8"); + response.setHeader("Content-Disposition", + "attachment;filename=" + new String(filename.getBytes(), "iso-8859-1"));// + ".xls" + + OutputStream ouputStream = response.getOutputStream(); + wb.write(ouputStream); + ouputStream.flush(); + ouputStream.close(); + } + +} diff --git a/src/main/java/lingtao/net/service/FinanceDifferenceService.java b/src/main/java/lingtao/net/service/FinanceDifferenceService.java new file mode 100644 index 0000000..ae4f81c --- /dev/null +++ b/src/main/java/lingtao/net/service/FinanceDifferenceService.java @@ -0,0 +1,183 @@ +package lingtao.net.service; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.servlet.http.HttpServletResponse; + +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import lingtao.net.bean.FinanceDifference; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.dao.FinanceDifferenceMapper; +import lingtao.net.util.ExcelUtils; + +@Service +public class FinanceDifferenceService { + + @Autowired + private FinanceDifferenceMapper differenceMapper; + + public List get(FinanceDifference difference) { + return differenceMapper.get(difference); + } + + public Msg ajaxUploadExcel(MultipartFile file) throws Exception { + if (file.isEmpty()) { + throw new Exception("文件不存在!"); + } + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + InputStream in = null; + List> listob = null; + List list = new ArrayList(1000); + try { + in = file.getInputStream(); + listob = new ExcelUtils().getBankListByExcel(in, file.getOriginalFilename()); + } catch (IOException e) { + e.printStackTrace(); + } + String openOrderNumber = ""; + String filename = file.getOriginalFilename(); + System.out.println(filename); + for (int i = 0; i < listob.size(); i++) { + synchronized (this) { + FinanceDifference vo = new FinanceDifference(); + List lo = listob.get(i); + if (lo.size() == 0 || lo.size() == 1 || lo.get(4) == "") { + System.out.println("++++++++++++++"); + continue; + } + String orderNumber = String.valueOf(lo.get(0)).trim(); + String shopname = String.valueOf(lo.get(1)).trim(); + String wangwang = String.valueOf(lo.get(2)).trim(); + String payTime = String.valueOf(lo.get(3)).trim(); + String price = String.valueOf(lo.get(4)).trim(); + String remark = String.valueOf(lo.get(5)).trim(); + String taobaoStatus = String.valueOf(lo.get(6)).trim(); + SimpleDateFormat formatter = null; + if (payTime.contains("-")) { + formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + } else if (payTime.contains("/")) { + formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + } + Date pay_time = formatter.parse(payTime);// 把字符串转为日期格式 + vo.setOrderNumber(orderNumber); + vo.setShopname(shopname); + vo.setWangwang(wangwang); + vo.setPayTime(pay_time); + vo.setPrice(price); + vo.setRemark(remark); + vo.setTaobaoStatus(taobaoStatus); + try { + openOrderNumber = cutOrderNumber(remark); + } catch (Exception e) { + System.out.println(remark); + } + // openOrderNumber = remark.replaceAll("[^(0-9)]", ""); + vo.setOpenOrderNumber(openOrderNumber); + vo.setFilename(filename); + vo.setCreator(user.getRealname()); + list.add(vo); + } + } + if (list.size() > 0) { + differenceMapper.insertForeach(list); + } + in.close(); + return Msg.success(); + } + + private String cutOrderNumber(String remark) { + // 获取字符串中的数字 + // 这个15是指连续数字的最少个数 + Pattern p = Pattern.compile("\\d{15,}"); + Matcher m = p.matcher(remark); + String openOrder = ""; + while (m.find()) { + openOrder = m.group(); + } + if (remark.contains("S_")) { + if (remark.contains("C")) { + return "S_C1_" + openOrder; + } else { + return "S_" + openOrder; + } + } + return openOrder; + } + + public List getAllFilename(String creator) { + return differenceMapper.getAllFilename(creator); + } + + @SuppressWarnings("resource") + public void excel(HttpServletResponse response, FinanceDifference difference) throws Exception { + response.setCharacterEncoding("UTF-8"); + List differencesList = new ArrayList(); + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + difference.setCreator(user.getRealname()); + differencesList = get(difference); + + // 创建excel文件 + HSSFWorkbook wb = new HSSFWorkbook(); + // 创建sheet页 + HSSFSheet sheet = wb.createSheet("总表"); + String filename = ""; + // 创建标题行 + HSSFRow titleRow = sheet.createRow(0); + titleRow.createCell(0).setCellValue("订单号"); + titleRow.createCell(1).setCellValue("店铺"); + titleRow.createCell(2).setCellValue("旺旺"); + titleRow.createCell(3).setCellValue("付款时间"); + titleRow.createCell(4).setCellValue("金额"); + titleRow.createCell(5).setCellValue("备注"); + titleRow.createCell(6).setCellValue("淘宝状态"); + titleRow.createCell(7).setCellValue("拆分订单"); + titleRow.createCell(8).setCellValue("导入人"); + titleRow.createCell(9).setCellValue("导入日期"); + // 遍历将数据放到excel列中 + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + for (FinanceDifference differences : differencesList) { + filename = difference.getFilename(); + HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1); + dataRow.createCell(0).setCellValue(differences.getOrderNumber()); + dataRow.createCell(1).setCellValue(differences.getShopname()); + dataRow.createCell(3).setCellValue(""); + if (differences.getPayTime() != null) { + dataRow.createCell(3).setCellValue(formatter.format(differences.getPayTime())); + } + dataRow.createCell(2).setCellValue(differences.getWangwang()); + dataRow.createCell(4).setCellValue(differences.getPrice()); + dataRow.createCell(5).setCellValue(differences.getRemark()); + dataRow.createCell(6).setCellValue(differences.getTaobaoStatus()); + dataRow.createCell(7).setCellValue(differences.getOpenOrderNumber()); + dataRow.createCell(8).setCellValue(differences.getCreator()); + dataRow.createCell(9).setCellValue(formatter.format(differences.getCreateDate())); + } + + // 设置下载时客户端Excel的名称 + response.setContentType("application/octet-stream;charset=utf-8"); + response.setHeader("Content-Disposition", + "attachment;filename=" + new String(filename.getBytes(), "iso-8859-1"));// + ".xls" + + OutputStream ouputStream = response.getOutputStream(); + wb.write(ouputStream); + ouputStream.flush(); + ouputStream.close(); + } + +} diff --git a/src/main/java/lingtao/net/service/FinanceExtractService.java b/src/main/java/lingtao/net/service/FinanceExtractService.java new file mode 100644 index 0000000..d57baab --- /dev/null +++ b/src/main/java/lingtao/net/service/FinanceExtractService.java @@ -0,0 +1,368 @@ +package lingtao.net.service; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import lingtao.net.bean.FinanceExtract; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.dao.FinanceExtractMapper; +import lingtao.net.util.ExcelUtils; + +@Service +public class FinanceExtractService { + + @Autowired + private FinanceExtractMapper financeExtractMapper; + + public List getFinanceExtract(FinanceExtract financeExtract) { + return financeExtractMapper.getFinanceExtract(financeExtract); + } + + public List getFilename_extract(String creator) { + return financeExtractMapper.getFilename_extract(creator); + } + + public Msg deleteDataByFilename(String filename, String realname) { + try { + financeExtractMapper.deleteDataByFilename(filename, realname); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + public Msg ajaxUploadExcel(MultipartFile file) throws Exception { + if (file.isEmpty()) { + throw new Exception("文件不存在!"); + } + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + InputStream in = null; + List> listob = null; + List list = new ArrayList(1000); + try { + in = file.getInputStream(); + listob = new ExcelUtils().getBankListByExcel(in, file.getOriginalFilename()); + } catch (IOException e) { + e.printStackTrace(); + } + String filename = file.getOriginalFilename(); + System.out.println(filename); + for (int i = 0; i < listob.size(); i++) { + synchronized (this) { + FinanceExtract vo = new FinanceExtract(); + List lo = listob.get(i); + if (lo.size() == 0 || lo.get(1) == "") { + System.out.println("++++++++++++++"); + continue; + } + String orderNumber = String.valueOf(lo.get(0)).trim(); + String remark = String.valueOf(lo.get(1)).trim(); + if (remark.indexOf("mm") == -1 && remark.indexOf("cm") == -1) { + System.out.println(remark); + System.out.println("================="); + } + // 尺寸 + String size = "#"; + // 长 + String length = "#"; + // 宽 + String width = "#"; + // 高 + String height = "#"; + // 数量 + String count = "#"; + try { + // 处理备注 + String cutSizeStr = remark; + String cutCountStr = remark; + size = cutSize(cutSizeStr); + if (size != "#" || !"#".equals(size)) { + if (size.contains("+")) { + String[] sizeSplit = size.split("\\+"); +// System.out.println(Double.valueOf(sizeSplit[0])); +// System.out.println(Double.valueOf(sizeSplit[1])); + length = sizeSplit[0]; + width = sizeSplit[1]; + } + } + count = cutCount(cutCountStr); + orderNumber = remark.substring(remark.indexOf("(") + 1, remark.indexOf(")")); + } catch (Exception e) { + System.out.println(remark); + } + vo.setOrderNumber(orderNumber); + vo.setFilename(filename); + vo.setLength(length); + vo.setWidth(width); + vo.setHeight(height); + vo.setCount(count); + vo.setRemark(remark); + vo.setCreator(user.getRealname()); + list.add(vo); + } + } + if (list.size() == 0) { + return Msg.fail("上传失败,请检查文件表头是否正确"); + } else if (list.size() > 0) { + financeExtractMapper.insertForeach(list); + } + in.close(); + return Msg.success(); + + } + + private String cutCount(String remark) { + remark = remark.replaceAll(" ", "").replace("x", "X").replace("×", "X").replace("(", "(").replace(")", ")"); + String countStr = ""; + String numberStr = ""; + Integer number; + Integer count; + int indexM = remark.indexOf("m"); + int indexZhang = remark.indexOf("张"); + int indexGe = remark.indexOf("个"); + int indexTao = remark.indexOf("套"); + int indexMei = remark.indexOf("枚"); + // 印艺,尺寸是做好的,直接提取 + if (remark.contains(".pdf")) { + String newRemarkYY = remark.substring(remark.indexOf("-切") + 2); + countStr = newRemarkYY.substring(newRemarkYY.indexOf("-") + 1, newRemarkYY.indexOf("Z-")); + return countStr; + } + if (remark.indexOf("张") != -1 && indexZhang - indexM < 15) { + if (remark.indexOf("m-") == -1) { + countStr = remark.substring(remark.indexOf("m") + 1, remark.indexOf("张")); + } else { + countStr = remark.substring(remark.indexOf("m-") + 2, remark.indexOf("张")); + } + } else if (remark.indexOf("个") != -1 && indexGe - indexM < 15) { + if (remark.indexOf("m-") == -1) { + countStr = remark.substring(remark.indexOf("m") + 1, remark.indexOf("个")); + } else { + countStr = remark.substring(remark.indexOf("m-") + 2, remark.indexOf("个")); + } + } else if (remark.indexOf("套") != -1 && indexTao - indexM < 15) { + if (remark.indexOf("m-") == -1) { + countStr = remark.substring(remark.indexOf("m") + 1, remark.indexOf("套")); + } else { + countStr = remark.substring(remark.indexOf("m-") + 2, remark.indexOf("套")); + } + } else if (remark.indexOf("枚") != -1 && indexMei - indexM < 15) { + if (remark.indexOf("m-") == -1) { + countStr = remark.substring(remark.indexOf("m") + 1, remark.indexOf("枚")); + } else { + countStr = remark.substring(remark.indexOf("m-") + 2, remark.indexOf("枚")); + } + } + // 第一个“款”的位置 + int firstK = countStr.indexOf("款"); + // 第一个“各”的位置 + int firstGe = countStr.indexOf("各"); + // 第二个“款”的位置 + int countStrSecondK = countStr.indexOf("款", firstK + 1); + // 第3个“款”的位置 + int countStrThirdK = countStr.indexOf("款", countStrSecondK + 1); + if (countStrSecondK > 0 && countStrThirdK > 0) { + return "#"; + } + // “共***张” + if (countStr.contains("共")) { + String[] split = countStr.split("共"); + countStr = split[1].replaceAll("[^(0-9)]", ""); + return "" + countStr; + } + // “合计***张” + if (countStr.contains("合计")) { + String[] split = countStr.split("合计"); + countStr = split[1].replaceAll("[^(0-9)]", ""); + return "" + countStr; + } + // “总的***张” + if (countStr.contains("总")) { + String[] split = countStr.split("总"); + countStr = split[1].replaceAll("[^(0-9)]", ""); + return "" + countStr; + } + // “***款各***张” + if (firstGe > 0) { + String[] split = countStr.split("各"); + numberStr = split[0]; + countStr = split[1]; + numberStr = numberStr.replaceAll("[^(0-9)]", ""); + countStr = countStr.replaceAll("[^(0-9)]", ""); + if (StringUtils.isEmpty(numberStr)) { + return "#"; + } + number = Integer.valueOf(numberStr); + count = Integer.valueOf(countStr); + if (number == 1 || count == 1) { + return "" + number * count; + } + return number + "*" + count; + } + // **款**张 + if (firstK > 0) { + String[] split = countStr.split("款"); + numberStr = split[0]; + countStr = split[1]; + if (countStrSecondK > 0) { + countStr = split[2]; + } + numberStr = numberStr.replaceAll("[^(0-9)]", ""); + countStr = countStr.replaceAll("[^(0-9)]", ""); + if (StringUtils.isEmpty(numberStr)) { + return "#"; + } + number = Integer.valueOf(numberStr); + count = Integer.valueOf(countStr); + if (number == 1 || count == 1) { + return "" + number * count; + } + return number + "*" + count; + } + countStr = countStr.replaceAll("[^(0-9)]", ""); + return countStr; + } + + private String cutSize(String remark) { + remark = remark.replaceAll(" ", "").replace("x", "X").replace("×", "X").replace("(", "(").replace(")", ")") + .replace("专版打印", "").replace("下", "").replace("上", "").replace("专版", "").replace("多拍返10元", ""); + // 第一个X的位置 + int firstX = remark.indexOf("X"); + // 第二个X的位置 + int secondX = remark.indexOf("X", firstX + 1); + int secondmm = remark.indexOf("mm", remark.indexOf("mm") + 1); + if (secondX > 0 && secondmm > 0) { + return "#"; + } + // System.out.println(remark); + String size = ""; + double length; + double width; + String regex = "([1-9]\\d*\\.?\\d+)|(0\\.\\d*[1-9])|(\\d+)"; + // 没有mm && 有cm + if (remark.indexOf("mm") == -1 && remark.indexOf("cm") != -1) { + String l = remark.substring(remark.indexOf("X") - 3, remark.indexOf("X")); + String w = remark.substring(remark.indexOf("X") + 1, remark.indexOf("cm")); + // 如果l里有小数点,往前数5位 + if (l.indexOf(".") != -1) { + Pattern pattern = Pattern.compile(regex); + l = remark.substring(remark.indexOf("X") - 5, remark.indexOf("X")); + Matcher matcher = pattern.matcher(l); + while (matcher.find()) { + l = matcher.group(); + } + } else { + l = l.replaceAll("[^(0-9)]", ""); + } + size = l + "X" + w; + String[] split = size.split("X"); + length = Double.valueOf(split[0]) * 10; + if ("按比例".equals(split[1])) { + width = Double.valueOf(split[0]) * 10; + } else { + width = Double.valueOf(split[1]) * 10; + } + size = length + "+" + width; + } else { + // 印艺,没有毫米 + if (remark.contains(".pdf")) { + String newRemarkYY = remark.substring(remark.indexOf("-切") + 2); + System.out.println(newRemarkYY); + size = newRemarkYY.substring(0, newRemarkYY.indexOf("-")); + } else { + // 有毫米 + String l = remark.substring(remark.indexOf("X") - 3, remark.indexOf("X")); + String w = remark.substring(remark.indexOf("X") + 1, remark.indexOf("mm")); + // 如果l里有小数点,往前数5位 + if (l.indexOf(".") != -1) { + l = remark.substring(remark.indexOf("X") - 5, remark.indexOf("X")); + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(l); + while (matcher.find()) { + l = matcher.group(); + } + } else { + l = l.replaceAll("[^(0-9)]", ""); + } + size = l + "X" + w; + } + String[] split = size.split("X"); + length = Double.valueOf(split[0]); + if ("按比例".equals(split[1])) { + width = Double.valueOf(split[0]); + } else { + width = Double.valueOf(split[1]); + } + size = length + "+" + width; + } + return size; + } + + @SuppressWarnings("resource") + public void excel(HttpServletResponse response, FinanceExtract financeExtract) throws Exception { + response.setCharacterEncoding("UTF-8"); + List financeExtractsList = new ArrayList(); + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + financeExtract.setCreator(user.getRealname()); + financeExtractsList = getFinanceExtract(financeExtract); + + // 创建excel文件 + HSSFWorkbook wb = new HSSFWorkbook(); + // 创建sheet页 + HSSFSheet sheet = wb.createSheet("总表"); + String filename = ""; + // 创建标题行 + HSSFRow titleRow = sheet.createRow(0); + titleRow.createCell(0).setCellValue("订单号"); + titleRow.createCell(1).setCellValue("文件名"); + titleRow.createCell(2).setCellValue("长"); + titleRow.createCell(3).setCellValue("宽"); + titleRow.createCell(4).setCellValue("高"); + titleRow.createCell(5).setCellValue("数量"); + titleRow.createCell(6).setCellValue("导入人"); + titleRow.createCell(7).setCellValue("导入日期"); + // 遍历将数据放到excel列中 + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + for (FinanceExtract financeExtracts : financeExtractsList) { + filename = financeExtract.getFilename(); + HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1); + dataRow.createCell(0).setCellValue(financeExtracts.getOrderNumber()); + dataRow.createCell(1).setCellValue(financeExtracts.getRemark()); + dataRow.createCell(2).setCellValue(financeExtracts.getLength()); + dataRow.createCell(3).setCellValue(financeExtracts.getWidth()); + dataRow.createCell(4).setCellValue(financeExtracts.getHeight()); + dataRow.createCell(5).setCellValue(financeExtracts.getCount()); + dataRow.createCell(6).setCellValue(financeExtracts.getCreator()); + dataRow.createCell(7).setCellValue(formatter.format(financeExtracts.getCreateDate())); + } + + // 设置下载时客户端Excel的名称 + response.setContentType("application/octet-stream;charset=utf-8"); + response.setHeader("Content-Disposition", + "attachment;filename=" + new String(filename.getBytes(), "iso-8859-1"));// + ".xls" + + OutputStream ouputStream = response.getOutputStream(); + wb.write(ouputStream); + ouputStream.flush(); + ouputStream.close(); + } + +} diff --git a/src/main/java/lingtao/net/service/FinanceService.java b/src/main/java/lingtao/net/service/FinanceService.java new file mode 100644 index 0000000..a222eec --- /dev/null +++ b/src/main/java/lingtao/net/service/FinanceService.java @@ -0,0 +1,401 @@ +package lingtao.net.service; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFDateUtil; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import lingtao.net.bean.Finance; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.dao.FinanceMapper; +import lingtao.net.util.ExcelUtils; + +@Service +public class FinanceService { + + @Autowired + private FinanceMapper financeMapper; + + public List getFinance(Finance finance) { + return financeMapper.getFinance(finance); + } + + public List getAllFilename(String creator) { + return financeMapper.getAllFilename(creator); + } + + public Msg deleteDataByFilename(String filename, String realname) { + try { + financeMapper.deleteDataByFilename(filename, realname); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + public Msg ajaxUploadExcel(MultipartFile file) throws Exception { + if (file.isEmpty()) { + throw new Exception("文件不存在!"); + } + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + InputStream in = null; + List> listob = null; + List list = new ArrayList(1000); + try { + in = file.getInputStream(); + listob = new ExcelUtils().getBankListByExcel(in, file.getOriginalFilename()); + } catch (IOException e) { + e.printStackTrace(); + } + String filename = file.getOriginalFilename(); + System.out.println(filename); + for (int i = 0; i < listob.size(); i++) { + synchronized (this) { + Finance vo = new Finance(); + List lo = listob.get(i); + if (lo.size() == 0 || lo.size() == 1 || lo.get(6) == "") { + System.out.println("++++++++++++++"); + continue; + } + String addTime = String.valueOf(lo.get(0)).trim(); + String supplier = String.valueOf(lo.get(1)).trim(); + String shopname = String.valueOf(lo.get(2)).trim(); + String kind = String.valueOf(lo.get(3)).trim(); + String kind2 = String.valueOf(lo.get(4)).trim(); + String orderNumber = String.valueOf(lo.get(5)).trim(); + String remark = String.valueOf(lo.get(6)).trim(); + remark = remark.replace("MM", "mm").replace("CM", "mm"); + if (remark.indexOf("mm") == -1 && remark.indexOf("cm") == -1) { + System.out.println(remark); + System.out.println("================="); + } + // 判断数据是否已经存在 + + /* + * String checkAccountNumber = financeMapper.checkAccountNumber(orderNumber); if + * (StringUtils.isNotEmpty(checkAccountNumber)) { continue; } + */ + + // 数量 + String count = "#"; + // 拼版数 + String number = "#"; + // 所需张数 + double zhang = 0; + try { + // 处理备注 + String cutSizeStr = remark; + String cutCountStr = remark; + number = cutSize(cutSizeStr); + count = cutCount(cutCountStr); + if (count != "#" && number != "#") { + if (count.contains("*")) { + String[] countSplit = count.split("\\*"); + System.out.println(Double.valueOf(countSplit[0])); + System.out.println(Double.valueOf(countSplit[1])); + zhang = Math.ceil(Double.valueOf(countSplit[0]) * Double.valueOf(countSplit[1]) + / Double.valueOf(number)); + } else { + zhang = Math.ceil(Double.valueOf(count) / Double.valueOf(number)); + } + } + orderNumber = remark.substring(remark.indexOf("(") + 1, remark.indexOf(")")); + } catch (Exception e) { + System.out.println(remark); +// return Msg.fail(remark); + } + if (StringUtils.isNotEmpty(addTime)) { + Date javaDate = HSSFDateUtil.getJavaDate(Double.parseDouble(addTime)); + vo.setAddTime(javaDate); + } +// SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); +// Date add_date = formatter.parse(addTime);// 把字符串转为日期格式 + vo.setSupplier(supplier); + vo.setShopname(shopname); + vo.setKind(kind); + vo.setKind2(kind2); + vo.setOrderNumber(orderNumber); + vo.setFilename(filename); + vo.setCount(count); + vo.setNumber(number); + vo.setZhang(String.valueOf(zhang)); + vo.setRemark(remark); + vo.setCreator(user.getRealname()); + list.add(vo); + // financeMapper.insertSelective(vo); + } + } + if (list.size() == 0) { + return Msg.fail("上传失败,请检查文件表头是否正确"); + } else if (list.size() > 0) { + financeMapper.insertForeach(list); + } + in.close(); + return Msg.success(); + + } + + private String cutCount(String remark) { + remark = remark.replaceAll(" ", "").replace("x", "X").replace("×", "X").replace("(", "(").replace(")", ")"); + String countStr = ""; + String numberStr = ""; + Integer number; + Integer count; + int indexM = remark.indexOf("m"); + int indexZhang = remark.indexOf("张"); + int indexGe = remark.indexOf("个"); + int indexTao = remark.indexOf("套"); + int indexMei = remark.indexOf("枚"); + if (remark.indexOf("张") != -1 && indexZhang - indexM < 15) { + if (remark.indexOf("m-") == -1) { + countStr = remark.substring(remark.indexOf("m") + 1, remark.indexOf("张")); + } else { + countStr = remark.substring(remark.indexOf("m-") + 2, remark.indexOf("张")); + } + } else if (remark.indexOf("个") != -1 && indexGe - indexM < 15) { + if (remark.indexOf("m-") == -1) { + countStr = remark.substring(remark.indexOf("m") + 1, remark.indexOf("个")); + } else { + countStr = remark.substring(remark.indexOf("m-") + 2, remark.indexOf("个")); + } + } else if (remark.indexOf("套") != -1 && indexTao - indexM < 15) { + if (remark.indexOf("m-") == -1) { + countStr = remark.substring(remark.indexOf("m") + 1, remark.indexOf("套")); + } else { + countStr = remark.substring(remark.indexOf("m-") + 2, remark.indexOf("套")); + } + } else if (remark.indexOf("枚") != -1 && indexMei - indexM < 15) { + if (remark.indexOf("m-") == -1) { + countStr = remark.substring(remark.indexOf("m") + 1, remark.indexOf("枚")); + } else { + countStr = remark.substring(remark.indexOf("m-") + 2, remark.indexOf("枚")); + } + } + // 第一个“款”的位置 + int firstK = countStr.indexOf("款"); + // 第一个“各”的位置 + int firstGe = countStr.indexOf("各"); + // 第二个“款”的位置 + int countStrSecondK = countStr.indexOf("款", firstK + 1); + // 第3个“款”的位置 + int countStrThirdK = countStr.indexOf("款", countStrSecondK + 1); + if (countStrSecondK > 0 && countStrThirdK > 0) { + return "#"; + } + // “共***张” + if (countStr.contains("共")) { + String[] split = countStr.split("共"); + countStr = split[1].replaceAll("[^(0-9)]", ""); + return "" + countStr; + } + // “合计***张” + if (countStr.contains("合计")) { + String[] split = countStr.split("合计"); + countStr = split[1].replaceAll("[^(0-9)]", ""); + return "" + countStr; + } + // “总的***张” + if (countStr.contains("总")) { + String[] split = countStr.split("总"); + countStr = split[1].replaceAll("[^(0-9)]", ""); + return "" + countStr; + } + // “***款各***张” + if (firstGe > 0) { + String[] split = countStr.split("各"); + numberStr = split[0]; + countStr = split[1]; + numberStr = numberStr.replaceAll("[^(0-9)]", ""); + countStr = countStr.replaceAll("[^(0-9)]", ""); + if (StringUtils.isEmpty(numberStr)) { + return "#"; + } + number = Integer.valueOf(numberStr); + count = Integer.valueOf(countStr); + if (number == 1 || count == 1) { + return "" + number * count; + } + return number + "*" + count; + } + // **款**张 + if (firstK > 0) { + String[] split = countStr.split("款"); + numberStr = split[0]; + countStr = split[1]; + if (countStrSecondK > 0) { + countStr = split[2]; + } + numberStr = numberStr.replaceAll("[^(0-9)]", ""); + countStr = countStr.replaceAll("[^(0-9)]", ""); + if (StringUtils.isEmpty(numberStr)) { + return "#"; + } + number = Integer.valueOf(numberStr); + count = Integer.valueOf(countStr); + if (number == 1 || count == 1) { + return "" + number * count; + } + return number + "*" + count; + } + countStr = countStr.replaceAll("[^(0-9)]", ""); + return countStr; + } + + private String cutSize(String remark) { + remark = remark.replaceAll(" ", "").replace("x", "X").replace("×", "X").replace("(", "(").replace(")", ")") + .replace("专版打印", "").replace("下", "").replace("上", "").replace("专版", "").replace("-", "") + .replace("多拍返10元", ""); + // 第一个X的位置 + int firstX = remark.indexOf("X"); + // 第二个X的位置 + int secondX = remark.indexOf("X", firstX + 1); + int secondmm = remark.indexOf("mm", remark.indexOf("mm") + 1); + if (secondX > 0 && secondmm > 0) { + return "#"; + } + // System.out.println(remark); + String size = ""; + double length; + double width; + // 提取整数/小数的正则 + String regex = "([1-9]\\d*\\.?\\d+)|(0\\.\\d*[1-9])|(\\d+)"; + if (remark.indexOf("mm") == -1 && remark.indexOf("cm") != -1) { + String l = remark.substring(remark.indexOf("X") - 3, remark.indexOf("X")); + String w = remark.substring(remark.indexOf("X") + 1, remark.indexOf("cm")); + // 如果l里有小数点,往前数5位 + if (l.indexOf(".") != -1) { + Pattern pattern = Pattern.compile(regex); + l = remark.substring(remark.indexOf("X") - 5, remark.indexOf("X")); + Matcher matcher = pattern.matcher(l); + while (matcher.find()) { + l = matcher.group(); + } + } else { + l = l.replaceAll("[^(0-9)]", ""); + } + size = l + "X" + w; + String[] split = size.split("X"); + length = Double.valueOf(split[0]) * 10 + 4; + if ("按比例".equals(split[1])) { + width = Double.valueOf(split[0]) * 10 + 4; + } else { + width = Double.valueOf(split[1]) * 10 + 4; + } + } else { + String l = remark.substring(remark.indexOf("X") - 3, remark.indexOf("X")); + String w = remark.substring(remark.indexOf("X") + 1, remark.indexOf("mm")); + // 如果l里有小数点,往前数5位 + if (l.indexOf(".") != -1) { + if (l.indexOf(".") != -1) { + l = remark.substring(remark.indexOf("X") - 5, remark.indexOf("X")); + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(l); + while (matcher.find()) { + l = matcher.group(); + } + } + } else { + l = l.replaceAll("[^(0-9)]", ""); + } + size = l + "X" + w; + String[] split = size.split("X"); + length = Double.valueOf(split[0]) + 4; + if ("按比例".equals(split[1])) { + width = Double.valueOf(split[0]) + 4; + } else { + width = Double.valueOf(split[1]) + 4; + } + } + + double l = 420; + double w = 280; + if (length == l + 4) { + return "1"; + } + if ((length > l || width > w) && (length > w || width > l)) + return "#"; + // 一张纸 420*290 能做多少个此类尺寸的产品 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + return String.valueOf(max); + } + + @SuppressWarnings("resource") + public void excel(HttpServletResponse response, Finance finance) throws Exception { + response.setCharacterEncoding("UTF-8"); + List financesList = new ArrayList(); + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + finance.setCreator(user.getRealname()); + financesList = getFinance(finance); + + // 创建excel文件 + HSSFWorkbook wb = new HSSFWorkbook(); + // 创建sheet页 + HSSFSheet sheet = wb.createSheet("总表"); + String filename = ""; + // 创建标题行 + HSSFRow titleRow = sheet.createRow(0); + titleRow.createCell(0).setCellValue("日期"); + titleRow.createCell(1).setCellValue("供应商"); + titleRow.createCell(2).setCellValue("店铺"); + titleRow.createCell(3).setCellValue("大类别"); + titleRow.createCell(4).setCellValue("小类别"); + titleRow.createCell(5).setCellValue("订单号"); + titleRow.createCell(6).setCellValue("文件名"); + titleRow.createCell(7).setCellValue("数量"); + titleRow.createCell(8).setCellValue("拼版数"); + titleRow.createCell(9).setCellValue("张数"); + titleRow.createCell(10).setCellValue("导入人"); + titleRow.createCell(11).setCellValue("导入日期"); + // 遍历将数据放到excel列中 + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + for (Finance finances : financesList) { + filename = finance.getFilename(); + HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1); + dataRow.createCell(0).setCellValue(""); + if (finances.getAddTime() != null) { + dataRow.createCell(0).setCellValue(formatter.format(finances.getAddTime())); + } + dataRow.createCell(1).setCellValue(finances.getSupplier()); + dataRow.createCell(2).setCellValue(finances.getShopname()); + dataRow.createCell(3).setCellValue(finances.getKind()); + dataRow.createCell(4).setCellValue(finances.getKind2()); + dataRow.createCell(5).setCellValue(finances.getOrderNumber()); + dataRow.createCell(6).setCellValue(finances.getRemark()); + dataRow.createCell(7).setCellValue(finances.getCount()); + dataRow.createCell(8).setCellValue(finances.getNumber()); + dataRow.createCell(9).setCellValue(finances.getZhang()); + dataRow.createCell(10).setCellValue(finances.getCreator()); + dataRow.createCell(11).setCellValue(formatter.format(finances.getCreateDate())); + } + + // 设置下载时客户端Excel的名称 + response.setContentType("application/octet-stream;charset=utf-8"); + response.setHeader("Content-Disposition", + "attachment;filename=" + new String(filename.getBytes(), "iso-8859-1"));// + ".xls" + + OutputStream ouputStream = response.getOutputStream(); + wb.write(ouputStream); + ouputStream.flush(); + ouputStream.close(); + } + +} diff --git a/src/main/java/lingtao/net/service/InformationService.java b/src/main/java/lingtao/net/service/InformationService.java new file mode 100644 index 0000000..a96c9b3 --- /dev/null +++ b/src/main/java/lingtao/net/service/InformationService.java @@ -0,0 +1,62 @@ +package lingtao.net.service; + +import java.util.List; + +import javax.servlet.http.HttpSession; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import lingtao.net.bean.Information; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.dao.InformationMapper; + +@Service +public class InformationService { + + @Autowired + private InformationMapper informationMapper; + + public List getInformations(Information information) { + return informationMapper.getInformations(information); + } + + public Msg addInformation(Information information, HttpSession session) { + SysUser user = (SysUser) session.getAttribute("USER_SESSION"); + information.setCreateBy(user.getRealname()); + try { + informationMapper.addInformation(information); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + public Msg updateInformationById(Information information, HttpSession session) { + SysUser user = (SysUser) session.getAttribute("USER_SESSION"); + information.setUpdateBy(user.getRealname()); + try { + informationMapper.updateInformationById(information); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + + } + + public Msg deleteInformationById(Integer id) { + try { + informationMapper.deleteInformationById(id); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + + } + + public List getShortAnswers() { + return informationMapper.getShortAnswers(); + } + +} diff --git a/src/main/java/lingtao/net/service/InitComponent.java b/src/main/java/lingtao/net/service/InitComponent.java new file mode 100644 index 0000000..bc9a0e7 --- /dev/null +++ b/src/main/java/lingtao/net/service/InitComponent.java @@ -0,0 +1,5 @@ +package lingtao.net.service; + +public class InitComponent { + +} diff --git a/src/main/java/lingtao/net/service/LoginIpService.java b/src/main/java/lingtao/net/service/LoginIpService.java new file mode 100644 index 0000000..3d5681c --- /dev/null +++ b/src/main/java/lingtao/net/service/LoginIpService.java @@ -0,0 +1,62 @@ +package lingtao.net.service; + +import java.util.List; + +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import lingtao.net.bean.LoginIp; +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.dao.LoginIpMapper; + +@Service +public class LoginIpService { + + @Autowired + private LoginIpMapper loginIpMapper; + + // 列表 + public List getLoginIpList(LoginIp loginIp) { + return loginIpMapper.getLoginIpList(loginIp); + } + + // 新增 + public void addIp(LoginIp loginIp) { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + loginIp.setCreateBy(user.getRealname()); + loginIpMapper.addIp(loginIp); + } + + // 修改 + public void updateIp(LoginIp loginIp) { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + loginIp.setUpdateBy(user.getRealname()); + loginIpMapper.updateIp(loginIp); + } + + // 删除 + public int deleteIpById(Integer id) { + return loginIpMapper.deleteIpById(id); + } + + // 批量删除 + public Msg deleteBatch(int[] ints) { + try { + loginIpMapper.deleteBatch(ints); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + public Msg checkIP(String agreeIp) { + LoginIp loginIp = loginIpMapper.checkIP(agreeIp); + if (loginIp != null) { + return Msg.fail(); + } + return Msg.success(); + } + +} diff --git a/src/main/java/lingtao/net/service/LoginLogService.java b/src/main/java/lingtao/net/service/LoginLogService.java new file mode 100644 index 0000000..58b435a --- /dev/null +++ b/src/main/java/lingtao/net/service/LoginLogService.java @@ -0,0 +1,20 @@ +package lingtao.net.service; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import lingtao.net.bean.LoginLog; +import lingtao.net.dao.LoginLogMapper; + +@Service +public class LoginLogService { + + @Autowired + private LoginLogMapper loginLogMapper; + + public List getLoginLogList(LoginLog loginLog) { + return loginLogMapper.getLoginLogList(loginLog); + } +} diff --git a/src/main/java/lingtao/net/service/MyFileService.java b/src/main/java/lingtao/net/service/MyFileService.java new file mode 100644 index 0000000..8761773 --- /dev/null +++ b/src/main/java/lingtao/net/service/MyFileService.java @@ -0,0 +1,93 @@ +package lingtao.net.service; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import lingtao.net.bean.Msg; +import lingtao.net.bean.MyFile; +import lingtao.net.bean.MyFileExample; +import lingtao.net.bean.MyFileExample.Criteria; +import lingtao.net.dao.MyFileMapper; + +@Service +public class MyFileService { + + @Autowired + MyFileMapper fileMapper; + + // 文件上传 + public Msg fileUpload(MultipartFile file, HttpServletRequest request) { + try { + // 获取存放路径 + String path = request.getSession().getServletContext().getRealPath("/deptFile"); + // 判断路径是否存在 + File upfile = new File(path); + if (!upfile.exists()) { + upfile.mkdirs(); + } + // 获得文件名 + String filename = file.getOriginalFilename(); + upfile = new File(path + "/" + filename); + MyFile myFile = new MyFile(); + // 将文件移动到指定路径中 + file.transferTo(upfile); + myFile.setFileName(filename); + myFile.setFilePath(path); + myFile.setCreateBy("admin"); + fileMapper.insertSelective(myFile); + return Msg.success(); + } catch (IOException e) { + return Msg.fail(); + } + } + + // 获取所有的文件信息 + public List getFileList(MyFile myFile, HttpSession session) { + return fileMapper.getFileList(myFile); + } + + // 根据ID删除文件 + public Msg deleteFile(Integer fileId) { + try { + fileMapper.deleteByPrimaryKey(fileId); + return Msg.success(); + } catch (Exception e) { + return Msg.fail("删除失败"); + } + } + + // 批量删除文件 + public Msg deleteBatch(List del_ids) { + MyFileExample example = new MyFileExample(); + Criteria criteria = example.createCriteria(); + criteria.andFileIdIn(del_ids); + try { + fileMapper.deleteByExample(example); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + // 同时删除服务器中的文件 + public boolean deleteFile(String delFileName) { + boolean flag = false; + File file = new File(delFileName); + // 判断目录或文件是否存在 + if (!file.exists()) { // 不存在返回 false + return flag; + } else { + flag = true; + file.delete(); + } + return flag; + } +} diff --git a/src/main/java/lingtao/net/service/ProductImgService.java b/src/main/java/lingtao/net/service/ProductImgService.java new file mode 100644 index 0000000..4967189 --- /dev/null +++ b/src/main/java/lingtao/net/service/ProductImgService.java @@ -0,0 +1,53 @@ +package lingtao.net.service; + +import lingtao.net.bean.ProductImg; +import lingtao.net.bean.SysDictProduct; +import lingtao.net.dao.ProductImgMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class ProductImgService { + + @Autowired + private ProductImgMapper productImgMapper; + + public List getProKindList(ProductImg productImg) { + return productImgMapper.getProKindList(productImg); + } + + public SysDictProduct getLabel(ProductImg productImg) { + return productImgMapper.getLabel(productImg); + } + + public int addImgUrl(ProductImg productImg) { + return productImgMapper.addImgUrl(productImg); + } + + public int updateImgUploadRemark(ProductImg productImg) { + return productImgMapper.updateImgUploadRemark(productImg); + } + + public List findAllPro() { + return productImgMapper.findAllPro(); + } + + public List getKindsByPro(String proTypeValue) { + return productImgMapper.getKindsByPro(proTypeValue); + } + + public List getKind2sByKind(String proTypeValue, String kindValue) { + return productImgMapper.getKind2sByKind(proTypeValue, kindValue); + } + + public List getImgsByProKind(String proTypeValue, String kindValue, String kind2Value, String craftValue) { + return productImgMapper.getImgsByProKind(proTypeValue, kindValue, kind2Value, craftValue); + } + + public List getVideos() { + return productImgMapper.getVideos(); + } + +} diff --git a/src/main/java/lingtao/net/service/ProductService.java b/src/main/java/lingtao/net/service/ProductService.java new file mode 100644 index 0000000..00e455c --- /dev/null +++ b/src/main/java/lingtao/net/service/ProductService.java @@ -0,0 +1,5056 @@ +package lingtao.net.service; + +import lingtao.net.bean.Msg; +import lingtao.net.bean.Product; +import lingtao.net.bean.SysDictSearchPro; +import lingtao.net.bean.SysUser; +import lingtao.net.dao.ProductMapper; +import lingtao.net.dao.QuoteLogMapper; +import lingtao.net.util.*; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.io.InputStream; +import java.text.DecimalFormat; +import java.util.*; +import java.util.regex.Pattern; + +@Service +public class ProductService { + + @Autowired + ProductMapper productMapper; + + @Autowired + QuoteLogMapper quoteLogMapper; + + // 保留俩位小数 + DecimalFormat df = new DecimalFormat("0.00"); + + public List findAllPro() { + return productMapper.findAllPro(); + } + + // 价格列表 + public List getProductList(Product product) { + return productMapper.getProductList(product); + } + + public Msg updatePriceById(int proId, String field, String value) { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + String role = user.getRole(); + boolean flag = false; + if (role.contains(",")) { + String[] split = role.split(","); + for (int i = 0; i < split.length; i++) { + // [管理员/产品经理]身份才允许修改价格 + if ("2".equals(split[i]) || "3".equals(split[i])) { + flag = true; + break; + } + } + } else { + if ("2".equals(role) || "3".equals(role)) { + flag = true; + } + } + if (!flag) { + return Msg.fail(); + } + + Product product = new Product(); + + if (!StringUtils.isEmpty(value)) { + product.setProId(proId); + product.setUpdater(user.getRealname()); + if ("count".equals(field)) { + product.setCount(Integer.valueOf(value)); + } else if ("price".equals(field)) { + product.setPrice(Double.valueOf(value)); + } else if ("priceMultiple".equals(field)) { + product.setPriceMultiple(Double.valueOf(value)); + } else if ("weight".equals(field)) { + product.setWeight(value); + } + try { + productMapper.updatePriceById(product); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + return Msg.fail(); + } + + // 根据产品种类获取材质 + public List getKindsByPro(String proTypeValue) { + return productMapper.getKindsByPro(proTypeValue); + } + + // 搜索产品 + public List searchPro(String likeProTypeLabel) { + return productMapper.searchPro(likeProTypeLabel); + } + + // 获取名片位数 + public static int getNum(double length, double width) { + double l1 = Math.ceil(length / 9); + double w1 = Math.ceil(width / 5.4); + double l2 = Math.ceil(width / 9); + double w2 = Math.ceil(length / 5.4); + int min = (int) Math.min(l1 * w1, l2 * w2); + + return min; + } + + private static double getNumber(double divisor, double dividend) { + double number = divisor / dividend; + double integer = Math.floor(divisor / dividend); + double decimals = number - integer; + if (decimals > 0.1) { + return integer + 1; + } + return integer; + } + + public static int getNumAdd(double length, double width) { + double l1 = getNumber(length, 9); + + double w1 = getNumber(width, 5.4); + double l2 = getNumber(width, 9); + double w2 = getNumber(length, 5.4); + int min = (int) Math.min(Math.ceil(l1) * Math.ceil(w1), Math.ceil(l2) * Math.ceil(w2)); + + return min; + } + + public List getHekaPrice(int min, Product dto, List priceList, int count) { + if (min < 5) { + dto.setKindValue(String.valueOf(min)); + if (count <= 10000) { + priceList = productMapper.getThanPrice(dto); + } else { + priceList = productMapper.thanThousandPrice(dto); + } + // 腰封/吊旗标识,比优惠券贵10元 + if (!StringUtils.isEmpty(dto.getD())) { + for (Product product : priceList) { + product.setPrice(product.getPrice() + 10); + } + } + } else { + if (min > 5 && min < 10) { + dto.setKindValue("6"); + } else if (min > 10 && min <= 20) { + dto.setKindValue("11"); + } else if (min > 20 && min <= 30) { + dto.setKindValue("21"); + } else if (min > 30 && min <= 40) { + dto.setKindValue("31"); + } else if (min > 40 && min <= 50) { + dto.setKindValue("41"); + } else if (min > 50) { + dto.setKindValue("51"); + } else { + // 5、10位 + dto.setKindValue(String.valueOf(min)); + } + // 设置位数 + dto.setNum(min); + // 腰封/吊旗标识,比优惠券贵10元/位 + if (!StringUtils.isEmpty(dto.getD())) { + if (min <= 20) { + dto.setP(30); + } else { + dto.setP(25); + } + if (count <= 10000) + priceList = productMapper.hangingFlagsThanPrice(dto); + else + priceList = productMapper.hangingFlagsThousandThanPrice(dto); + } else { + /* + * if (min >= 6 && min <= 9) { dto.setP(30); priceList = productMapper.couponThanPrices(dto); }else + */ + if (count <= 10000) { + priceList = productMapper.couponThanPrice(dto); + } else { + priceList = productMapper.couponThousandThanPrice(dto); + } + + } + } + + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + // 名片优惠券报价 2个位以上的每个位各涨5元 + if (min > 1) { + for (Product product : priceList) { + product.setPrice(product.getPrice() + min * 5); + } + } + // 产品价格倍数 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * product.getPriceMultiple())); + } + + return priceList; + } + + private void f_getEathPrice(List priceList, double len, double wid, String toothpick_size) { + for (Product product : priceList) { + int numbers = product.getCount(); + if ((wid <= 5.4 && len <= 5.4) && ((len >= 5 && len < 4.5) || (wid >= 5 && wid < 4.5))) { + if (numbers == 500 || numbers == 1000) { + product.setPrice(product.getPrice() + 10); + } else if (numbers >= 2000) { + product.setPrice(product.getPrice() + 20); + } + } /* + * else if(length == 5 && width == 5) { if(numbers >= 2000 && numbers < 10000) { product.setPrice(product.getPrice() + 15); }else if(numbers >= 10000) { product.setPrice(product.getPrice() + 40); } } + */ else if ((len > 9 || wid > 5.4) && (len > 5.4 || wid > 9)) { + if (numbers == 500) { + product.setPrice(product.getPrice() + 5); + } else if (numbers == 1000) { + product.setPrice(product.getPrice() + 10); + } else if (numbers >= 2000) { + product.setPrice(product.getPrice() + 20); + } + } + } + } + + @SuppressWarnings({"static-access"}) + public List getThanPrice(Product dto, String role) { + String proType = dto.getProTypeValue(); + String kind = dto.getKindValue(); + String kind2 = dto.getKind2Value(); + String kind3 = dto.getKind3Value(); + + // 款数 + Integer number = dto.getNumber(); + String size = dto.getSize(); + Double width = null; + Double length = null; + Double height = null; + Double area = null; + String oldKind = ""; + /* + * if(proType.equals("帆布")){ String sizeList[] = size.split(","); size = sizeList[1]; }else + */ + if (proType.equals("17")) { + if (!StringUtils.isEmpty(size)) { + String sizeList[] = size.split(","); + size = sizeList[0]; + } + } else if (proType.equals("手拉旗")) { + size += "*" + dto.getWidth(); + } + int count = dto.getCount(); + count = Math.abs(count); + if (!StringUtils.isEmpty(size)) { + // 海报下的刻字,只有一个尺寸 + if ("17".equals(proType)) { + if ("5".equals(kind)) { + size = size + "*0"; + } else if ("6".equals(kind)) { + size = size + "*" + dto.getWidth(); + dto.setSize(size); + } + } + length = Double.valueOf(size.substring(0, size.indexOf("*"))); + String other_size = size; + if (size.contains(",")) { + size = size.split(",")[0]; + } + if (size.indexOf(("*"), size.indexOf("*") + 1) == -1) { + width = Double.valueOf(size.substring(size.indexOf("*") + 1)); + } else { + width = Double.valueOf(size.substring(size.indexOf("*") + 1, size.indexOf(("*"), size.indexOf("*") + 1))); + height = Double.valueOf(size.substring(size.indexOf(("*"), size.indexOf("*") + 1) + 1)); + height = Math.abs(height); + } + length = Math.abs(length); + width = Math.abs(width); + size = other_size; + } + + // 返回的价格集合 + List priceList = new ArrayList(); + switch (proType) { + // 不干胶/特殊不干胶 + case "0": + // 书写纸不干胶和牛皮纸价格一致 + if ("7".equals(kind)) { + dto.setKindValue("3"); + kind = "3"; + } + // 铜版纸不干胶 + /* + * if ("0".equals(kind)) { if ("覆哑膜".equals(dto.getCraftMo()) && new AStickersPrice().f_getRole(dto.getRole()) != 1) { // 哑膜铜版纸不干胶 dto.setKindValue("0"); kind = "4"; } } else if ("1".equals(kind) || "2".equals(kind)) { // PVC/透明哑膜不干胶 if ("覆哑膜".equals(dto.getCraftMo())) { dto.setKindValue("PVC覆哑膜"); kind = "1"; } }else + */ + if ("PP合成纸".equals(kind)) { + // PP合成纸的价格是牛皮纸价格*0.8 + oldKind = "PP合成纸"; + dto.setKindValue("3"); + kind = "3"; + } else if ("封口贴铜版纸不干胶".equals(kind)) { + priceList = new PriceUtils().getFktPrice(number, priceList); + return priceList; + } else if ("双面印刷不干胶".equals(dto.getStickerKind())) { + priceList = StickersDoublePrice.getPrice(length, width, count, number); + return priceList; + } else if ("插旗".equals(dto.getStickerKind())) { + dto.setKindValue("0"); + dto.setLength(length); + dto.setWidth(width); + area = length * width / 10000; + if (length > 20 && length < 21) { + length = Math.ceil(length); + area = length * width / 10000; + } + if (width > 20 && width < 21) { + width = Math.ceil(width); + area = length * width / 10000; + } + priceList = normalSticker(dto, "0", number, area, width, length, count, oldKind, priceList); + + if (priceList.size() >= 3) { + priceList = priceList.subList(0, 3); + } +// return priceList; + + } else if ("8".equals(kind) || "10".equals(kind) || "11".equals(kind) || "12".equals(kind)) { + priceList = new PriceUtils().getMeiWenZhiPrice(length, width, count, number, dto.getCraftQie()); + if (number > 1) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * number)); + } + } + return priceList; + } else if ("13".equals(kind)) { + oldKind = "13"; + dto.setKindValue("2"); + kind = "2"; + } else if ("15".equals(kind) || "16".equals(kind)) { + priceList = new SwzStickersPrice().getPrice(count, length, width, number, dto.getCraftTang()); + if (number > 1) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * number)); + } + } + return priceList; + } + // 查询出来的价格集合 + List stickersList = new ArrayList(); + + // 单个产品的面积 + area = length * width / 10000; + + // 选择少数量/打印不干胶按钮 + if ("少数量".contentEquals(dto.getStickerKind()) || "专版打印".contentEquals(dto.getStickerKind())) { + stickersList = lessSticker(dto, kind, number, width, length, count, stickersList); + + if (stickersList.get(0) == null) { + return null; + } + } else { + if (length > 20 && length < 21) { + length = Math.ceil(length); + area = length * width / 10000; + } + if (width > 20 && width < 21) { + width = Math.ceil(width); + area = length * width / 10000; + } + stickersList = normalSticker(dto, kind, number, area, width, length, count, oldKind, stickersList); + if (stickersList == null) { + return stickersList; + } + } + // 把查出来的集合添加到priceList中 + for (int i = 0; i < stickersList.size(); i++) { + priceList.add(stickersList.get(i)); + } + // 计算重量 + for (Product product : priceList) { + // PVC跟静电膜的×0.3,牛皮纸不干胶 *0.22,其他0.24 + if ("1".equals(kind) || "静电贴".equals(kind)) { + product.setWeight(df.format(number * length / 100 * width / 100 * product.getCount() * 0.3)); + } else { + product.setWeight(df.format(number * length / 100 * width / 100 * product.getCount() * 0.24)); + } + } + + if ("覆哑膜".equals(dto.getCraftMo())) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * 1.2)); + } + } + + if (priceList.size() >= 3) { + priceList = priceList.subList(0, 3); + } + + if ("1".equals(kind) && dto.getCraftMo().equals("覆哑膜")) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * 1.2)); + } + } + + if ("13".equals(oldKind)) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * 1.2)); + } + } + if ("0".equals(kind) || "插旗".equals(dto.getStickerKind())) { + f_getEathPrice(priceList, length, width, dto.getToothpick_size()); + if ("插旗".equals(dto.getStickerKind())) { + for (Product product : priceList) { + double basePrice = 0; + if ("粘牙签".equals(dto.getCraftShua())) { + if (product.getCount() <= 500) { + basePrice = 0.108; + } else if (product.getCount() <= 1000) { + basePrice = 0.127; + } else if (product.getCount() <= 2000) { + basePrice = 0.118; + } else if (product.getCount() <= 3000) { + basePrice = 0.114; + } else if (product.getCount() <= 5000) { + basePrice = 0.106; + } else { + basePrice = 0.086; + } + } + if ("配牙签".equals(dto.getCraftShua())) { + if (product.getCount() <= 500) { + basePrice = 0.032; + } else if (product.getCount() <= 1000) { + basePrice = 0.023; + } else if (product.getCount() <= 2000) { + basePrice = 0.0185; + } else if (product.getCount() <= 3000) { + basePrice = 0.014; + } else if (product.getCount() <= 5000) { + basePrice = 0.01; + } else { + basePrice = 0.0068; + } + } + if ("10".equals(dto.getToothpick_size())) { + basePrice = basePrice + 0.01; + } + if ("12".equals(dto.getToothpick_size())) { + basePrice = basePrice + 0.02; + } + + product.setPrice(product.getPrice() + Math.ceil(product.getCount() * basePrice)); + if ("配牙签".equals(dto.getCraftShua()) && "6.5".equals(dto.getToothpick_size()) && ((width == 9 && length == 2.5) || length == 9 && width == 2.5)) { + if (product.getCount() == 500) { + double other_price = 60; + product.setPrice(other_price); + } + if (product.getCount() == 1000) { + double other_price = 80; + product.setPrice(other_price); + } + } + } + } + + if (!StringUtils.isEmpty(dto.getCraft())) { + String craftList[] = dto.getCraft(); + + if ("配刮刮膜".equals(craftList[0])) { + for (Product product : priceList) { + double gPrice = product.getCount() * 0.04 > 20 ? product.getCount() * 0.04 : 20; + product.setPrice(Math.ceil(product.getPrice() + gPrice)); + } + } else if ("粘刮刮膜".equals(craftList[0])) { + for (Product product : priceList) { + double gPrice = product.getCount() * 0.1 > 40 ? product.getCount() * 0.1 : 40; + product.setPrice(Math.ceil(product.getPrice() + gPrice)); + } + } + } + } + if ("插旗".equals(dto.getStickerKind())) { + if (number > 1 && "0".equals(dto.getKindValue())) { + for (Product product : priceList) { + product.setPrice(product.getPrice() * number); + } + } + } + if ("0".equals(dto.getKindValue()) && !"专版打印".contentEquals(dto.getStickerKind())) { + if (number > 1) { + for (Product product : stickersList) { + product.setPrice(product.getPrice() * number); + } + } + } + return priceList; + case "1": + dto.setWidth(width); + dto.setLength(length); + priceList = productMapper.getThanPrice(dto); + return priceList; + // 卷装标签 + case "2": + // 单个产品的面积 + area = (length + 0.3) * (width + 0.3) / 10000; + priceList = new PriceUtils().rollLabelPrice(kind, area, count, dto.getCraft(), dto.getYinbai()); + // 根据款数重新算价格/计算重量 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + product.setWeight(df.format(number * length / 100 * width / 100 * product.getCount() * 0.25)); + } + return priceList; + // 插卡 + case "3": + // 菱形单面直角插牌 + if ("1".equals(dto.getKindValue())) { + priceList = new PriceUtils().getInsertCard(size, count); + } else { + if ("9".equals(dto.getKindValue()) || "10".equals(dto.getKindValue())) { + dto.setKindValue("4"); + } else if ("11".equals(dto.getKindValue())) { + dto.setKindValue("8"); + } + priceList = productMapper.getThanPrice(dto); + // 产品价格倍数 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * product.getPriceMultiple())); + } + } + + if (!StringUtils.isEmpty(dto.getSize1())) { + String size1 = dto.getSize1(); + Double length1 = null; + Double width1 = null; + + List priceList2 = new ArrayList(); + length1 = Double.valueOf(size1.substring(0, size1.indexOf("*"))); + if (size1.indexOf(("*"), size1.indexOf("*") + 1) == -1) { + width1 = Double.valueOf(size1.substring(size1.indexOf("*") + 1)); + } else { + width1 = Double.valueOf(size1.substring(size1.indexOf("*") + 1, size1.indexOf(("*"), size1.indexOf("*") + 1))); + } + length1 = Math.abs(length1); + width1 = Math.abs(width1); + if (((length1 <= 9 && width1 <= 5.4) || (length1 <= 5.4 && width1 <= 9))) { + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * 2)); + } + } else { + return null; + } + } + + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + + // 根据款数重新算价格/计算重量 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + product.setWeight(df.format(number * length * width * product.getCount() * 0.00003)); + } + return priceList; + // 优惠券 + case "4": + if ("11".equals(dto.getKind())) {// 圣诞卡 + priceList = new PriceUtils().getSdkPrice(count, number); + } else if ("9".equals(dto.getKind())) {// 售后卡 + priceList = new PriceUtils().getShkPrice(size, count, number); + } else if ("10".equals(dto.getKind())) {// 吸管套 + int min = getNum(length, width); + if (min > 1) { + String[] xgtCraft = {"模切"}; + dto.setCraft(xgtCraft); + priceList = getHekaPrice(min, dto, priceList, count); + getCraft(dto, priceList, length * 10, width * 10, min); + } else { + if ("6.5*5.4".equals(dto.getSize())) { + dto.setKindValue("0"); + dto.setKind1Value("0"); + dto.setProTypeValue("4"); + priceList = productMapper.getThanPrice(dto); + } else { + dto.setKindValue("0"); + dto.setProTypeValue("3"); + priceList = productMapper.getThanPrice(dto); + for (Product product : priceList) { + if (product.getCount() == 200) { + product.setPrice(60.0); + } + } + } + } + /* + * if (priceList.size() >= 4) { priceList = priceList.subList(0, 4); } + */ + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + product.setWeight(df.format(0.3 * length * width * product.getCount() / 10000 * number)); + } + } else if ("13".equals(dto.getKind())) { + int min = getNum(length, width); + int tempNumber = dto.getNumber(); + List craftList = null; + if (!StringUtils.isEmpty(dto.getCraft())) { + craftList = Arrays.asList(dto.getCraft()); + } + if (craftList.contains("模切")) { + dto.setNumber(1); + } + priceList = new CouponPrice().getCouponPrice(min, dto, priceList, count); + getCraft(dto, priceList, length * 10, width * 10, min); + + if (craftList.contains("模切")) { + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * tempNumber)); + product.setWeight(df.format(number * length / 100 * width / 100 * product.getCount() * 0.3 * 0.86)); + } + } + } else { + int min = getNum(length, width); + priceList = getHekaPrice(min, dto, priceList, count); + getCraft(dto, priceList, length * 10, width * 10, min); + // 刮刮膜增加价格 + if (dto.getKind().equals("13")) { + if (dto.getSize1().equals("60*25")) { + for (Product product : priceList) { + product.setPrice(product.getPrice() + Math.ceil(0.08 * product.getCount() > 50 ? 0.08 * product.getCount() : 50)); + } + } else { + for (Product product : priceList) { + product.setPrice(product.getPrice() + Math.ceil(0.04 * product.getCount() > 40 ? 0.04 * product.getCount() : 40)); + } + } + } + // 根据款数重新算价格/计算重量 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + product.setWeight(df.format(number * length / 100 * width / 100 * product.getCount() * 0.3 * 0.86)); + } + + /*优惠券、抽奖卡特殊处理*/ + if (("4".equals(dto.getKind()) || "5".equals(dto.getKind())) && !StringUtils.isEmpty(dto.getCraft()) && min == 2) { + List list = Arrays.asList(dto.getCraft()); + if (list.size() == 3 && list.contains("双面覆哑膜") && list.contains("压点线") && list.contains("打码")) { + for (Product product : priceList) { + if (product.getCount() == 200) { + product.setPrice(90.0 * number); + } else if (product.getCount() == 500) { + product.setPrice(120.0 * number); + } + } + } else if (list.size() == 2 && list.contains("压点线") && list.contains("打码")) { + for (Product product : priceList) { + if (product.getCount() == 200) { + product.setPrice(90.0 * number); + } else if (product.getCount() == 500) { + product.setPrice(120.0 * number); + } + } + } + } + } + + return priceList; + // 吊牌300/600/800克 + case "吊牌": + // 自定义尺寸 + // 单个产品的面积 + area = length * width / 10000; + + // 300克 + if ("3".equals(kind) || "40".equals(kind)) { + // 直角打孔价格 + if ("直角打孔".equals(dto.getCraftQie())) { + priceList = new PriceUtils().tags300PriceCraftZhi(dto, width, length, count, priceList); + } else {// 异形模切价格 + priceList = new PriceUtils().tags300PriceCraftMo(dto, number, width, length, area, count, priceList); + } + + if ("单面烫金".equals(dto.getCraftTang())) { + // 有2个尺寸带烫金 + if (!StringUtils.isEmpty(dto.getSize1())) { + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() + (product.getPrice() * 0.09 * 2 > 85 * 2 ? product.getPrice() * 0.09 * 2 : 85 * 2))); + } + } else { + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() + (product.getPrice() * 0.09 > 85 ? product.getPrice() * 0.09 : 85))); + } + } + } else if ("双面烫金".equals(dto.getCraftTang())) { + // 有2个尺寸带烫金 + if (!StringUtils.isEmpty(dto.getSize1())) { + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() + (product.getPrice() * 0.09 * 2 * 2 > 170 * 2 ? product.getPrice() * 0.09 * 2 * 2 : 170 * 2))); + } + } else { + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() + (product.getPrice() * 0.09 * 2 > 170 ? product.getPrice() * 0.09 * 2 : 170))); + } + } + } + } else if ("4".equals(kind)) {// 600克/800克 + if (length < 5.0 && width < 5.0) { + area = 5.0 * 5.0 / 10000; + } + priceList = new PriceUtils().tags600Price(dto, kind, kind2, area, count); + } + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + // 根据款数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + + return priceList; + // 服装吊牌 + case "服装吊牌": + // 自定义尺寸 + // 单个产品的面积 + area = length * width / 10000; + if ("常规".equals(dto.getStickerKind())) { + // 300克 + if ("3".equals(kind)) { + Product product1 = new Product(); + List craft = dto.getCraft() == null ? new ArrayList<>() : new ArrayList<>(Arrays.asList(dto.getCraft())); + craft.add("双面覆哑膜"); + if ("直角打孔".equals(dto.getCraftQie())) { + craft.add("打孔"); + } + if ("异形模切".equals(dto.getCraftQie())) { + craft.add("模切"); + } + if (!"".equals(dto.getCraftTang())) { + craft.add(dto.getCraftTang()); + } + product1.setCount(dto.getCount()); + product1.setWidthTang(dto.getWidthTang()); + product1.setLengthTang(dto.getLengthTang()); + product1.setWidth(dto.getWidth()); + product1.setNumber(dto.getNumber()); + product1.setLength(dto.getLength()); + product1.setCraft(craft.toArray(new String[craft.size()])); + product1.setProTypeValue("4"); + product1.setKindValue("3"); + product1.setKind("3"); + product1.setSize(dto.getSize()); + // 直角打孔价格 + int min = getNum(length, width); + priceList = getHekaPrice(min, product1, priceList, count); + getCraft(product1, priceList, length * 10, width * 10, min); + if ("凹凸".equals(dto.getAotu())) { + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() + (product.getPrice() * 0.09 > 153 ? product.getPrice() * 0.09 : 153))); + } + } + // 根据款数重新算价格/计算重量 + for (Product product : priceList) { + if (product.getCount() >= 10000 && min > 1) { + if (min == 2) { + product.setPrice(Math.floor(product.getPrice() * 0.9)); + } else { + product.setPrice(Math.floor(product.getPrice() * 0.8)); + } + + } + product.setWeight(df.format(number * length / 100 * width / 100 * product.getCount() * 0.3 * 0.86)); + } +// if ("直角打孔".equals(dto.getCraftQie())) { +// priceList = new PriceUtils().tags300PriceCraftZhi(dto, width, length, count, priceList); +// } else if ("异形模切".equals(dto.getCraftQie())) { +// priceList = new PriceUtils().tagClothes300PriceCraftMo(dto, number, width, length, area, count, priceList); +// } +// // +棉绳钱 1分5一条 +// if (!StringUtils.isEmpty(dto.getCraftSheng())) { +// for (Product product : priceList) { +// product.setPrice(product.getPrice() + product.getCount() * 0.015); +// } +// } +// if ("单面烫金".equals(dto.getCraftTang())) { +// // 有2个尺寸带烫金 +// if (!StringUtils.isEmpty(dto.getSize1())) { +// for (Product product : priceList) { +// product.setPrice(Math.floor(product.getPrice() + (product.getPrice() * 0.09 * 2 > 85 * 2 ? product.getPrice() * 0.09 * 2 : 85 * 2))); +// } +// } else { +// for (Product product : priceList) { +// product.setPrice(Math.floor(product.getPrice() + (product.getPrice() * 0.09 > 120 ? product.getPrice() * 0.09 : 120))); +// } +// } +// } else if ("双面烫金".equals(dto.getCraftTang())) { +// // 有2个尺寸带烫金 +// if (!StringUtils.isEmpty(dto.getSize1())) { +// for (Product product : priceList) { +// product.setPrice(Math.floor(product.getPrice() + (product.getPrice() * 0.09 * 2 * 2 > 170 * 2 ? product.getPrice() * 0.09 * 2 * 2 : 170 * 2))); +// } +// } else { +// for (Product product : priceList) { +// product.setPrice(Math.floor(product.getPrice() + (product.getPrice() * 0.09 * 2 > 170 ? product.getPrice() * 0.09 * 2 : 170)) * 1.1); +// } +// } +// } else + + } else {// 900克 + // 小于一个名片位的价格按照一个名片位报价 + /* + * if((length <= 9 && width <= 5.4) || (length <= 5.4 && width <= 9)) { area = 0.00486; } + */ + priceList = new PriceUtils().tags600Price(dto, kind, kind2, area, count); + + for (Product product : priceList) { + // 服装吊牌里面的600克吊牌把价格*1.3倍 + product.setPrice(Math.floor(product.getPrice() * 1.3)); + if ("4".equals(kind)) { + // 服装吊牌里面的900克吊牌把价格 + if (product.getCount() <= 2000) { + product.setPrice(Math.floor(product.getPrice() * 1.1)); + } + if (product.getCount() > 2000 && product.getCount() <= 5000) { + product.setPrice(Math.floor(product.getPrice() * 1.08)); + } + if (product.getCount() > 5000) { + product.setPrice(Math.floor(product.getPrice() * 1.06)); + } + } + } + // +棉绳钱 1分5一条 + if (!StringUtils.isEmpty(dto.getCraftSheng())) { + for (Product product : priceList) { + product.setPrice(product.getPrice() + product.getCount() * 0.015); + } + } + for (Product product : priceList) { + product.setWeight(df.format(length * width * product.getCount() / 10000 * 0.6)); + } + } + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + // 根据款数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + } else { + double l = 420 + 4; + double w = 285 + 4; + length = length * 10 + 4; + width = width * 10 + 4; + // 一张l/w 大的纸张能做多少个此类尺寸的产品 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), Math.floor(l / width) * Math.floor(w / length)); + // 报的数量需要多少张大纸 + // 需要多少张大纸 = 数量 * 款数 /每张做多少个 ===总数量/每张多少个 + int num = (int) Math.ceil(count * number / max); + double designFee = 0; + if ((length - 4 <= 90 && width - 4 <= 54) || (length - 4 <= 54 && width - 4 <= 90)) { + designFee = 8; + } else if ((length - 4 <= 140 && width - 4 <= 100) || (length - 4 <= 100 && width - 4 <= 140)) { + designFee = 16; + } else if ((length - 4 <= 210 && width - 4 <= 140) || (length - 4 <= 140 && width - 4 <= 210)) { + designFee = 25; + } else if ((length - 4 <= 285 && width - 4 - 4 <= 210) || (length - 4 <= 210 && width - 4 <= 285)) { + designFee = 35; + } else if ((length - 4 <= 420 && width - 4 <= 285) || (length - 4 <= 285 && width - 4 <= 420)) { + designFee = 50; + } else { + designFee = 80; + } + Product products = dto; + products.setPrice(Math.floor(32 + (num - 5 > 0 ? num - 5 : 0) * 7 + designFee * number)); + priceList.add(products); + } + + // 产品重量 + double weight = 0; + if ("3".equals(kind)) { + weight = 0.3; + } else { + weight = 0.6; + } + for (Product product : priceList) { + product.setWeight(String.valueOf(weight * area * product.getCount() * number)); + } + return priceList; + // 特价名片 + case "特价名片": + // 选了【自定义尺寸】 + if (dto.isSwitchSize()) { + + } else { + dto.setKindValue("2"); + // 【覆膜/不覆膜】价格写死了 + // 不覆膜 + dto.setKind1Value("0"); + String[] craft = dto.getCraft(); + if (!StringUtils.isEmpty(craft)) { + for (int i = 0; i < craft.length; i++) { + if ("双面覆哑膜".equals(craft[i])) { + // 覆膜 + dto.setKind1Value("1"); + craft[i] = null; + break; + } + } + } + // 尺寸只有9*5.4cm以内的 + dto.setKind2Value("0"); + // if ("9*5.4".equals(size)) { + // } + priceList = productMapper.getThanPrice(dto); + // 产品价格倍数 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * product.getPriceMultiple())); + } + } + // 加工艺的价格 --有覆膜,带尺寸过去(毫米) + getCraft(dto, priceList, null, null, 0); + // 根据款数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + return priceList; + // 名片-特种纸名片 + case "特种纸名片": + double addPrice = 5; + if ("雅柔".equals(kind) || "萱姿".equals(kind)) { + kind = "珠光"; + dto.setKindValue("珠光"); + } else if ("500克拉丝闪金".equals(kind) || "500克拉丝闪银".equals(kind)) { + dto.setKindValue("拉丝闪银"); + length = 9.0; + width = 5.4; + } + if (dto.isSwitchCardCount() && ("珠光".equals(kind) || "溪雪".equals(kind))) { + // 出血(一边2毫米) + length = length * 10 + 4; + width = width * 10 + 4; + double l = 420; + double w = 290; + double price = 0.0; + // 第一张价格 + double fixPrice = 60; + // 每张多少钱 + double zhang = 10; + + // 一张l/w 大的纸张能做多少个此类尺寸的产品 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), Math.floor(l / width) * Math.floor(w / length)); + // 报的数量需要多少张大纸 + // 需要多少张大纸 = 数量 * 款数 /每张做多少个 ===总数量/每张多少个 + int num = (int) Math.ceil(count * number / max); + price = fixPrice + (num - 5 > 0 ? num - 5 : 0) * zhang; + Product dto2 = new Product(); + dto2.setCount(count); + dto2.setPrice(price + addPrice); + priceList.add(dto2); + getCraft(dto, priceList, null, null, 0); + } else if ("素芸".equals(kind)) { + int[] count_list = {100, 200, 400, 500, 1000, 2000, 3000, 5000, 10000}; + List craft_list = dto.getCraft() != null ? Arrays.asList(dto.getCraft()) : new ArrayList<>(); + double[] prices = {}; + if (craft_list.size() == 0 || craft_list.contains("异形模切")) { + prices = new double[]{144, 272, 528, 660, 1280, 2560, 3840, 6400, 12800}; + } + if (craft_list.contains("圆角") && !craft_list.contains("击凸") && !craft_list.contains("压凹")) { + prices = new double[]{146, 276, 536, 670, 1300, 2600, 3900, 6500, 13000}; + } + if (craft_list.contains("圆角") && (craft_list.contains("击凸") || craft_list.contains("压凹"))) { + prices = new double[]{216, 366, 666, 820, 1550, 3100, 4600, 7800, 15500}; + } + if (!craft_list.contains("圆角") && (craft_list.contains("击凸") || craft_list.contains("压凹"))) { + prices = new double[]{214, 362, 658, 810, 1530, 3060, 4590, 7650, 15300}; + } + + priceList = new ArrayList<>(); + Product dto2 = null; + double rate = 1.0; + for (int i = 0; i < count_list.length; i++) { + if (count_list[i] < count) { + continue; + } + if (priceList.size() > 2) { + break; + } + if (count_list[i] >= 400) { + rate = 0.8; + } + dto2 = new Product(); + dto2.setCount(count_list[i]); + dto2.setPrice(Math.ceil(prices[i] * rate)); + priceList.add(dto2); + } + int min = getNum(length, width); + for (Product product : priceList) { + if (craft_list.contains("异形模切")) { + product.setPrice(Math.floor(product.getPrice() * number * min * 2)); + } else { + product.setPrice(Math.floor(product.getPrice() * number * min)); + } + } + return priceList; + } else if ("草香".equals(kind) || "芳怡".equals(kind)) { + int[] count_list = {200, 500, 1000, 2000, 5000, 10000}; + // 出血(一边2毫米) + length = length * 10 + 4; + width = width * 10 + 4; + // -300克/200克/157克少数量价格+重量+工艺+款数价格 + double l = 0.0; + double w = 0.0; + double price = 0.0; + // 第一张价格 + double fixPrice = 0.0; + // 每张多少钱 + double zhang = 0.0; + // 设计费 *元/款 + double designFee = 0.0; + // 模切费 + double cutFee = 0.0; + + /** ======= 婚礼卡费用 ======= */ + // 5张以内价格 + if ((length - 4 <= 420 && width - 4 <= 285) || (length - 4 <= 285 && width - 4 <= 420)) { + fixPrice = 50.0; + zhang = 10; + + if (dto.getCraft() != null) { + List craftList = Arrays.asList(dto.getCraft()); + if (craftList.contains("异形模切")) { + zhang = 18; + } + } + + l = 420 + 4; + w = 285 + 4; + + } + + // 设计费不带出血的尺寸 + if ((length - 4 <= 90 && width - 4 <= 54) || (length - 4 <= 54 && width - 4 <= 90)) { + designFee = 8; + } else if ((length - 4 <= 210 && width - 4 <= 140) || (length - 4 <= 140 && width - 4 <= 210)) { + designFee = 15; + } else if ((length - 4 <= 285 && width - 4 - 4 <= 210) || (length - 4 <= 210 && width - 4 <= 285)) { + designFee = 35; + } else if ((length - 4 <= 420 && width - 4 <= 285) || (length - 4 <= 285 && width - 4 <= 420)) { + designFee = 50; + } else { + designFee = 80; + } + + // 一张l/w 大的纸张能做多少个此类尺寸的产品 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), Math.floor(l / width) * Math.floor(w / length)); + // 报的数量需要多少张大纸 + for (int i : count_list) { + // 需要多少张大纸 = 数量 * 款数 /每张做多少个 ===总数量/每张多少个 + if (i < count) { + continue; + } + int num = (int) Math.ceil(i * number / max); + // 婚礼卡 + price = fixPrice + (num - 1) * zhang + designFee + cutFee; + + Product dto2 = new Product(); + dto2.setCount(i); + dto2.setPrice(Math.ceil(price + addPrice)); + priceList.add(dto2); + } + + // 模切工艺 + //getCraft(dto, priceList, null, null, 0); + if ("1".equals(dto.getKindValue())) { + // 给产品加上重量 扣除出血的4毫米 + for (Product product : priceList) { + product.setWeight(df.format(number * (length - 4) / 1000 * (width - 4) / 1000 * product.getCount() * 0.2 * 0.86)); + } + } else { + // 给产品加上重量 + for (Product product : priceList) { + product.setWeight(df.format(number * (length - 4) / 1000 * (width - 4) / 1000 * product.getCount() * 0.3 * 0.86)); + } + } + + //第二款开始的设计费按照式设计内容 + if (number > 1) { + double desFee = 0; + if (dto.getP() == 1) { + desFee = 0.6; + } else if (dto.getP() == 2 || dto.getP() == 3) { + desFee = 0.8; + } else if (dto.getP() == 4) { + desFee = 1.2; + } else if (dto.getP() == 5) { + desFee = 2; + } else { + desFee = 5; + } + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() + desFee * (number - 1))); + } + } + return priceList; + } else { + // 产品位数 + int min = getNum(length, width); + + priceList = productMapper.getThanPrice(dto); + + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + // 产品价格倍数 + for (Product product : priceList) { + product.setPrice(Math.ceil((product.getPrice() + addPrice) * product.getPriceMultiple())); + } + if ("500克拉丝闪银".equals(kind)) { + String[] craft = dto.getCraft(); + if (!StringUtils.isEmpty(craft)) { + for (int i = 0; i < craft.length; i++) { + if ("烫金/".equals(craft[i])) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + 20 + 25)); + } + } else if ("凹凸".equals(craft[i])) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + 20 + 25)); + } + } else if ("双面".equals(craft[i])) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * 2)); + } + } + } + } + } else { + getCraft(dto, priceList, null, null, 0); + } + // 根据位数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * min)); + } + // 根据款数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + if ("芳怡".equals(kind) || "草香".equals(kind)) { + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * 1.5)); + } + } + } +// int tzWei = Integer.parseInt(Pattern.compile("[^0-9]").matcher(kind).replaceAll("").trim());// 获取材质中的克数 + int tzWei = 300;// 获取材质中的克数 + for (Product product : priceList) { + product.setWeight(df.format(tzWei / 1000 * length * width * product.getCount() / 10000 * number)); + } + return priceList; + // 合版封套 + case "6": + double lengthSize = dto.getLengthSize(); + double widthSize = dto.getWidthSize(); + double heightSize = dto.getHeightSize(); + double l = lengthSize + heightSize; + double w = widthSize * 2 + 2; + // 有尺寸,是自定义封套 + if (lengthSize > 0) { + // 产品位数 + double l1 = Math.ceil(l / 9.2); + double w1 = Math.ceil(w / 5.6); + double l2 = Math.ceil(w / 9.2); + double w2 = Math.ceil(l / 5.6); + // 产品位数 + int min = (int) Math.min(l1 * w1, l2 * w2); + if ("0".equals(kind)) { + int priceArr[] = {14, 20, 38, 64, 150, 290}; + priceList = new PriceUtils().getEnvelope(kind, count, min, priceArr); + } else { + int priceArr[] = {13, 19, 36, 62, 140, 280}; + priceList = new PriceUtils().getEnvelope(kind, count, min, priceArr); + } + // 根据款数计算重量 + for (Product product : priceList) { + product.setWeight(df.format(number * l * w * 0.25 * product.getCount() * 1.15 / 10000)); + } + } else { + priceList = productMapper.getThanPrice(dto); + + // 产品价格倍数 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * product.getPriceMultiple())); + } + // 根据款数计算重量 + for (Product product : priceList) { + product.setWeight(df.format(number * 0.43 * 0.3 * 0.25 * product.getCount() * 1.15)); + } + } + // 工艺的钱 + getCraft(dto, priceList, null, null, 0); + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + // 根据款数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + return priceList; + // 房卡套 + case "7": + lengthSize = dto.getLengthSize(); + widthSize = dto.getWidthSize(); + heightSize = dto.getHeightSize(); + l = lengthSize + heightSize; + w = widthSize * 2 + 1.8; + // 有尺寸,是自定义卡套 + if (lengthSize > 0) { + // 产品位数 + double l1 = Math.ceil(l / 9.2); + double w1 = Math.ceil(w / 5.6); + double l2 = Math.ceil(w / 9.2); + double w2 = Math.ceil(l / 5.6); + // 产品位数 + int min = (int) Math.min(l1 * w1, l2 * w2); + priceList = new PriceUtils().getRoomCard(count, min); + // 根据款数重新计算重量 + for (Product product : priceList) { + product.setWeight(df.format(number * l * w * 0.25 * product.getCount() * 1.15 / 10000)); + } + } else { // 没有尺寸,常规卡套 + oldKind = kind; + dto.setKindValue("0"); + priceList = productMapper.getThanPrice(dto); + dto.setKindValue(oldKind); + // 产品价格倍数 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * product.getPriceMultiple())); + } + // 根据款数计算重量 + for (Product product : priceList) { + product.setWeight(df.format(number * 0.13 * 0.139 * 0.25 * product.getCount() * 1.15)); + } + } + // 工艺的钱 + getCraft(dto, priceList, null, null, 0); + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + // 根据款数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + return priceList; + // 档案袋 + case "8": + priceList = productMapper.getThanPrice(dto); + + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + // 产品价格倍数 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * product.getPriceMultiple())); + } + // 根据款数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + return priceList; + // 彩色信封 + case "9": + // 120克双胶牛皮 + if ("10".equals(kind)) { + dto.setKindValue("0"); + priceList = productMapper.getThanPrice(dto); + } else if ("11".equals(kind)) {// 100克双胶牛皮 + dto.setKindValue("1"); + priceList = productMapper.getThanPrice(dto); + } else if ("3".equals(kind)) {// 200克珠光冰白彩色信封 + // 200克珠光冰白彩色信封报价:140克的基础上每个+*元 + dto.setKindValue("2");// 140克的value值 + priceList = productMapper.getThanPrice(dto); + for (Product product : priceList) { + if ("2".equals(kind2)) { + product.setPrice(product.getPrice() + product.getCount() * 0.12); + } else if ("3".equals(kind2)) { + product.setPrice(product.getPrice() + product.getCount() * 0.15); + } else if ("4".equals(kind2)) { + product.setPrice(product.getPrice() + product.getCount() * 0.16); + } else if ("5".equals(kind2)) { + product.setPrice(product.getPrice() + product.getCount() * 0.32); + } else { + product.setPrice(product.getPrice() + product.getCount() * 0.11); + } + } + } else {// 120/100克牛皮纸/ 140克珠光冰白彩色信封/高端珠光冰白烫金信封 + priceList = productMapper.getThanPrice(dto); + } + // 保留4个价格 + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + // 产品价格倍数 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * product.getPriceMultiple())); + } + // 根据款数重新算重量(重量在数据库中) + /* + * if (!StringUtils.isEmpty(priceList.get(0).getWeight())) { for (Product product : priceList) { product.setWeight(df.format(Double.valueOf(product.getWeight()) * number)); } } + */ + // 根据款数重新算价格 + double wei = 0.0; + if (kind.equals("0") || kind.equals("10")) { + wei = 0.12; + } else if (kind.equals("1") || kind.equals("11")) { + wei = 0.1; + } else if (kind.equals("2")) { + wei = 0.14; + } else if (kind.equals("3")) { + wei = 0.2; + } else { + wei = 0.15; + } + + if (kind.equals("0") || kind.equals("10") || kind.equals("1") || kind.equals("11")) { + if (dto.getKind2Value().equals("0")) { + area = 0.176 * 0.125; + } else if (dto.getKind2Value().equals("1")) { + area = 0.22 * 0.11; + } else if (dto.getKind2Value().equals("2")) { + area = 0.23 * 0.12; + } else if (dto.getKind2Value().equals("3")) { + area = 0.229 * 0.162; + } else if (dto.getKind2Value().equals("4")) { + area = 0.25 * 0.162; + } else { + area = 0.324 * 0.229; + } + } else if (kind.equals("2") || kind.equals("3")) { + if (dto.getKind2Value().equals("0")) { + area = 0.165 * 0.1; + } else if (dto.getKind2Value().equals("1")) { + area = 0.175 * 0.11; + } else if (dto.getKind2Value().equals("2")) { + area = 0.176 * 0.125; + } else if (dto.getKind2Value().equals("3")) { + area = 0.22 * 0.11; + } else if (dto.getKind2Value().equals("4")) { + area = 0.23 * 0.12; + } else if (dto.getKind2Value().equals("5")) { + area = 0.229 * 0.162; + } else if (dto.getKind2Value().equals("6")) { + area = 0.25 * 0.162; + } else { + area = 0.324 * 0.229; + } + } else { + if (dto.getKind2Value().equals("0")) { + area = 0.22 * 0.11; + } else { + area = 0.094 * 0.064; + } + } + for (Product product : priceList) { + product.setWeight(df.format(area * product.getCount() * number * wei)); + product.setPrice(Math.floor(product.getPrice() * number)); + } + + return priceList; + // 杯套 + case "10": + if ("5".equals(kind)) { + /* + * if(length == null) { length = 29.0; width = 7.0; } + */ + int min = getNum(length, width); + dto.setProTypeValue("4"); + dto.setKind("3"); + priceList = getHekaPrice(min, dto, priceList, count); + + getCraft(dto, priceList, length * 10, width * 10, min); + if ("粘成品".equals(dto.getCraftTang())) { + for (Product product : priceList) { + product.setPrice(product.getPrice() + 0.3 * product.getCount()); + } + } + for (Product product : priceList) { + product.setWeight(df.format(number * 0.3 * product.getCount() / 10000 * length * width)); + product.setPrice(Math.ceil(product.getPrice() * number)); + } + return priceList; + } else if ("6".equals(kind)) {// 盲盒杯套价格 + dto.setPrice(1800.0); + priceList.add(dto); + for (Product product : priceList) { + product.setWeight(df.format(number * 0.3 * product.getCount() * 0.29 * 0.07)); + product.setPrice(Math.ceil(product.getPrice() * number)); + } + return priceList; + } else if ("2".equals(kind)) {// 异形杯套价格计算 + priceList = new PriceUtils().getCupSetPrice(count); + } else { + priceList = productMapper.getThanPrice(dto); + // 产品价格倍数 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * product.getPriceMultiple())); + } + } + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + // 根据款数重新算价格/计算重量 + for (Product product : priceList) { + wei = 0.3; + if ("0".equals(kind) || "2".equals(kind)) { + area = 0.262 * 0.075; + } else if ("3".equals(kind) || "4".equals(kind)) { + area = 0.29 * 0.07; + } else if ("7".equals(kind)) { + area = 0.277 * 0.07; + } else { + area = 0.261 * 0.076; + wei = 0.25; + } + + product.setPrice(Math.floor(product.getPrice() * number)); + product.setWeight(df.format(number * wei * product.getCount() * area)); + } + if ("4".equals(kind)) { + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() + number * 50)); + } + } + return priceList; + // 牛皮纸手提袋 + case "11": + List hanbagList = new ArrayList(); + // 没有尺寸,就是常规,查询数据库 + if (StringUtils.isEmpty(size) && !dto.getK().equals("4")) { + // 各常规尺寸展开的长宽--用于计算重量 + double danjia = 0.0; + if ("0".equals(dto.getKind2Value())) { + length = 640.0; + height = 385.0; + if (count <= 10000) { + danjia = 0.88; + } else { + danjia = 0.78; + } + } else if ("1".equals(dto.getKind2Value())) { + length = 720.0; + height = 400.0; + if (count <= 10000) { + danjia = 1.064; + } else { + danjia = 0.9; + } + } else if ("2".equals(dto.getKind2Value())) { + length = 780.0; + height = 385.0; + danjia = 1.11; + } + // 第一位添加自定义数量的价格 + if (dto.isDiyCount() && count > 3000) { + Product dto2 = new Product(); + dto2.setCount(count); + dto2.setPrice(Math.ceil(danjia * count)); + priceList.add(dto2); + } + if ("2".equals(dto.getKindValue())) { + dto.setKindValue("0"); + } + hanbagList = productMapper.getThanPrice(dto); + // 把查出来的价格跟在自定义数量价格后面 + for (int i = 0; i < hanbagList.size(); i++) { + if (priceList.size() > 0) { + if (count == hanbagList.get(i).getCount()) + continue; + } + priceList.add(hanbagList.get(i)); + } + // 给产品加上重量 + for (Product product : priceList) { + product.setWeight(df.format(number * length / 1000 * height / 1000 * product.getCount() * 0.13 * 1.25)); + } + } else { + if ("4".equals(dto.getK())) { + String kind2Value = dto.getKind2Value(); + String kindValue = dto.getKindValue(); + int[] base_count = null; + double[] base_price = null; + length = 0.0; + height = 0.0; + if ("0".equals(kindValue) && !"11".equals(kind2Value) && !"12".equals(kind2Value)) { + base_count = new int[]{100, 500, 1000, 2000, 3000, 5000, 10000}; + } else { + base_count = new int[]{500, 1000, 2000, 3000, 5000, 10000}; + } + if ("1".equals(kind2Value)) { + if ("0".equals(kindValue)) { + base_price = new double[]{420, 620, 1260, 2230, 3200, 5000, 9300}; + } + if ("1".equals(kindValue)) { + base_price = new double[]{600, 1300, 2400, 3400, 5200, 9500}; + } + length = 25.0; + height = 24.0; + } + if ("2".equals(kind2Value)) { + if ("0".equals(kindValue)) { + base_price = new double[]{480, 772, 1300, 2400, 3500, 5200, 9800}; + } + if ("1".equals(kindValue)) { + base_price = new double[]{750, 1320, 2330, 3500, 5880, 11000}; + } + length = 25.0; + height = 27.0; + } + if ("3".equals(kind2Value)) { + if ("0".equals(kindValue)) { + base_price = new double[]{480, 730, 1320, 2330, 3300, 5280, 9800}; + } + if ("1".equals(kindValue)) { + base_price = new double[]{770, 1200, 2380, 3400, 5300, 9500}; + } + length = 28.0; + height = 26.5; + } + if ("4".equals(kind2Value)) { + if ("0".equals(kindValue)) { + base_price = new double[]{420, 560, 950, 1750, 2500, 4000, 7600}; + } + if ("1".equals(kindValue)) { + base_price = new double[]{645, 1000, 1880, 2680, 4180, 7880}; + } + length = 23.0; + height = 25.0; + } + if ("5".equals(kind2Value)) { + if ("0".equals(kindValue)) { + base_price = new double[]{450, 733, 980, 1700, 2500, 4000, 7600}; + } + if ("1".equals(kindValue)) { + base_price = new double[]{651, 890, 1480, 2150, 3450, 6625}; + } + length = 11.0; + height = 25.0; + } + if ("6".equals(kind2Value)) { + if ("0".equals(kindValue)) { + base_price = new double[]{390, 658, 1030, 1800, 2600, 4200, 8350}; + } + if ("1".equals(kindValue)) { + base_price = new double[]{593, 1000, 1720, 2500, 4000, 7800}; + } + length = 16.0; + height = 23.0; + } + if ("7".equals(kind2Value)) { + if ("0".equals(kindValue)) { + base_price = new double[]{320, 520, 860, 1550, 2240, 3750, 6900}; + } + if ("1".equals(kindValue)) { + base_price = new double[]{500, 890, 1530, 2130, 3430, 6280}; + } + length = 21.0; + height = 27.0; + } + if ("8".equals(kind2Value)) { + if ("0".equals(kindValue)) { + base_price = new double[]{400, 540, 1100, 1640, 2400, 3950, 7380}; + } + if ("1".equals(kindValue)) { + base_price = new double[]{560, 980, 1640, 2230, 3600, 6580}; + } + length = 21.0; + height = 26.5; + } + if ("9".equals(kind2Value)) { + if ("0".equals(kindValue)) { + base_price = new double[]{500, 760, 1200, 2260, 3300, 5200, 9910}; + } + if ("1".equals(kindValue)) { + base_price = new double[]{700, 1100, 1920, 2800, 4400, 8500}; + } + length = 25.0; + height = 27.0; + } + if ("10".equals(kind2Value)) { + if ("0".equals(kindValue)) { + base_price = new double[]{600, 970, 1450, 2480, 3600, 5450, 9380}; + } + if ("1".equals(kindValue)) { + base_price = new double[]{910, 1350, 2300, 3400, 5100, 8600}; + } + length = 32.0; + height = 27.0; + } + if ("11".equals(kind2Value)) { + if ("0".equals(kindValue)) { + base_price = new double[]{1192, 1600, 2800, 4100, 6500, 11280}; + } + if ("1".equals(kindValue)) { + base_price = new double[]{920, 1350, 2250, 3500, 6350, 10800}; + } + length = 32.0; + height = 39.0; + } + if ("12".equals(kind2Value)) { + if ("0".equals(kindValue)) { + base_price = new double[]{1000, 1500, 2500, 3500, 5300, 10000}; + } + if ("1".equals(kindValue)) { + base_price = new double[]{850, 1400, 2100, 2800, 4100, 7800}; + } + length = 25.0; + height = 32.0; + } + Product pro = null; + double color_price = 0; + double bei_price = 0; + if (dto.getShen_type() == 0) { + if (!"白色".equals(dto.getShen_color()) && !"黄牛皮本色".equals(dto.getShen_color())) { + color_price = 0.02; + } + } + if (dto.getShen_type() == 1) { + color_price = 0.06; + if ("白色".equals(dto.getShen_color()) || "黄牛皮本色".equals(dto.getShen_color())) { + color_price = 0.03; + } + } + if (dto.getZheye() != null && dto.getZheye() == 0) { + bei_price = 0.4; + } + if (dto.getZheye() != null && dto.getZheye() == 1) { + bei_price = 0.6; + } + if (dto.getZheye() != null && dto.getZheye() == 2) { + bei_price = 0.3; + } + for (int i = 0; i < base_count.length; i++) { + if (base_count[i] < count) { + continue; + } + if (priceList.size() > 2) { + break; + } + pro = new Product(); + pro.setCount(base_count[i]); + pro.setPrice(Math.ceil(base_price[i] + (base_count[i] * color_price) + (base_count[i] * bei_price))); + priceList.add(pro); + } + + for (Product product : priceList) { + product.setPrice(product.getPrice() * number); + product.setWeight(df.format(number * length / 1000 * height / 1000 * product.getCount() * 0.13 * 1.25)); + } + + return priceList; + } + // 厘米转成毫米 + length = length * 10; + width = width * 10; + height = height * 10; + length = (length + width) * 2 + 20; + height = (height + (width / 2 + 20)) + 40; + double price = 0.0; + int ikai = 0; + String kai = ""; + String kaiDa = new PriceUtils().getDa(length, height); + String kaiZheng = new PriceUtils().getZheng(length, height); + int intDa = Integer.parseInt(kaiDa); + int intZheng = Integer.parseInt(kaiZheng); + int maxDa = intDa > intZheng ? intDa : intZheng; + if (intZheng >= intDa) { + kai = "+" + maxDa; + } + if (kai.contains("+")) { + kai = kai.replaceAll("[^(0-9)]", ""); + ikai = Integer.parseInt(kai); + // 140克牛皮纸 + if ("0".equals(kind)) { + price = 1.2; + // 250克牛皮纸 + } else { + price = 2.2; + } + } else { + ikai = maxDa; + if ("0".equals(kind)) { + price = 1.4; + } else { + price = 2.8; + } + } + // !福袋/礼品袋 + if (!"2".equals(dto.getK())) { + if (length >= 1000 || height >= 700) { + ikai = 1; + priceList = new PriceUtils().getPriceHanding(count, ikai, price, 2); + } else { + // 系数 5千-1万的*1.6 5千以下的*1.7 + if (count <= 5000) { + priceList = new PriceUtils().getPriceHanding(count, ikai, price, 1.7); + } else { + priceList = new PriceUtils().getPriceHanding(count, ikai, price, 1.6); + } + } + } else { + if (length >= 1000 || height >= 700) { + ikai = 1; + } + // 数量超过1万个,系数*1.6 + if (count > 10000) { + priceList = new PriceUtils().getPriceHanding(count, ikai, price, 1.6); + } else { + priceList = new PriceUtils().getPriceHanding(count, ikai, price, 1.8); + } + } + // 给产品加上重量 + if ("0".equals(kind)) { + for (Product product : priceList) { + product.setWeight(df.format(number * length / 1000 * height / 1000 * product.getCount() * 0.14 * 1.25)); + } + } else { + for (Product product : priceList) { + product.setWeight(df.format(number * length / 1000 * height / 1000 * product.getCount() * 0.25 * 1.25)); + } + } + } + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + // 根据款数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + return priceList; + // 250克白牛皮纸 + case "12": + priceList = productMapper.getThanPrice(dto); + if ("0".equals(dto.getKindValue())) { + length = 700.0; + height = 460.0; + } else if ("1".equals(dto.getKindValue())) { + length = 680.0; + height = 440.0; + } else if ("2".equals(dto.getKindValue())) { + length = 740.0; + height = 500.0; + } else if ("3".equals(dto.getKindValue())) { + length = 820.0; + height = 510.0; + } else if ("4".equals(dto.getKindValue())) { + length = 740.0; + height = 380.0; + } else if ("5".equals(dto.getKindValue())) { + length = 800.0; + height = 390.0; + } else if ("6".equals(dto.getKindValue())) { + length = 980.0; + height = 390.0; + } else if ("7".equals(dto.getKindValue())) { + length = 1000.0; + height = 430.0; + } + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + // 产品价格倍数 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * product.getPriceMultiple())); + } + // 根据款数重新算价格/计算重量 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + product.setWeight(df.format(length / 1000 * height / 1000 * product.getCount() * 0.25 * 1.25)); + } + return priceList; + // 吊旗 + case "13": + length = length * 10; + width = width * 10; + String value = dto.getKind1Label(); + if (length <= 285 && width <= 210 || length <= 210 && width <= 285) { + dto.setKind2Value("0"); + } else if (length <= 420 && width <= 285 || length <= 285 && width <= 420) { + dto.setKind2Value("1"); + } else if (length <= 570 && width <= 280 || length <= 280 && width <= 570) { + dto.setKind2Value("2"); + } else if (length <= 520 && width <= 370 || length <= 370 && width <= 520) { + dto.setKind2Value("3"); + } else if (length <= 570 && width <= 420 || length <= 420 && width <= 570) { + dto.setKind2Value("4"); + } else if (length <= 730 && width <= 560 || length <= 560 && width <= 730) { + dto.setKind2Value("5"); + } + priceList = productMapper.getThanPrice(dto); + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + // 产品价格倍数 + for (Product product : priceList) { + if (product.getCount() >= 50) { + product.setPrice(Math.ceil(product.getPrice() * 1.6)); + } + //product.setPrice(Math.ceil(product.getPrice() * product.getPriceMultiple())); + } + if ("2".equals(value)) { + for (Product product : priceList) { + product.setPrice(product.getPrice() - 20); + } + } + // 给产品加上重量 + if ("2".equals(dto.getKindValue())) { + for (Product product : priceList) { + product.setWeight(df.format(number * length / 1000 * width / 1000 * product.getCount() * 0.3 * 0.86)); + } + } else if ("1".equals(dto.getKindValue())) { + for (Product product : priceList) { + product.setWeight(df.format(number * length / 1000 * width / 1000 * product.getCount() * 0.2 * 0.86)); + } + } else { + for (Product product : priceList) { + product.setWeight(df.format(number * length / 1000 * width / 1000 * product.getCount() * 0.157 * 0.86)); + } + } + // 根据款数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + return priceList; + // 宣传单 + case "14": + length = length * 10; + width = width * 10; + if ((length <= 140 && width <= 210) || (length <= 210 && width <= 140)) { + dto.setKind2Value("2"); + priceList = productMapper.getThanPrice(dto); + } else if ((length <= 210 && width <= 285) || (length <= 285 && width <= 210)) { + dto.setKind2Value("1"); + priceList = productMapper.getThanPrice(dto); + } else if ((length <= 420 && width <= 285) || (length <= 285 && width <= 420)) { + dto.setKind2Value("0"); + priceList = productMapper.getThanPrice(dto); + } else { + // 产品位数 + double l1 = Math.ceil(length / 210); + double w1 = Math.ceil(width / 285); + double l2 = Math.ceil(width / 210); + double w2 = Math.ceil(length / 285); + int min = (int) Math.min(l1 * w1, l2 * w2); + + // 157克铜版纸尺寸大于57厘米,多加一位 + if (length > 570 || width > 570) { + if ("3".equals(kind)) + min = min + 1; + } + // 设置位数 + dto.setNum(min); + // 位数以A4纸为标准计算 + dto.setKind2Value("1"); + priceList = productMapper.diaoqiThanPrice(dto); + } + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + // 产品价格倍数 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * product.getPriceMultiple())); + } + + // 工艺----如果有覆膜(亮膜哑膜价格一致) + /** + * 宣传单复膜计算方法 157克(含157克)以下材质不能复膜,200克以上材质单面复膜:长*宽(M)*数量*0.6元/平方米,双面*2.最低收50,双面80 + */ + String[] craft = dto.getCraft(); + if (!StringUtils.isEmpty(craft)) { + if (craft.length > 1) { + if ("折页".equals(craft[0]) && ("压痕").equals(craft[1])) { + craft[0] = "折页压痕"; + craft[1] = ""; + } + } + for (int i = 0; i < craft.length; i++) { + if ("折页".equals(craft[i])) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + (product.getCount() * 0.03 > 70 ? product.getCount() * 0.03 : 70) + 25 * dto.getZheye())); + } + } + if ("压痕".equals(craft[i])) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + (product.getCount() * 0.05 > 90 ? product.getCount() * 0.05 : 90) + 25 * dto.getZheye())); + } + } + if ("折页压痕".equals(craft[i])) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + (product.getCount() * 0.07 > 100 ? product.getCount() * 0.07 : 100) + 25 * dto.getZheye())); + } + } + if ("模切".equals(craft[i])) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + 30 + 65 + 0.15 * product.getCount())); + } + } + if ("单面覆膜".equals(craft[i])) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + (length / 1000 * width / 1000 * product.getCount() * 0.7 > 50 ? length / 1000 * width / 1000 * product.getCount() * 0.7 : 50))); + } + } + if ("双面覆膜".equals(craft[i])) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + (length / 1000 * width / 1000 * product.getCount() * 0.7 * 2 > 80 ? length / 1000 * width / 1000 * product.getCount() * 0.7 * 2 : 80))); + } + } + } + } + + // 给产品加上重量 + weight = 0.0; + switch (kind) { + case "0": + weight = 0.08; + break; + case "1": + weight = 0.25; + break; + case "2": + weight = 0.2; + break; + case "3": + weight = 0.157; + break; + } + // 根据款数重新算价格/计算重量 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + product.setWeight(df.format(number * length / 1000 * width / 1000 * product.getCount() * 0.86 * weight)); + } + return priceList; + // 腰封200克/157克 + case "15": + // 腰封少数量走的是吊旗少数量的价格 + length = length * 10; + width = width * 10; + if ((length <= 280 && width <= 65) || length <= 65 && width <= 280) { + dto.setKind2Value("0"); + } else if (length <= 420 && width <= 80 || length <= 80 && width <= 420) { + dto.setKind2Value("1"); + } else if (length <= 420 && width <= 100 || length <= 100 && width <= 420) { + dto.setKind2Value("2"); + } else if (length <= 560 && width <= 80 || length <= 80 && width <= 560) { + dto.setKind2Value("3"); + } else if (length <= 560 && width <= 100 || length <= 100 && width <= 560) { + dto.setKind2Value("4"); + } else if (length <= 630 && width <= 100 || length <= 100 && width <= 630) { + dto.setKind2Value("5"); + } else if (length <= 750 && width <= 80 || length <= 80 && width <= 750) { + dto.setKind2Value("6"); + } else if (length <= 630 && width <= 200 || length <= 200 && width <= 630) { + dto.setKind2Value("7"); + } else if (length <= 850 && width <= 90 || length <= 90 && width <= 850) { + dto.setKind2Value("8"); + } else if (length <= 850 && width <= 210 || length <= 210 && width <= 850) { + dto.setKind2Value("9"); + } else if ((length > 850 || width > 210) && (width > 850 || length > 210)) { + dto.setKind2Value("9"); + } + if (count <= 10000) + priceList = productMapper.getThanPrice(dto); + else + priceList = productMapper.thanThousandPrice(dto); + + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + // 产品价格倍数 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * product.getPriceMultiple())); + } + if (length > 500 || width > 500) { + // 200克铜版纸 + if ("1".equals(kind)) { + for (Product product : priceList) { + if (product.getCount() > 2000) { + product.setPrice(product.getPrice() + 50); + } + } + } + } + + craft = dto.getCraft(); + // 腰封自己的模切单独价格 + if (!StringUtils.isEmpty(craft)) { + for (int i = 0; i < craft.length; i++) { + if ("模切".equals(craft[i])) { + craft[i] = "腰封模切"; + break; + } + } + } + // 加工艺的价格 --有覆膜,带尺寸过去(毫米) + getCraft(dto, priceList, length, width, 0); + // 根据款数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + return priceList; + case "金属标": + if ("金属标".equals(dto.getKind())) { + priceList = new PriceUtils().getMetalPrice(priceList, width, length, count, number); + // 根据款数重新算价格 +// for (Product product : priceList) { +// product.setPrice(Math.floor(product.getPrice() * number)); +// } + for (Product product : priceList) { + if (dto.getCraftMo().equals("双色")) { + product.setPrice(Math.floor(product.getPrice() * 2)); + } else if (dto.getCraftMo().equals("彩色(三色)")) { + product.setPrice(Math.floor(product.getPrice() * 3)); + } else if (dto.getCraftMo().equals("彩色(四色)")) { + product.setPrice(Math.floor(product.getPrice() * 4)); + } + } + } else if ("UV转印贴".equals(dto.getKind())) { + if (length <= 2) { + length = 2.0; + } + if (width <= 2) { + width = 2.0; + } + + //if(role.indexOf("1000") > -1 || role.indexOf("1006") > -1) {//菇凉&卓胜uv单独报价 priceList = new PriceUtils().UVStickerLessPrice(length, width, count,number, dto.getCraft()); }else { + + // 1006 1003 1005 1037 1058 1002 1033 1045 卓盛 航和 米笛儿 竹范 领淘文具 榆家 涛莱 拼多多uv单独报价 + if (role.indexOf("1045") > -1) { + priceList = new PriceUtils().UVStickerSmallPrice(length, width, count, number, dto.getCraftMo(), dto.getCraft()); + } else { + priceList = new PriceUtils().UVStickerPrice(length, width, count, number, dto.getCraftMo(), dto.getCraft()); + } + + if (priceList.get(0).getCount() != count) { + priceList.get(0).setCount(count); + } + if (!StringUtils.isEmpty(dto.getCraft())) { + for (Product product : priceList) { + product.setPrice(product.getPrice() * number); + } + } +// double base = number < 6 && number > 1 ? 5 : 0; +// for (Product product : priceList) { +// product.setPrice(product.getPrice() + base); +// } + + /* } */ + + /* + * if(count < 10) { priceList = new PriceUtils().UVStickerLessPrice(length, width, count,number, dto.getCraft()); }else { priceList = new PriceUtils().UVStickerPrice(length, width, count,number, dto.getCraftMo(), dto.getCraft()); } + */ + + area = length * width * count / 10000; + + // 根据款数重新算价格 +// if (number > 1) { +// for (Product product : priceList) { +// if (area <= 0.005) { +// if (count <= 5) { +// product.setPrice(Math.ceil(product.getPrice()) + 5 * number); +// } else { +// product.setPrice(Math.ceil(product.getPrice() * number)); +// } +// } else { +// product.setPrice(Math.ceil(product.getPrice() * number)); +// } +// } +// } + /* + * List priceList2 = new PriceUtils().UVStickerLessPrice(length, width, count, number, dto.getCraft()); // 比较哪个便宜 if ((priceList.get(0).getPrice() > priceList2.get(0).getPrice()) && priceList2.get(0).getPrice() > 0) { // Double minPrice = Math.min(priceList.get(0).getPrice(), // priceList2.get(0).getPrice()); priceList = new ArrayList(); Product product = new Product(); product.setCount(count); product.setPrice(priceList2.get(0).getPrice()); + * product.setMsg("大张出货(2-3天发货)"); priceList.add(product); return priceList; } + */ + } + return priceList; + case "卡片少数量": + String crafts[] = dto.getCraft(); + String craftShua = dto.getCraftShua(); + if (dto.getProTypeLabel().equals("菜单")) { + priceList = new CardPrice().getMenuPrice(dto.getKind1Value(), size, count, number, dto.getCraft()); + } else if (dto.getProTypeLabel().equals("婚礼报纸")) { + length = length * 10 + 4; + width = width * 10 + 4; + double price = 50; + double designPrice = 30; + double zhang = 6; + l = 420 + 4; + w = 285 + 4; + // 一张l/w 大的纸张能做多少个此类尺寸的产品 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), Math.floor(l / width) * Math.floor(w / length)); + // 报的数量需要多少张大纸 + // 需要多少张大纸 = 数量 * 款数 /每张做多少个 ===总数量/每张多少个 + int num = (int) Math.ceil(count * number / max); + price = price + designPrice * number; + if (num > 1) { + price += zhang * num; + } + Product dto2 = new Product(); + dto2.setCount(count); + dto2.setPrice(Math.ceil(price)); + priceList.add(dto2); + } else if (dto.getProTypeLabel().equals("种子纸")) { + int av_count = count; + if (!StringUtils.isEmpty(dto.getSwitchz3Size()) || "2".equals(dto.getZ3type())) { + count = Math.max(count, 300); + } + double price = Math.ceil((length * width * count * 200) / 10000);//价格计算尺寸*数量*200/10000 + + if (!StringUtils.isEmpty(crafts) && Arrays.asList(crafts).contains("编码")) {//起步价10 + price += Math.max(count * 0.5, 10); + } + if (!StringUtils.isEmpty(crafts) && Arrays.asList(crafts).contains("打孔")) { + price += Math.max(count * 0.2, 10); + } + if (!StringUtils.isEmpty(crafts) && Arrays.asList(crafts).contains("手撕线")) { + price += Math.max(count * 0.2, 10); + } + if (!StringUtils.isEmpty(crafts) && Arrays.asList(crafts).contains("压痕")) { + price += Math.max(count * 0.2, 10); + } + price = price * number;//款数翻倍 + price = Math.max(price, 80); + + if (!StringUtils.isEmpty(dto.getSwitchz3Size())) { + price += 100; + } + List craft_list = crafts != null ? Arrays.asList(crafts) : new ArrayList<>(); + if (craft_list.size() > 0 && craft_list.contains("绳子")) { + price += Math.max(5, Math.ceil(0.1 * number * count)); + } + Product dto2 = new Product(); + dto2.setCount(av_count); + dto2.setWeight(df.format(number * (length / 100) * (width / 100) * av_count * 0.3 * 0.86)); + dto2.setPrice(Math.ceil(price)); + priceList.add(dto2); + } else if (!StringUtils.isEmpty(crafts) && crafts[crafts.length - 1].indexOf("烫金") > -1) { + // 出血(一边2毫米) + length = length * 10 + 4; + width = width * 10 + 4; + double price = 0.0; + // 第一张价格 + double fixPrice = 0.0; + // 每张多少钱 + double zhang = 0.0; + // 设计费 *元/款 + double designFee = 0.0; + // 模切费 + double cutFee = 0.0; + if ("异形卡片".equals(dto.getKind()) && !StringUtils.isEmpty(dto.getCraft())) { + fixPrice = 110.0; + zhang = 8; + } else { + fixPrice = 100.0; + if ("单面印刷".equals(craftShua)) { + zhang = 5; + } else { + zhang = 6; + } + } + // 设计费不带出血的尺寸 + if ((length - 4 <= 90 && width - 4 <= 54) || (length - 4 <= 54 && width - 4 <= 90)) { + designFee = 8; + } else if ((length - 4 <= 140 && width - 4 <= 100) || (length - 4 <= 100 && width - 4 <= 140)) { + designFee = 16; + } else if ((length - 4 <= 210 && width - 4 <= 140) || (length - 4 <= 140 && width - 4 <= 210)) { + designFee = 15; + } else if ((length - 4 <= 285 && width - 4 <= 210) || (length - 4 <= 210 && width - 4 <= 285)) { + designFee = 35; + } else if ((length - 4 <= 420 && width - 4 <= 285) || (length - 4 <= 285 && width - 4 <= 420)) { + designFee = 50; + } + l = 420 + 4; + w = 285 + 4; + // 一张l/w 大的纸张能做多少个此类尺寸的产品 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), Math.floor(l / width) * Math.floor(w / length)); + // 报的数量需要多少张大纸 + // 需要多少张大纸 = 数量 * 款数 /每张做多少个 ===总数量/每张多少个 + int num = (int) Math.ceil(count / max); + price = fixPrice + (num - 5 > 0 ? num - 5 : 0) * zhang + designFee + cutFee; + Product dtos = new Product(); + dtos.setCount(count); + dtos.setPrice(Math.ceil(price)); + priceList.add(dtos); + for (int i = 0; i < crafts.length; i++) { + if ("烫金".equals(crafts[i])) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + num * 25)); + } + } else if ("彩色印刷+烫金".equals(crafts[i])) {// 少数量卡片带烫金工艺,每张烫金+35块(1张起收) + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + num * 35)); + } + } + } + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * number)); + } + } else { + // 出血(一边2毫米) + length = length * 10 + 4; + width = width * 10 + 4; + // -300克/200克/157克少数量价格+重量+工艺+款数价格 + l = 0.0; + w = 0.0; + double price = 0.0; + // 第一张价格 + double fixPrice = 0.0; + // 每张多少钱 + double zhang = 0.0; + // 设计费 *元/款 + double designFee = 0.0; + // 模切费 + double cutFee = 0.0; + + /** ======= 婚礼卡费用 ======= */ + // 5张以内价格 + double fixPrice9 = 0.0; + // 每增加1张多少钱 + double zhang9 = 0.0; + // 设计费 + double designFee9 = 0.0; + // 模切费 + double cutFee9 = 0.0; + // if ((length <= 285 && width <= 210) || (length <= 210 && width <= 285)) { + // fixPrice = 40.0; + // zhang = 8; + // l = 420; + // w = 285; + // fixPrice9 = 50; + // zhang9 = 8; + // } else + if ((length - 4 <= 420 && width - 4 <= 285) || (length - 4 <= 285 && width - 4 <= 420)) { + if ("特种纸名片".equals(dto.getKind())) { + fixPrice = 50.0; + zhang = 10; + + if (crafts != null) { + List craftList = Arrays.asList(crafts); + if (craftList.contains("模切")) { + zhang = 18; + } + } + + } else if (("异形卡片".equals(dto.getKind()) && !StringUtils.isEmpty(dto.getCraft())) || (!StringUtils.isEmpty(dto.getCraft()) && Arrays.asList(dto.getCraft()).contains("异形"))) { + fixPrice = 32.0; + zhang = 8; + } else { + fixPrice = 30.0; + /*if ("单面印刷".equals(craftShua)) { + zhang = 8; + } else {*/ + zhang = 6; + /*}*/ + } + l = 420; + w = 285; + fixPrice9 = 40; + zhang9 = 6; + // 婚礼卡,直角工艺一张5元 + if (!StringUtils.isEmpty(dto.getCraft())) { + craft = dto.getCraft(); + if ("直角".equals(craft[0])) { + zhang9 = 5; + } + } + } else if ((length - 4 <= 570 && width - 4 <= 420) || (length - 4 <= 420 && width - 4 <= 570)) { + if ("特种纸名片".equals(dto.getKind())) { + return null; + } + fixPrice = 60.0; + zhang = 5; + cutFee = 150; + l = 570; + w = 420; + fixPrice9 = 90; + zhang9 = 8; + cutFee9 = 150; + } else if ((length - 4 <= 730 && width - 4 <= 530) || (length - 4 <= 530 && width - 4 <= 730)) { + fixPrice = 100.0; + if ("特种纸名片".equals(dto.getKind())) { + return null; + } + if ("单面印刷".equals(craftShua)) { + zhang = 5; + } else { + zhang = 6; + } + if (!StringUtils.isEmpty(dto.getCraft())) + cutFee = 150; + l = 730; + w = 530; + fixPrice9 = 100; + zhang9 = 10; + cutFee9 = 150; + } + /* + * if (!"特种纸名片".equals(dto.getKind()) && ("异形卡片".equals(dto.getKind()) || !StringUtils.isEmpty(dto.getCraft()))) { zhang = 7; } + */ + /* + * 婚礼卡设计费成品尺寸90X54MM以内每款收10元 140X100MM以内每款收15元 210X140MM以内30元 210X285MM以内40元 420X285MM以内60元 大于420X285MM80元 + */ + // 设计费不带出血的尺寸 + if ((length - 4 <= 90 && width - 4 <= 54) || (length - 4 <= 54 && width - 4 <= 90)) { + designFee = 8; + designFee9 = 10; + } /*else if ((length - 4 <= 140 && width - 4 <= 100) || (length - 4 <= 100 && width - 4 <= 140)) { + designFee = 16; + designFee9 = 15; + }*/ else if ((length - 4 <= 210 && width - 4 <= 140) || (length - 4 <= 140 && width - 4 <= 210)) { + designFee = 15; + designFee9 = 15; + } else if ((length - 4 <= 285 && width - 4 - 4 <= 210) || (length - 4 <= 210 && width - 4 <= 285)) { + designFee = 35; + designFee9 = 40; + } else if ((length - 4 <= 420 && width - 4 <= 285) || (length - 4 <= 285 && width - 4 <= 420)) { + designFee = 50; + designFee9 = 60; + } else { + designFee = 80; + designFee9 = 80; + } + if ("腰封".equals(dto.getKind())) { + zhang = 8; + } + // 一张l/w 大的纸张能做多少个此类尺寸的产品 + double max = 1; + if (length == 424 || length == 289 || width == 424 || width == 289) { + max = Math.max(Math.floor(l / (length - 4)) * Math.floor(w / (width - 4)), Math.floor(l / (width - 4)) * Math.floor(w / (length - 4))); + } else { + max = Math.max(Math.floor(l / length) * Math.floor(w / width), Math.floor(l / width) * Math.floor(w / length)); + } + // 报的数量需要多少张大纸 + // 需要多少张大纸 = 数量 * 款数 /每张做多少个 ===总数量/每张多少个 + int num = (int) Math.ceil(count * number / max); + // 婚礼卡 + if ("婚礼卡".equals(dto.getKind()) || "抽奖卡".equals(dto.getKind())) { + // 5张以内价格 + 每张费用(第6张起收)+ 设计费 * 款数 + 模切费 + 0.1 * 总数量 (排号费) + price = fixPrice9 + (num - 5 > 0 ? num - 5 : 0) * zhang9 + designFee9 + cutFee9 + 0.1 * count * number; + } else { + price = fixPrice + (num - 1) * zhang + designFee + cutFee; + } + if ("刮刮卡".equals(dto.getKind())) { + price = price + 0.2 * count * number; + } + Product dto2 = new Product(); + dto2.setCount(count); + dto2.setPrice(Math.ceil(price)); + priceList.add(dto2); + // 模切工艺 + craft = dto.getCraft(); + if (!StringUtils.isEmpty(craft)) { + for (int i = 0; i < craft.length; i++) { + if ("模切".equals(craft[i])) { + for (Product product : priceList) { + product.setPrice(product.getPrice());// + cutFee + } + } + // 少数量卡片带烫金工艺,每张烫金+25块(1张起收) + /* + * if ("烫金".equals(craft[i])) { for (Product product : priceList) { product.setPrice(product.getPrice() + num * 25); } } else if ("彩色印刷+烫金".equals(craft[i])) {// 少数量卡片带烫金工艺,每张烫金+35块(1张起收) for (Product product : priceList) { product.setPrice(product.getPrice() + num * 35); } } + */ + } + } + if ("1".equals(dto.getKindValue())) { + // 给产品加上重量 扣除出血的4毫米 + for (Product product : priceList) { + product.setWeight(df.format(number * (length - 4) / 1000 * (width - 4) / 1000 * product.getCount() * 0.2 * 0.86)); + } + } else { + // 给产品加上重量 + for (Product product : priceList) { + product.setWeight(df.format(number * (length - 4) / 1000 * (width - 4) / 1000 * product.getCount() * 0.3 * 0.86)); + } + } + } + + //第二款开始的设计费按照式设计内容 + if (!dto.getProTypeLabel().equals("婚礼报纸") && !dto.getProTypeLabel().equals("菜单") && number > 1) { + double desFee = 0; + if (dto.getP() == 1) { + desFee = 0.6; + } else if (dto.getP() == 2 || dto.getP() == 3) { + desFee = 0.8; + } else if (dto.getP() == 4) { + desFee = 1.2; + } else if (dto.getP() == 5) { + desFee = 2; + } else { + desFee = 18; + int min = getNumAdd((length - 4) / 10, (width - 4) / 10); + if (min == 1) { + desFee = 7; + } + if (min == 2) { + desFee = 10; + } + if (min == 3) { + desFee = 14; + } + if (min == 4) { + desFee = 18; + } + } + + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() + desFee * (number - 1))); + } + } + + return priceList; + // 便签本/联单 + case "16": + length = length * 10; + width = width * 10; + if ("联单".equals(dto.getNotePaperKind())) { + if ((length <= 130 && width <= 95) || length <= 95 && width <= 130) { + dto.setKindValue("0"); + } else if (length <= 140 && width <= 100 || length <= 100 && width <= 140) { + dto.setKindValue("1"); + } else if (length <= 175 && width <= 95 || length <= 95 && width <= 175) { + dto.setKindValue("2"); + } else if (length <= 210 && width <= 95 || length <= 95 && width <= 210) { + dto.setKindValue("3"); + } else if (length <= 185 && width <= 130 || length <= 130 && width <= 185) { + dto.setKindValue("4"); + } else if (length <= 210 && width <= 140 || length <= 140 && width <= 210) { + dto.setKindValue("5"); + } else if (length <= 260 && width <= 185 || length <= 185 && width <= 260) { + dto.setKindValue("6"); + } else if (length <= 285 && width <= 210 || length <= 210 && width <= 285) { + dto.setKindValue("7"); + } else if (length <= 370 && width <= 260 || length <= 260 && width <= 370) { + dto.setKindValue("8"); + } else if (length <= 420 && width <= 285 || length <= 285 && width <= 420) { + dto.setKindValue("9"); + } + } else if ("稿纸/便签本/票本(每本100张)".equals(dto.getNotePaperKind())) { + if ((length <= 130 && width <= 90) || length <= 90 && width <= 130) { + dto.setKindValue("10"); + } else if (length <= 140 && width <= 100 || length <= 100 && width <= 140) { + dto.setKindValue("11"); + } else if (length <= 185 && width <= 130 || length <= 130 && width <= 185) { + dto.setKindValue("12"); + } else if (length <= 210 && width <= 140 || length <= 140 && width <= 210) { + dto.setKindValue("13"); + } else if (length <= 260 && width <= 185 || length <= 185 && width <= 260) { + dto.setKindValue("14"); + } else if (length <= 285 && width <= 210 || length <= 210 && width <= 285) { + dto.setKindValue("15"); + } + } else if ("彩胶纸".equals(dto.getNotePaperKind())) { + dto.setKindValue("16"); + if ("单面".equals(dto.getCraftMo())) { + dto.setKind2Value("6"); + } else { + dto.setKind2Value("7"); + } + priceList = productMapper.getThanPrice(dto); + } else { + dto.setKindValue("17"); + priceList = productMapper.getThanPrice(dto); + } + if ("联单".equals(dto.getNotePaperKind()) || "稿纸/便签本/票本(每本100张)".equals(dto.getNotePaperKind())) { + if (count <= 1000) + priceList = productMapper.getThanPrice(dto); + else + priceList = productMapper.notePaperPrice(dto); + // 数据库中是单价(成本价),需要*数量*利润 + if ("联单".equals(dto.getNotePaperKind())) { + for (Product product : priceList) { + if (product.getCount() == 20) { + product.setPrice(Math.ceil(product.getPrice() * product.getCount() * 2.8)); + } else { + product.setPrice(Math.ceil(product.getPrice() * product.getCount() * 2.5)); + } + } + } else { + if ("10".equals(dto.getKindValue()) || "11".equals(dto.getKindValue())) { + for (Product product : priceList) { + if (product.getCount() == 10 || product.getCount() == 100 || product.getCount() == 200) { + product.setPrice(Math.ceil(product.getPrice() * product.getCount() * 2.5)); + } else if (product.getCount() == 20) { + product.setPrice(Math.ceil(product.getPrice() * product.getCount() * 2.8)); + } else if (product.getCount() == 30) { + product.setPrice(Math.ceil(product.getPrice() * product.getCount() * 3)); + } else if (product.getCount() == 50) { + product.setPrice(Math.ceil(product.getPrice() * product.getCount() * 2.6)); + } else if (product.getCount() == 500 || product.getCount() == 1000) { + product.setPrice(Math.ceil(product.getPrice() * product.getCount() * 2)); + } else { + product.setPrice(Math.ceil(product.getPrice() * product.getCount() * 1.8)); + } + } + } else if ("12".equals(dto.getKindValue()) || "13".equals(dto.getKindValue())) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * product.getCount() * 2.5)); + } + } else if ("14".equals(dto.getKindValue()) || "15".equals(dto.getKindValue())) { + for (Product product : priceList) { + if (product.getCount() == 10) { + product.setPrice(Math.ceil(product.getPrice() * product.getCount() * 2.3)); + } else if (product.getCount() == 20) { + product.setPrice(Math.ceil(product.getPrice() * product.getCount() * 2.1)); + } else if (product.getCount() == 30 || product.getCount() == 50 || product.getCount() == 100) { + product.setPrice(Math.ceil(product.getPrice() * product.getCount() * 2)); + } else if (product.getCount() == 200 || product.getCount() == 500 || product.getCount() == 1000) { + product.setPrice(Math.ceil(product.getPrice() * product.getCount() * 1.8)); + } else { + product.setPrice(Math.ceil(product.getPrice() * product.getCount() * 1.8)); + } + } + } + + } + // 加上重量(二联单每本100份(50份),三联单每本90份(30份),四联单每本100页(25份)) + // 三联单 + if ("1".equals(kind2)) { + for (Product product : priceList) { + product.setWeight(df.format(number * length / 1000 * width / 1000 * product.getCount() * 1.08 * 0.05 * 90)); + } + } else { + for (Product product : priceList) { + product.setWeight(df.format(number * length / 1000 * width / 1000 * product.getCount() * 1.08 * 0.05 * 100)); + } + } + } else { + if (count <= 10000) + priceList = productMapper.getThanPrice(dto); + else + priceList = productMapper.thanThousandPrice(dto); + // 数据库中是(成本价),需要*利润 + for (Product product : priceList) { + if (product.getCount() <= 1000) { + product.setPrice(Math.ceil(product.getPrice() * 2.5)); + } else { + product.setPrice(Math.ceil(product.getPrice() * 2)); + } + } + // 加上重量 + if ("红头文件".equals(dto.getNotePaperKind())) { + for (Product product : priceList) { + product.setWeight(df.format(number * length / 1000 * width / 1000 * product.getCount() * 0.08)); + } + } else { + // 彩胶纸 + for (Product product : priceList) { + product.setWeight(df.format(number * length / 1000 * width / 1000 * product.getCount() * 0.07)); + } + } + } + + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + // 联单,且选择了【垫板】工艺 + // 21*14cm内,+5毛钱一本,超过+8毛一本 + if ("联单".equals(dto.getNotePaperKind()) && !StringUtils.isEmpty(dto.getCraft())) { + craft = dto.getCraft(); + for (int i = 0; i < craft.length; i++) { + if ("垫板".equals(craft[i])) { + if (length <= 210 && width <= 140 || length <= 140 && width <= 210) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + product.getCount() * 0.5)); + } + } else { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + product.getCount() * 0.8)); + } + } + } else if ("封皮".equals(craft[i])) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + product.getCount() * 0.5)); + } + } else if ("彩色".equals(craft[i])) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * 1.8)); + } + } + } + } else if ("稿纸/便签本/票本(每本100张)".equals(dto.getNotePaperKind()) && !StringUtils.isEmpty(dto.getCraft())) { + craft = dto.getCraft(); + for (int i = 0; i < craft.length; i++) { + if ("封皮".equals(craft[i]) || "垫板".equals(craft[i])) { + for (Product product : priceList) { + int bs = 1; + if (product.getCount() > 100) { + if (product.getCount() % 100 > 0) { + bs = product.getCount() / 100 + 1; + } else { + bs = product.getCount() / 100; + } + } + product.setPrice(Math.ceil(product.getPrice() + bs * 20)); + } + } + } + } + // 产品价格倍数 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * product.getPriceMultiple())); + } + + // 根据款数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + return priceList; + // 海报(款数*个数=个数) + case "17": + // 贡缎布 + if ("7".equals(kind)) { + priceList = PriceUtils.satinClothPrice(kind2, length, width, count, number); + if (dto.getYaheng() != null && dto.getYaheng() > 0) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + dto.getYaheng() * 15)); + } + } + for (Product product : priceList) { + product.setWeight(df.format(0.165 * length * width * product.getCount() / 10000 * number)); + } + return priceList; + } else if ("6".equals(kind)) {// 条幅craftTiao + + priceList = PriceUtils.bannerPrice(kind2, length, width, count, number, role); + /* + * if(length == 300 && width == 50) { }else if(width <= 80){ for(Product product:priceList) { product.setPrice(Math.ceil(product.getPrice() * 1.15 * 0.8)); } }else { for(Product product:priceList) { product.setPrice(Math.ceil(product.getPrice())); } } + */ + + if ("双喷".equals(dto.getCraftTiao())) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * 1.5)); + } + } + if (dto.getZheye() != null && dto.getZheye() > 0) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + dto.getZheye() * 15)); + } + } + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * number)); + product.setWeight(df.format(0.065 * length * width * product.getCount() / 10000 * number)); + double other_price = 0; + if (width * length <= 50 * 50) { + other_price = (count) * 5 * number + number * 5; + product.setPrice(Math.ceil(45 + other_price)); + } + + } + if ((width == 50 && length == 300 || width == 300 && length == 50) && count > 1 && number == 1 && role.indexOf("1045") == -1) { + for (Product product : priceList) { + product.setPrice(product.getPrice() - 10); + } + } + + return priceList; + } else if ("5".equals(kind)) {// 刻字 + Product pro = new Product(); + pro.setCount(count); + pro.setPrice(Math.ceil(length * count * 0.32 > 40 ? length * count * 0.32 : 40)); + priceList.add(pro); + + // 根据款数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + // 7.27 海报、合版封套 *1.15 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * 1.15)); + } + return priceList; + } else if ("11".equals(kind)) { + + } else { + // 单位‘米’计算价格 + if (!"4".equals(kind)) { + area = 0.0; + length = length / 100; + width = width / 100; + area = Double.valueOf(df.format(length * width * count)); + } + // 裱板 + if ("0".equals(kind)) { + priceList = new PosterPrice().acountPrice00(kind2, area, count, number); + } else if ("1".equals(kind)) {// 室内写真 + priceList = new PosterPrice().acountPrice01(kind2, area, count, number); + } else if ("2".equals(kind)) {// 户外写真 + if ("24".equals(kind2)) { + double base_price = 0; + double price = 0.00; + length = length * 100; + width = width * 100; + if (dto.getSize().contains(",")) {//套餐 + if ("100*30,100*45".equals(dto.getSize())) { + base_price = 200; + } + if ("120*30,120*65".equals(dto.getSize())) { + base_price = 230; + } + if ("150*30,150*65".equals(dto.getSize())) { + base_price = 270; + } + if ("180*30,180*65".equals(dto.getSize())) { + base_price = 300; + } + } else { + if ((width == 100 && length == 30) || (length == 100 && width == 30)) {//推荐尺寸 + base_price = 100; + } + if ((width == 100 && length == 45) || (length == 100 && width == 45)) { + base_price = 120; + } + if ((width == 120 && length == 30) || (length == 120 && width == 30)) { + base_price = 120; + } + if ((width == 120 && length == 65) || (length == 120 && width == 65)) { + base_price = 130; + } + if ((width == 150 && length == 30) || (length == 150 && width == 30)) { + base_price = 140; + } + if ((width == 150 && length == 65) || (length == 150 && width == 65)) { + base_price = 150; + } + if ((width == 180 && length == 30) || (length == 180 && width == 30)) { + base_price = 140; + } + if ((width == 180 && length == 65) || (length == 180 && width == 65)) { + base_price = 180; + } + } + price = base_price * dto.getCount(); + if (base_price == 0) { + area = 0.0; + area = width * length * dto.getCount() * 0.0001; + if (area <= 0.5) { + price = area * 334; + } + if (area > 0.5 && area <= 0.6) { + price = area * 280; + } + if (area > 0.6 && area <= 0.7) { + price = area * 250; + } + if (area > 0.7 && area <= 0.8) { + price = area * 220; + } + if (area > 0.8 && area <= 0.9) { + price = area * 200; + } + if (area > 0.9) { + price = area * 180; + } + price = Math.max(100, price); + } + + Product pro = new Product(); + pro.setCount(dto.getCount()); + pro.setPrice(Math.ceil(price * number)); + priceList.add(pro); + + } else { + + priceList = new PosterPrice().acountPrice02(kind2, area, count, number); + } + } else if ("3".equals(kind)) {// 布 + if (kind2.equals("11") || kind2.equals("12") || kind2.equals("13")) { + priceList = new PriceUtils().getDbPrice(kind2, width, length, count, priceList); + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * number)); + } + } else if (kind2.equals("10")) { + length *= 100; + width *= 100; + if (width > 160) { + width = 160.0; + } + priceList = new PosterPrice().acountPrice03(kind2, length, width, area, count, number, dto.getCraftBu()); + /* + * if(length == 300 && width == 50) { }else if(width <= 80){ for(Product product:priceList) { product.setPrice(Math.ceil(product.getPrice() * 1.15 * 0.8)); } }else { for(Product product:priceList) { product.setPrice(Math.ceil(product.getPrice())); } } + */ + if (dto.getZheye() != null && dto.getZheye() > 0) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + dto.getZheye() * 15)); + } + } + for (Product product : priceList) { + product.setWeight(df.format(0.075 * length * width * product.getCount() / 10000 * number)); + } + } else { + priceList = new PosterPrice().acountPrice03(kind2, length, width, area, count, number, dto.getCraftBu()); + } + + // 7.27 海报、合版封套 *1.15 + // 除550灯布/双喷布 + if (!"1".equals(kind2) && !"7".equals(kind2) && !"11".equals(kind2) && !"12".equals(kind2) && !"10".equals(kind2) && !"6".equals(kind2) && !"13".equals(kind2)) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * 1.15)); + } + } + } else {// 展架 + priceList = new PosterPrice().acountPrice04(kind2, count, number); + wei = 0.00; + //美式 + if ("0".equals(kind2) || "1".equals(kind2) || "2".equals(kind2) || "3".equals(kind2) || "8".equals(kind2) || "9".equals(kind2)) { + wei = 2; + } + //门 + if ("4".equals(kind2) || "6".equals(kind2) || "7".equals(kind2) || "10".equals(kind2) || "11".equals(kind2)) { + wei = 2.5; + } + //易拉宝 + if ("12".equals(kind2) || "13".equals(kind2)) { + wei = 2; + } + for (Product product : priceList) { + product.setWeight(df.format(wei * product.getCount() * number)); + } + } + } + return priceList; + // 扇子 + case "18": + if (dto.getKindValue().equals("5")) { + dto.setKindValue("0"); + if (count <= 10000) + priceList = productMapper.getThanPrice(dto); + else + priceList = productMapper.thanThousandPrice(dto); + + dto.setKindValue("5"); + } else if (!dto.getKindValue().equals("4")) { + if (count <= 10000) + priceList = productMapper.getThanPrice(dto); + else + priceList = productMapper.thanThousandPrice(dto); + } else { + String[] list = dto.getCraft(); + if (list == null) { + dto.setKind1Value("1"); + } else { + dto.setKind1Value("2"); + } + + if (count <= 10000) + priceList = productMapper.getThanPrice(dto); + else + priceList = productMapper.notePaperPrice(dto); + } + + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + + // 产品价格倍数 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * product.getPriceMultiple())); + } + + // 异形工艺 + getCraft(dto, priceList, null, null, 0); + + if (dto.getKindValue().equals("5")) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + 0.1 * product.getCount())); + } + } + + // 根据款数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + // 根据款数重新算重量(重量在数据库中) + if (!StringUtils.isEmpty(priceList.get(0).getWeight())) { + for (Product product : priceList) { + product.setWeight(df.format(Double.valueOf(product.getWeight()) * number)); + } + } + return priceList; + // 画册 + case "19": + // 内页P数加上封面的4P + dto.setPcount(dto.getPcount() + 4); + if ("少数量".equals(dto.getKind())) { + priceList = new PictureAlbumPrice().getLessPrice(count, dto.getPcount()); + } else { + length = length * 10; + width = width * 10; + if (length <= 210 && width <= 140 || length <= 140 && width <= 210) { + if ("0".equals(kind2)) { + priceList = new PictureAlbumPrice().getPrice00(count, dto.getPcount()); + } else if ("1".equals(kind2)) { + priceList = new PictureAlbumPrice().getPrice01(count, dto.getPcount()); + } else { + priceList = new PictureAlbumPrice().getPrice02(count, dto.getPcount()); + } + } else if (length <= 285 && width <= 210 || length <= 210 && width <= 285) { + if ("0".equals(kind2)) { + priceList = new PictureAlbumPrice().getPrice10(count, dto.getPcount()); + } else if ("1".equals(kind2)) { + priceList = new PictureAlbumPrice().getPrice11(count, dto.getPcount()); + } else { + priceList = new PictureAlbumPrice().getPrice12(count, dto.getPcount()); + } + } + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + // 添加设计费.40元/P(封面4P也算设计费) + for (Product product : priceList) { + product.setPrice(product.getPrice() + dto.getPcount() * 40); + } + } + // 根据款数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + + String[] craftList = dto.getCraft(); + if (craftList != null) { + if ("设计".equals(craftList[0])) { + // 设计费 = 20*p数 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() + dto.getPcount() * 20 * number)); + } + } + } + + return priceList; + // 包装盒 + case "20": + // 厘米转成毫米 + length = length * 10; + width = width * 10; + height = height * 10; + // 价格 + double priceArr[] = {20, 15, 13, 10, 9, 9}; + // 数量 + int countArr[] = {500, 1000, 2000, 3000, 5000, 10000}; + // 双插盒 + if ("0".equals(kind)) { + // 长=(长+宽)*2+20 + length = (length + width) * 2 + 20; + // 宽=(高+宽+宽+40) + width = height + width + width + 40; + + // 双插盒展开超过650*500MM的另行报价 + if (length >= 650 || width >= 500) { + return null; + } + } else {// 飞机盒 + // 长=(长+高*2*2)+10MM + length = (length + height * 2 * 2) + 10; + // 宽=(宽+高)*2+高+5MM) + width = (width + height) * 2 + height + 5; + + // 飞机盒展开超过900*600MM的另行报价 + if (length >= 900 || width >= 600) { + return null; + } + } + // 计算价格把毫米转成米 + length = length / 1000; + width = width / 1000; + Product pro = new Product(); + if (count > countArr[countArr.length - 1]) { + pro.setCount(count); + pro.setPrice(Math.ceil(length * width * count * priceArr[countArr.length - 1] > 1100 ? length * width * count * priceArr[countArr.length - 1] : 1100)); + priceList.add(pro); + } else { + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(Math.ceil(length * width * countArr[i] * priceArr[i] > 1100 ? length * width * countArr[i] * priceArr[i] : 1100)); + priceList.add(pro); + } + } + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + // 根据款数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + return priceList; + // 透明PVC名片 + case "21": + if (count <= 10000) + priceList = productMapper.getThanPrice(dto); + else + priceList = productMapper.thanThousandPrice(dto); + + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + // 产品价格倍数 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * product.getPriceMultiple())); + } + // 根据款数重新算价格 + for (Product product : priceList) { + product.setWeight(df.format(0.38 * 0.0855 * 1.3 * 0.054 * product.getCount() * number)); + product.setPrice(Math.floor(product.getPrice() * number)); + } + return priceList; + // 桌贴 + case "22": + /* + * if ("0".equals(kind) || "10".equals(kind)) { priceList = new PriceUtils().getDeskSticker(priceList, width, length, count, number, dto.getCraftShua(), dto.getCraftJiao()); } else if ("1".equals(kind)) { // 产品的面积(平方米) area = length * width / 10000 * count; double price = 0.0; if (area <= 0.05) { price = 5000; } else if (area <= 0.1) { price = 1200; } else if (area <= 0.5) { price = 1000; } else if (area <= 0.8) { price = 800; } else if (area <= 1) { price = 600; } else if (area <= + * 1.5) { price = 400; } else { price = 300; } pro = new Product(); pro.setCount(count); pro.setPrice(Math.ceil(area * price > 100 ? area * price : 100)); priceList.add(pro); // 根据款数重新算价格 for (Product product : priceList) { product.setPrice(Math.floor(product.getPrice() * number)); } } + */ + /* + * if (priceList.size() >= 4) { priceList = priceList.subList(0, 4); } + */ + String[] ztCraft = {"背胶"}; + priceList = ZsPrice.getSmPrice(count, length, width, priceList, number, ztCraft, dto); + for (Product product : priceList) { + if (dto.getKindValue().equals("0") || dto.getKindValue().equals("10")) { + wei = 0.38; + } else { + wei = 0.84; + } + product.setWeight(df.format(wei * length * width * product.getCount() / 10000 * 1.3 * number)); + } + return priceList; + // 0.38PVC亮光异型卡片 + case "PVC异型卡片": + // 印刷价格 + area = length * width / 10000; + priceList = new CardPrice().getPrice(count, area, dto.getKindValue()); + // 根据款数重新算价格 + if (dto.getKindValue().equals("3")) {// 0.76价格翻倍 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * 1.8)); + } + } + + if ((length == 8 && width == 4) || (length == 4 && width == 8)) { + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * 1.2)); + } + } + List craft_list = Arrays.asList(dto.getCraft()); + for (Product product : priceList) { + double base = 1; + if (craft_list.contains("异形")) { + base = 1.5; + } + if (dto.getKindValue().equals("3")) { + wei = 0.76; + } else { + wei = 0.38; + } + product.setPrice(Math.floor(product.getPrice() * number * base)); + + product.setWeight(df.format(wei * length * width * 1.3 * product.getCount() / 10000 * number)); + } + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + // 打印价格 + /* + * List priceList2 = new PriceUtils().getDeskSticker(new ArrayList(), width, length, count, number, dto.getCraftShua(), dto.getCraftJiao()); System.out.println(priceList.get(0).getPrice()); + */ + /* System.out.println(priceList2.get(0).getPrice()); */ + // 比较哪个便宜 + /* + * if (priceList.get(0).getPrice() > priceList2.get(0).getPrice()) { // Double minPrice = Math.min(priceList.get(0).getPrice(), // priceList2.get(0).getPrice()); priceList = new ArrayList(); Product product = new Product(); product.setCount(count); product.setPrice(priceList2.get(0).getPrice()); priceList.add(product); } + */ + return priceList; + // 滴塑 + case "23": + return priceList = PriceUtils.getDisuPrice(priceList, width, length, count, number, dto); + // 透明PVC名片---会员卡 + case "24": + if (count <= 10000) { + priceList = productMapper.getThanPrice(dto); + } else { + priceList = productMapper.thanThousandPrice(dto); + } + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + // 产品价格倍数 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * product.getPriceMultiple())); + } + getCraft(dto, priceList, null, null, 0); + + // 根据款数重新算价格 + for (Product product : priceList) { + product.setWeight(df.format(0.76 * 1.3 * 0.0855 * 0.054 * product.getCount() * number)); + product.setPrice(Math.floor(product.getPrice() * number)); + } + return priceList; + // 卡片-门挂牌 + case "25": + priceList = productMapper.getThanPrice(dto); + + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + // 产品价格倍数 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * product.getPriceMultiple())); + } + craft = dto.getCraft(); + if (!StringUtils.isEmpty(craft)) { + for (int i = 0; i < craft.length; i++) { + // 门挂牌双面覆哑膜 ,比没覆膜价格*1.5倍 + if ("双面覆哑膜".equals(craft[i])) { + // 产品价格倍数 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * 1.5)); + } + } + } + } + + // 根据款数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + return priceList; + // 毕业证书 + case "26": + priceList = new PriceUtils().getDiploma(count); + // 根据款数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + return priceList; + // 暖心贴 + case "27": + priceList = productMapper.getThanPrice(dto); + /* + * if (priceList.size() >= 4) { priceList = priceList.subList(0, 4); } + */ + // 产品价格倍数 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * product.getPriceMultiple())); + } + // 根据款数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + return priceList; + // 彩色信纸 + case "彩色信纸": + length = length * 10; + width = width * 10; + if (length <= 140 && width <= 100 || length <= 100 && width <= 140) { + dto.setKindValue("2"); + } else if (length <= 210 && width <= 140 || length <= 140 && width <= 210) { + dto.setKindValue("1"); + } else if (length <= 285 && width <= 210 || length <= 210 && width <= 285) { + dto.setKindValue("0"); + } + priceList = productMapper.getThanPrice(dto); + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + // 产品价格倍数 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * product.getPriceMultiple())); + } + /** + * 报价10本的*2.2 20本的*1.9 50本的*1.7 100本的*1.6 200本以上*1.5 + */ + for (Product product : priceList) { + if (product.getCount() == 10) { + product.setPrice(Math.ceil(product.getPrice() * 2.1)); + } else if (product.getCount() == 20) { + product.setPrice(Math.ceil(product.getPrice() * 1.8)); + } /* + * else if (product.getCount() == 50) { product.setPrice(Math.ceil(product.getPrice())); } else if (product.getCount() == 100) { product.setPrice(Math.ceil(product.getPrice() * 1.6)); } else if (product.getCount() >= 200) { product.setPrice(Math.ceil(product.getPrice() * 1.5)); } + */ + } + + // 根据款数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + return priceList; + // 复印纸 + case "复印纸": + priceList = new PriceUtils().getCopyPaper(kind, kind2, kind3, count, size); + // 根据款数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + return priceList; + case "婚礼卡": + priceList = new PriceUtils().getWeddingCardPrice(length, width, count, number, dto.getCraftMo(), dto.getCraftShua()); + return priceList; + case "刮刮卡": + // 选了【自定义尺寸】 + if (dto.isSwitchSize()) { + + } else { + // 300克铜版纸 + dto.setKindValue("2"); + + // 不覆膜 + dto.setKind1Value("0"); + craft = dto.getCraft(); + if (!StringUtils.isEmpty(craft)) { + for (int i = 0; i < craft.length; i++) { + if ("双面覆哑膜".equals(craft[i])) { + // 覆膜 + dto.setKind1Value("1"); + craft[i] = null; + break; + } + } + } + // 产品位数 + int min = getNum(length, width); + // 根据位数算价格(最多4个位) + dto.setKind2Value(String.valueOf(min)); + if (count <= 10000) + priceList = productMapper.getThanPrice(dto); + else + priceList = productMapper.thanThousandPrice(dto); + // 产品价格倍数 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * product.getPriceMultiple())); + } + if (!StringUtils.isEmpty(craft)) { + int isYx = 0; + for (int n = 0; n < craft.length; n++) { + if ("模切".equals(craft[n])) { + isYx = 1; + } + } + if (isYx == 1) { + for (Product product : priceList) { + double moPrice = product.getCount() * 0.06 > 40 ? product.getCount() * 0.06 : 40; + product.setPrice(Math.ceil(product.getPrice() + moPrice)); + } + } else { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + product.getCount() * 0.02)); + } + } + } + // 刮刮膜价格。2分钱一张 + + } + // 加工艺的价格 --有覆膜,带尺寸过去(毫米) + // getCraft(dto, priceList, null, null, 0); + // 根据款数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + + return priceList; + case "66": + String craftTang = dto.getCraftTang().replace("双面烫银", "双面烫金"); + if (!kind.equals("500克黑卡")) { + kind = "500克带金边"; + if (craftTang.indexOf("凹凸") > -1) { + dto.setKindValue("2"); + } else { + dto.setKindValue("1"); + } + } else { + if (craftTang.indexOf("凹凸") > -1) { + dto.setKindValue("4"); + } else { + dto.setKindValue("3"); + } + } + + + if (count <= 10000) + priceList = productMapper.getThanPrice(dto); + // 加工艺的价格 --有覆膜,带尺寸过去(毫米) + /*getCraft(dto, priceList, null, null, 0);*/ + // 根据款数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + product.setWeight(df.format(0.09 * 0.054 * product.getCount() * number)); + } + return priceList; + case "餐垫纸": + priceList = new PriceUtils().getPlaceMatPrice(kind, length, width, count); + // 根据款数重新算价格 + for (Product product : priceList) { + if (kind.equals("0")) { + wei = 0.08; + } else { + wei = 0.05; + } + product.setWeight(df.format(length * width * product.getCount() / 10000 * number * wei)); + product.setPrice(Math.floor(product.getPrice() * number)); + } + return priceList; + case "节目单": + priceList = productMapper.getThanPrice(dto); + if (StringUtils.isEmpty(dto.getCraft())) { + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() - 20)); + product.setWeight(df.format(length * width * product.getCount() / 10000 * number * 0.3)); + } + } + // 根据款数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + return priceList; + case "硫酸纸吊牌": + priceList = new PriceUtils().getAcidTagsPrice(length, width, dto.getSize1(), count); + // 根据款数重新算价格 + area = length * width / 10000; + String size1 = dto.getSize1(); + double length1 = Double.valueOf(size1.substring(0, size1.indexOf("*"))); + double width1 = 0; + if (size1.indexOf(("*"), size1.indexOf("*") + 1) == -1) { + width1 = Double.valueOf(size1.substring(size1.indexOf("*") + 1)); + } else { + width1 = Double.valueOf(size1.substring(size1.indexOf("*") + 1, size1.indexOf(("*"), size1.indexOf("*") + 1))); + } + double area1 = length1 * width1 / 10000; + for (Product product : priceList) { + product.setWeight(df.format(product.getCount() * number * (0.135 * area + area1 * 0.3))); + product.setPrice(Math.floor(product.getPrice() * number)); + } + return priceList; + case "杯垫": + // 单个产品的面积 + area = length * width / 10000; + // 300克 + if ("3".equals(kind)) { + // 异形模切价格 + priceList = new PriceUtils().tagClothes300PriceCraftMo(dto, number, width, length, area, count, priceList); + if ("单面烫金".equals(dto.getCraftTang())) { + // 有2个尺寸带烫金 + if (!StringUtils.isEmpty(dto.getSize1())) { + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() + (product.getPrice() * 0.09 * 2 > 85 * 2 ? product.getPrice() * 0.09 * 2 : 85 * 2))); + } + } else { + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() + (product.getPrice() * 0.09 > 85 ? product.getPrice() * 0.09 : 85))); + } + } + } else if ("双面烫金".equals(dto.getCraftTang())) { + // 有2个尺寸带烫金 + if (!StringUtils.isEmpty(dto.getSize1())) { + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() + (product.getPrice() * 0.09 * 2 * 2 > 170 * 2 ? product.getPrice() * 0.09 * 2 * 2 : 170 * 2))); + } + } else { + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() + (product.getPrice() * 0.09 * 2 > 170 ? product.getPrice() * 0.09 * 2 : 170))); + } + } + } + } else if ("6".equals(kind)) { + priceList = new PriceUtils().tags600Price(dto, kind, kind2, area, count); + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * 1.3)); + } + } else { + priceList = new PriceUtils().tags600Price(dto, kind, kind2, area, count); + // 服装吊牌里面的900克吊牌把价格*1.3倍 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * 1.3)); + if (product.getCount() <= 2000) { + product.setPrice(Math.floor(product.getPrice() * 1.1)); + } + if (product.getCount() > 2000 && product.getCount() <= 5000) { + product.setPrice(Math.floor(product.getPrice() * 1.08)); + } + if (product.getCount() > 5000) { + product.setPrice(Math.floor(product.getPrice() * 1.06)); + } + } + } + // 根据款数重新算价格 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + if ("3".equals(kind)) { + wei = 0.3; + } else { + wei = 0.6; + } + product.setWeight(df.format(wei * area * product.getCount() * number)); + } + return priceList; + case "锦旗": + // 单价*产品数量*款数 + priceList = new PriceUtils().getJQPrice(kind3, number, width, length, count, priceList); + return priceList; + case "号码布": + // 单价*产品数量*款数 + priceList = new PriceUtils().getHmbPrice(kind3, number, width, length, count, priceList); + return priceList; + case "彩旗": + // 单价*产品数量*款数 + priceList = new PriceUtils().getCQPrice(number, width, length, count, priceList); + return priceList; + case "硫酸纸": + // 单价*产品数量*款数 + if (dto.getStickerKind().equals("常用")) { + if (dto.getKindValue().equals("2")) { +// if ((length <= 9 && width <= 5.4) || (length <= 5.4 && width <= 9)) { +// if ("直角".equals(dto.getCraft()[0])) { +// if ("彩色".equals(dto.getKind())) { +// dto.setKind1Value("2"); +// } else { +// dto.setKind1Value("1"); +// } +// } else { +// if ("彩色".equals(dto.getKind())) { +// dto.setKind1Value("4"); +// } else { +// dto.setKind1Value("3"); +// } +// } +// if ((length <= 5 && width <= 3) || (length <= 3 && width <= 5)) { +// dto.setKindValue("1"); +// } else if ((length <= 6.8 && width <= 3) || (length <= 3 && width <= 6.8)) { +// dto.setKindValue("2"); +// } else if ((length <= 8 && width <= 3) || (length <= 3 && width <= 8)) { +// dto.setKindValue("3"); +// } else if ((length <= 7 && width <= 3.5) || (length <= 3.5 && width <= 7)) { +// dto.setKindValue("4"); +// } else { +// dto.setKindValue("5"); +// } +// priceList = productMapper.getThanPrice(dto); +// } else { + priceList = new PriceUtils().get80LszPrice(dto, width, length, count, priceList); +// } + } else { + priceList = new PriceUtils().get80LszPrice(dto, width, length, count, priceList); + } + // 款数计算 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + } else {// 打印的价格和pvc不干胶打印价格一样--23.8.17更新后取消这个 + priceList = lessSticker(dto, proType, number, width, length, count, priceList); + return priceList; + } + // 重量 + for (Product product : priceList) { + if (dto.getKindValue().equals("1")) { + wei = 0.08; + } else { + wei = 0.135; + } + product.setWeight(df.format(number * length * width * product.getCount() / 10000 * wei)); + } + return priceList; + case "亚克力": + priceList = new PriceUtils().getYklPrice(dto, number, width, length, count, priceList); + for (Product product : priceList) { + if ((dto.getKind2Value().equals("4") || dto.getKind2Value().equals("5"))) { + if (dto.getCraftShua().equals("双面印刷")) { + product.setPrice(Math.floor(product.getPrice() * 1.8 * number)); + } else { + product.setPrice(Math.floor(product.getPrice() * number)); + } + } else { + product.setPrice(Math.floor(product.getPrice() * number)); + } + } + return priceList; + case "帆布": + priceList = new PriceUtils().getFbPrice(dto, number, width, length, count, priceList); + for (Product product : priceList) { + if (product.getCount() != null && number != null) { + product.setWeight(df.format(0.28 * width * length * product.getCount() / 10000 * number)); + } + } + return priceList; + case "29"://慕斯垫 + priceList = productMapper.getMsdPrice(dto); + + if (priceList.size() >= 4) { + priceList = priceList.subList(0, 4); + } + + if ("烫金带凹凸".equals(dto.getCraftTang())) { + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * 2)); + } + } + + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + + if (kind.equals("0") || kind.equals("4") || kind.equals("5")) { + area = (double) (9 * 9); + } else if (kind.equals("1")) { + area = (double) (9.5 * 9.5); + } else { + area = (double) (12 * 8); + } + + for (Product product : priceList) { + product.setWeight(df.format(0.8 * area * product.getCount() / 10000 * number)); + } + + return priceList; + case "串旗": + priceList = new PriceUtils().getCqPrice(width, length, count, number, priceList); + if (dto.getCraft() != null) { + int type = 0; + for (int index = 0; index < dto.getCraft().length; index++) { + if ("木棍".equals(dto.getCraft()[index])) { + type = 1; + } + } + if (type == 1) {// 木棍多收3块 + for (Product p : priceList) { + p.setPrice(p.getPrice() + 3 * number * count); + } + } + } + return priceList; + case "桌布": + width = width / 100; + length = length / 100; + priceList = new PriceUtils().getTableClothPrice(length, width, count, number, priceList); + return priceList; + case "仿古旗": + area = length * width * count / 10000; + priceList = new FgqPrice().getPrice(count, area, priceList, dto.getCraft(), dto.getKindValue(), number); + for (Product product : priceList) { + if (dto.getCraft()[0].equals("单面")) { + product.setPrice(product.getPrice() > 40 ? product.getPrice() : 40); + } else { + product.setPrice(product.getPrice() > 45 ? product.getPrice() : 45); + } + product.setPrice(Math.floor(product.getPrice() * number)); + } + return priceList; + case "手拉旗": + /* + * if(kind.equals("1")) { if(length == 70 && width == 24) { priceList = new FgqPrice().getSlqSpeicPrice(count, priceList, 1); }else if(length == 50 && width == 17) { priceList = new FgqPrice().getSlqSpeicPrice(count, priceList, 2); }else { priceList = new FgqPrice().getSlqPrice(count, priceList); } }else { + */ + priceList = new FgqPrice().getSlqPrice(count, priceList); + /* } */ + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + + product.setWeight(df.format(length * width * product.getCount() / 10000 * number * 0.075)); + } + return priceList; + case "筷子套": + priceList = new KztPrice().getPrice(count, length, priceList); + for (Product product : priceList) { + product.setWeight(df.format(length * 3 * number * 0.157)); + product.setPrice(Math.floor(product.getPrice() * number)); + } + return priceList; + case "一次性纸杯": + priceList = new PaperCupPrice().getPrice(count, priceList); + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + product.setWeight(df.format(6 * product.getCount() / 1000 * number)); + } + return priceList; + case "PVC证件": + // 价格按照大纸裁 + priceList = new ZsPrice().getPrice(count, length, width, priceList, number, dto.getCraftSheng()); + for (Product product : priceList) { + if (dto.getKindValue().equals("1") || dto.getKindValue().equals("2") || dto.getKindValue().equals("3")) { + wei = 0.84; + } else { + wei = 1; + } + length = length / 10; + width = width / 10; + product.setWeight(df.format(wei * length * width * product.getCount() / 10000 * number * 1.3)); + } + return priceList; + case "数码PVC": + // 价格按照大纸裁 + priceList = ZsPrice.getSmPrice(count, length, width, priceList, number, dto.getCraft(), dto); + for (Product product : priceList) { + if (dto.getKindValue().equals("1") || dto.getKindValue().equals("2") || dto.getKindValue().equals("3")) { + wei = 0.38; + } else if (dto.getKindValue().equals("1") || dto.getKindValue().equals("2") || dto.getKindValue().equals("3")) { + wei = 0.84; + } else { + wei = 1; + } + product.setWeight(df.format(wei * length * width * product.getCount() / 10000 * number * 1.3)); + } + return priceList; + case "班旗": + priceList = new BqPrice().getPrice(count, length, priceList, number, dto.getCraftShua(), dto.getCraft()); + List craLists = !StringUtils.isEmpty(dto.getCraft()) ? Arrays.asList(dto.getCraft()) : new ArrayList<>(); + wei = 0.0; + if (craLists.contains("旗杆")) { + wei = 1; + } + for (Product product : priceList) { + if (craLists.contains("手绘")) { + product.setPrice(150.00 * number); + } + product.setWeight(df.format(0.075 * length * width * product.getCount() / 10000 * number + product.getCount() * wei)); + } + return priceList; + case "卡贴": + int min = getNum(length, width); + dto.setProTypeValue("4"); + priceList = getHekaPrice(min, dto, priceList, count); + for (Product product : priceList) { + double dNum = 1; + if (product.getCount() / 1000 > 1) { + dNum = Math.floor(product.getCount() / 1000); + } + product.setPrice(Math.ceil(product.getPrice() + dNum * 3)); + } + //工艺计算 + if (!StringUtils.isEmpty(dto.getCraft())) { + List craList = Arrays.asList(dto.getCraft()); + if (craList.contains("双面覆哑膜")) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() * 1.3)); + } + } + + if (craList.contains("模切")) { + if (min < 3) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + 25 + 0.04 * product.getCount())); + } + } else if (min < 16) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + 50 + 0.04 * product.getCount())); + } + } else { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + 30 + 50 + 0.04 * product.getCount())); + } + } + } + } + + // 根据款数重新算价格/计算重量 + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + product.setWeight(df.format(number * length / 100 * width / 100 * product.getCount() * 0.3 * 0.86)); + } + return priceList; + case "会员卡卡套": + priceList = new FerruleUtil().getPrice(length, count, priceList); + if (number > 1) { + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + } + return priceList; + case "手提杯托": + area = length * width / 10000; + if ("250克白卡纸".equals(dto.getKind())) { + priceList = CupHolderUtil.getPrice(area, count, priceList); + for (Product product : priceList) { + product.setWeight(df.format(number * length / 100 * width / 100 * product.getCount() * 0.25)); + } + + } else { + priceList = CupHolderUtil.getPvcPrice(size, dto.getKind(), count, priceList); + for (Product product : priceList) { + product.setWeight(df.format(0.38 * 0.0855 * 1.3 * 0.054 * product.getCount() * number)); + } + } + if (number > 1) { + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + } + + return priceList; + case "天幕": + area = length * width / 10000; + if (dto.getCraftShua().contains("空白") && dto.getCraftQie() != null && dto.getCraftQie().contains("模切")) { + dto.setCraftShua("定制"); + } + priceList = CanopyUtil.getPrice(area, count, priceList, dto.getKindValue(), dto.getCraftShua()); + if (number > 1) { + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + } + if (dto.getShuliang() != null) { + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() + dto.getShuliang() * 50)); + product.setWeight(String.valueOf(Double.parseDouble(product.getWeight()) + dto.getShuliang() * 3.3)); + } + } + + return priceList; + case "挂布": + area = length * width / 10000; + + priceList = AngClothUtil.getPrice(area, count, priceList, dto.getCraft()); + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * number)); + double other_price = 0; + if (area <= 0.25) { + other_price = (count) * 5 * number; + product.setPrice(Math.floor(45 + other_price)); + } + product.setWeight(df.format(area * product.getCount() * number * 0.06)); + } + + return priceList; + case "定制衫": + double basePrice = 0; + double banfei = 0; + if ("YP".equals(dto.getKindValue())) { + basePrice = 19; + } + if ("XW".equals(dto.getKindValue())) { + basePrice = 31; + } + if ("EP".equals(dto.getKindValue())) { + basePrice = 31; + } + if ("ZT".equals(dto.getKindValue())) { + basePrice = 57; + } + if (!StringUtils.isEmpty(dto.getSize())) { + String[] size_list = dto.getSize().split(","); + for (int i = 0; i < size_list.length; i++) { + double sizePirce = 0; + if ("10*10".equals(size_list[i])) { + sizePirce = 4; + } + if ("15*15".equals(size_list[i])) { + sizePirce = 6; + } + if ("15*20".equals(size_list[i])) { + sizePirce = 8; + } + if ("20*20".equals(size_list[i])) { + sizePirce = 10; + } + if ("25*15".equals(size_list[i])) { + sizePirce = 10; + } + if ("25*25".equals(size_list[i])) { + sizePirce = 12; + } + if ("30*30".equals(size_list[i])) { + sizePirce = 14; + } + if ("30*40".equals(size_list[i])) { + sizePirce = 16; + } + + basePrice += sizePirce; + } + + } + if (dto.getPo_number() != null && dto.getCo_number() != null) { + if (dto.getPo_number() > 0 || dto.getCo_number() > 0) { + basePrice += dto.getPo_number() * 4 * dto.getCo_number(); + banfei = dto.getPo_number() * 40 * dto.getCo_number(); + } + } + count = dto.getCount(); + + pro = new Product(); + pro.setCount(count); + pro.setPrice(Math.max(basePrice * count * number, 30) + banfei); + priceList.add(pro); + return priceList; + case "手绘": + double price = 0; + if ("1".equals(dto.getKindValue())) { + if (number >= 1 && number <= 4) { + price = 80; + } else if (number >= 5 && number <= 10) { + price = 75; + } else if (number >= 11 && number <= 20) { + price = 70; + } else { + price = 65; + } + } else if ("2".equals(dto.getKindValue())) { + price = 70; + } else if ("3".equals(dto.getKindValue())) { + price = 200; + } else if ("4".equals(dto.getKindValue())) { + if ("1".equals(dto.getKind1Value())) { + price = 80; + } + if ("2".equals(dto.getKind1Value())) { + price = 160; + } + } else if ("5".equals(dto.getKindValue())) { + if ("1".equals(dto.getKind1Value())) { + price = 80; + } + if ("2".equals(dto.getKind1Value())) { + price = 160; + } + } else if ("6".equals(dto.getKindValue())) { + if ("1".equals(dto.getKind1Value())) { + price = 80; + } + if ("2".equals(dto.getKind1Value())) { + price = 98; + } + } else if ("7".equals(dto.getKindValue())) { + price = 150; + } else if ("8".equals(dto.getKindValue())) { + if ("1".equals(dto.getKind1Value())) { + price = 80; + } + if ("2".equals(dto.getKind1Value())) { + price = 198; + } + } else if ("9".equals(dto.getKindValue())) { + price = 150; + } + + pro = new Product(); + pro.setCount(count); + pro.setPrice(price * number); + priceList.add(pro); + return priceList; + case "奖牌": + String kindValue = dto.getKindValue(); + String name = dto.getKind1Value(); + price = 0.0; + Double zhongliang = 0.0; + + if ("水晶".equals(kindValue)) { + if ("酸洗五角星".equals(name)) { + price = Math.ceil(98 * dto.getCount()); + zhongliang = 2.9; + } + if ("炫彩刀片".equals(name)) { + price = Math.ceil(98 * dto.getCount()); + zhongliang = 2.9; + } + if ("金色刀片".equals(name)) { + price = Math.ceil(120 * dto.getCount()); + zhongliang = 2.9; + } + if ("尖角".equals(name)) { + price = Math.ceil(160 * dto.getCount()); + zhongliang = 2.3; + } + if ("斜面6角星".equals(name)) { + price = Math.ceil(90 * dto.getCount()); + zhongliang = 2.6; + } + if ("八角".equals(name)) { + price = Math.ceil(108 * dto.getCount()); + zhongliang = 3.1; + } + if ("蓝色梦想".equals(name)) { + price = Math.ceil(120 * dto.getCount()); + zhongliang = 2.9; + } + if ("蓝色三条线".equals(name)) { + price = Math.ceil(98 * dto.getCount()); + zhongliang = 2.9; + } + if ("蓝色弯弯".equals(name)) { + price = Math.ceil(98 * dto.getCount()); + zhongliang = 2.2; + } + if ("斜面5角星".equals(name)) { + price = Math.ceil(88 * dto.getCount()); + zhongliang = 2.5; + } + if ("麦穗圆型".equals(name)) { + price = Math.ceil(108 * dto.getCount()); + zhongliang = 2.9; + } + if ("酸洗凹面".equals(name)) { + price = Math.ceil(118 * dto.getCount()); + zhongliang = 2.9; + } + if ("月牙".equals(name)) { + price = Math.ceil(108 * dto.getCount()); + zhongliang = 2.9; + } + if ("大拇指".equals(name)) { + price = Math.ceil(60 * dto.getCount()); + zhongliang = 2.9; + } + if ("宝剑".equals(name)) { + price = Math.ceil(108 * dto.getCount()); + zhongliang = 2.9; + } + if ("蓝色五角星".equals(name)) { + price = Math.ceil(128 * dto.getCount()); + zhongliang = 2.9; + } + } else { + List carfts = dto.getCraft() != null ? Arrays.asList(dto.getCraft()) : new ArrayList<>(); + if ("20*25".equals(dto.getSize())) { + if (carfts.contains("直边")) { + price = Math.ceil(33 * dto.getCount()); + } else { + price = Math.ceil(39 * dto.getCount()); + } + zhongliang = 1.3; + } + if ("24*31".equals(dto.getSize())) { + if (carfts.contains("直边")) { + price = Math.ceil(36 * dto.getCount()); + } else { + price = Math.ceil(45 * dto.getCount()); + } + zhongliang = 1.6; + } + if ("25*35".equals(dto.getSize())) { + if (carfts.contains("直边")) { + price = Math.ceil(39 * dto.getCount()); + } else { + price = Math.ceil(54 * dto.getCount()); + } + zhongliang = 1.7; + } + if ("30*40".equals(dto.getSize())) { + if (carfts.contains("直边")) { + price = Math.ceil(42 * dto.getCount()); + } else { + price = Math.ceil(66 * dto.getCount()); + } + zhongliang = 2.7; + } + if ("35*50".equals(dto.getSize())) { + if (carfts.contains("直边")) { + price = Math.ceil(57 * dto.getCount()); + } else { + price = Math.ceil(75 * dto.getCount()); + } + zhongliang = 3.6; + } + if ("40*60".equals(dto.getSize())) { + if (carfts.contains("直边")) { + price = Math.ceil(75 * dto.getCount()); + } else { + price = Math.ceil(108 * dto.getCount()); + } + zhongliang = 4.8; + } + } + pro = new Product(); + pro.setCount(count); + pro.setPrice(price * number); + pro.setWeight(df.format(Math.ceil(zhongliang * dto.getCount() * number))); + priceList.add(pro); + return priceList; + default: + break; + } + return null; + } + + private List lessSticker(Product dto, String kind, Integer number, Double width, Double length, + int count, List stickersList) { + double price = 0.0; + // 一张大纸收费 + double addPrice = 0.0; + switch (kind) { + case "0":// A级铜版纸 + case "4":// 哑膜A级铜版纸 + price = 30; + addPrice = 6; + break; + case "1":// PVC + case "2":// 透明 + case "PVC覆哑膜": + case "3":// 复古牛皮纸贴纸 + case "7":// 书写纸 + case "PP合成纸": + price = 45; + addPrice = 9; + break; + case "5":// 哑金 + case "6":// 哑银 + case "亮金": + case "亮银": + price = 45; + addPrice = 10; + break; + case "银平光": + case "金平光": + case "拉丝金": + case "拉丝银": + case "珠光冰白纸": + case "美纹纸": + case "红洒金": + case "飘金超白不干胶": + case "白散金": + price = 50; + addPrice = 10; + break; + case "美纹纸散金": + price = 50; + addPrice = 10; + break; + case "易碎纸不干胶": + case "静电贴": + price = 50; + addPrice = 11; + break; + case "树纹纸": + case "刚古水纹超白": + case "布纹纸超白": + case "草香纸": + case "美纹散金纸": + price = 50; + addPrice = 5.5; + break; + case "硫酸纸": + price = 45; + addPrice = 5.5; + break; + } + stickersList.add(new PriceUtils().getA(kind, length, width, count, price, addPrice, number, dto.getCraftTang(), dto.getYinbai())); + if (dto.getN_mq_num() != null && dto.getN_mq_num() >= 1) { + double base_price = 6 + 4; + + for (Product product : stickersList) { + product.setPrice(product.getPrice() + ((dto.getN_mq_num()) * base_price)); + } + } + if (number > 1) { + double desFee = 0; + if (dto.getP() == 1) { + desFee = 0.6; + } else if (dto.getP() == 2 || dto.getP() == 3) { + desFee = 0.8; + } else if (dto.getP() == 4) { + desFee = 1.2; + } else if (dto.getP() == 5) { + desFee = 2; + } else { + desFee = 5; + } + for (Product product : stickersList) { + if ("0".equals(kind) && "纯烫金".equals(dto.getCraftTang())) { + product.setPrice(product.getPrice() * number); + } else { + product.setPrice(Math.floor(product.getPrice() + desFee * number)); + } + } + + //price = price + (number - 1) * 15;原来的设计费计算 + } + return stickersList; + } + + private List normalSticker(Product dto, String kind, Integer number, Double area, Double width, Double + length, int count, String oldKind, List stickersList) { + // 小于21cm的查询数据库-数量在500以上 + if (width < 21 && length < 21) { + dto.setCount(count); + // 9*5.4以内价格一致(查询数据库) + if ((length <= 9 && width > 5 && width <= 5.4) || (width <= 9 && length > 5 && length <= 5.4)) { + dto.setLength(Math.floor(length)); + dto.setWidth(Math.floor(width)); + } else { + // 小数向上取整 + dto.setLength(Math.ceil(length)); + dto.setWidth(Math.ceil(width)); + } + switch (kind) { + // 铜版纸不干胶 + case "0": + // 带1厘米的尺寸,都变成2 + if (1 < length && length < 2) { + length = Math.ceil(length); + } + if (1 < width && width < 2) { + width = Math.ceil(width); + } + // 小数部分,四舍五入 + length = (double) Math.round(length); + width = (double) Math.round(width); + // 尺寸小数部分四舍五入后的面积 + double roundArea = length * width / 10000; + // 一个名片位内做特价:75折,价格在前端写死 + if (length == 1 && width == 1) { + int priceArr[] = {30, 35, 50, 55, 100, 180, 270, 370, 470, 570}; + stickersList = new AStickersPrice().f_getPrice(priceArr, count, dto.getCraftMo()); + } else if ((length == 2 && width == 1) || (length == 1 && width == 2)) { + int priceArr[] = {35, 40, 55, 60, 110, 190, 280, 380, 480, 580}; + stickersList = new AStickersPrice().f_getPrice(priceArr, count, dto.getCraftMo()); + } else if ((length > 2 && length <= 5 && width == 1) || (width > 2 && width <= 5 && length == 1)) { + int priceArr[] = {35, 40, 55, 70, 120, 210, 308, 435, 555, 683}; + stickersList = new AStickersPrice().f_getPrice(priceArr, count, dto.getCraftMo()); + } else if ((length > 1 && length <= 3 && width == 2) || (width > 1 && width <= 3 && length == 2)) { + int priceArr[] = {35, 40, 55, 70, 120, 210, 308, 435, 555, 683}; + stickersList = new AStickersPrice().f_getPrice(priceArr, count, dto.getCraftMo()); + } else if ((length > 3 && length <= 5 && width == 2) || (width > 3 && width <= 5 && length == 2)) { + int priceArr[] = {35, 40, 55, 70, 120, 220, 348, 492, 642, 798}; + stickersList = new AStickersPrice().f_getPrice(priceArr, count, dto.getCraftMo()); + } else if ((length >= 3 && length <= 5 && width == 3) || (length == 3 && width <= 5 && width >= 3)) { + int priceArr[] = {35, 40, 55, 70, 120, 220, 348, 492, 642, 798}; + stickersList = new AStickersPrice().f_getPrice(priceArr, count, dto.getCraftMo()); + } else if (length == 4 && width == 4) { + int priceArr[] = {35, 40, 55, 70, 120, 220, 348, 492, 642, 798}; + stickersList = new AStickersPrice().f_getPrice(priceArr, count, dto.getCraftMo()); + } else if ((length == 5 && width == 4) || (length == 4 && width == 5)) { + int priceArr[] = {35, 40, 55, 70, 150, 240, 420, 600, 790, 980}; + stickersList = new AStickersPrice().f_getPrice(priceArr, count, dto.getCraftMo()); + } else if (((length <= 9 && width <= 5.4) || (length <= 5.4 && width <= 9))) { + stickersList = new AStickersPrice().oneCradPrice(count, dto.getRole()); + } /* + * else if ((length == 1 && width <= 20) || (width == 1 && length <= 20)) { stickersList = new AStickersPrice().getPriceLess20(count); } else if ((length == 1 && width <= 48) || (width == 1 && length <= 48)) { stickersList = new AStickersPrice().getPriceLess48(count); } else if ((length == 1 && width <= 60) || (width == 1 && length <= 60)) { stickersList = new AStickersPrice().getPriceLess60(count); } else if ((length == 1 && width <= 70) || (width == 1 && length <= 70)) { + * stickersList = new AStickersPrice().getPriceLess70(count); } else if ((length == 1 && width <= 80) || (width == 1 && length <= 80)) { stickersList = new AStickersPrice().getPriceLess80(count); } else if ((length == 1 && width <= 90) || (width == 1 && length <= 90)) { stickersList = new AStickersPrice().getPriceLess90(count); } else if ((length == 1 && width <= 100) || (width == 1 && length <= 100)) { stickersList = new AStickersPrice().getPriceLess100(count); } + */ else if (area <= 0.003) { + // 未四舍五入的面积按照固定的。 + stickersList = new AStickersPrice().getPrice(count); + } else { + stickersList = new AStickersPrice().getPrice(count, roundArea, dto.getRole()); + } + + break; + // PVC.透明不干胶 亮膜 + case "1": + case "2": + if (count <= 10000) { + // 透明和PVC的价格一致,数据库是pvc的价格,设置‘1’ + dto.setKindValue("1"); + stickersList = productMapper.getThanPrice(dto); + } else { + // 1*1,2*1 价格调整成和3*1一致 + if (area < 0.0003) { + area = 0.0003; + } + stickersList = new PVCStickersPrice().getPrice(count, area); + } + + break; + // 复古牛皮纸 + case "3": + // 10*10以内,数量小于50000个查询数据库 || 10*10 - 20*20 之间的,10000以内查询数据库 + if ((width <= 10 && length <= 10 && count <= 50000) || ((width > 10 || length > 10) && count <= 10000)) { + stickersList = productMapper.getThanPrice(dto); + } else if ((width <= 10 && length <= 10 && count > 50000) || ((width > 10 || length > 10) && count > 10000)) { + stickersList = new NiuStickersPrice().getPrice(count, area); + } + + // PP合成纸覆亮膜是牛皮纸价格的0.8倍 + if ("PP合成纸".equals(oldKind)) { + dto.setKindValue(oldKind); + for (Product product : stickersList) { + product.setPrice(Math.ceil(product.getPrice() * 0.8)); + } + + if (("覆哑膜".equals(dto.getCraftMo()))) { + for (Product product : stickersList) { +// if (product.getCount() <= 1000) { +// product.setPrice(Math.ceil(product.getPrice() + 10)); +// } else { +// product.setPrice(Math.ceil(product.getPrice() + product.getCount() * 0.01)); +// } + } + } + } + break; + // 铜版纸不干胶覆哑膜 + case "4": + // 带1厘米的尺寸,都变成2 + if (1 < length && length < 2) { + length = Math.ceil(length); + } + if (1 < width && width < 2) { + width = Math.ceil(width); + } + // 小数部分,四舍五入 + length = (double) Math.round(length); + width = (double) Math.round(width); + // 尺寸小数部分四舍五入后的面积 + roundArea = length * width / 10000; + + // 调整成A级铜版纸覆亮膜价格*1.1 + if (((length <= 9 && width <= 5.4) || (length <= 5.4 && width <= 9))) { + stickersList = productMapper.getThanPrice(dto); + } else if ((length == 1 && width <= 20) || (width == 1 && length <= 20)) { + stickersList = new AStickersPrice().getPriceLess20(count); + } else if ((length == 1 && width <= 48) || (width == 1 && length <= 48)) { + stickersList = new AStickersPrice().getPriceLess48(count); + } else if ((length == 1 && width <= 60) || (width == 1 && length <= 60)) { + stickersList = new AStickersPrice().getPriceLess60(count); + } else if ((length == 1 && width <= 70) || (width == 1 && length <= 70)) { + stickersList = new AStickersPrice().getPriceLess70(count); + } else if ((length == 1 && width <= 80) || (width == 1 && length <= 80)) { + stickersList = new AStickersPrice().getPriceLess80(count); + } else if ((length == 1 && width <= 90) || (width == 1 && length <= 90)) { + stickersList = new AStickersPrice().getPriceLess90(count); + } else if ((length == 1 && width <= 100) || (width == 1 && length <= 100)) { + stickersList = new AStickersPrice().getPriceLess100(count); + } else if (area <= 0.003) { + // 未四舍五入的面积按照固定的。 + stickersList = new AStickersPrice().getPrice(count); + } else { + stickersList = new AStickersPrice().getPrice(count, roundArea, dto.getRole()); + } + + // A级铜版纸覆亮膜价格*1.2 + for (Product product : stickersList) { + if (length == 6 && width == 6) { + product.setPrice(Math.ceil(product.getPrice() * 1.2) + 35); + } else { + product.setPrice(Math.ceil(product.getPrice() * 1.2)); + } + // 亮膜做特价,有“kindLabel”标识,哑膜把标识去掉 + product.setKindLabel(null); + } + break; + // 哑金不干胶 + case "5": + /* + * if ("印2色+凹凸".equals(dto.getAotu())) { // 6*5cm以下及10*3cm以下 int priceArr1[] = { 280, 300, 350, 460, 520, 660, 1100 }; // 6*5cm-8*8cm;10-3cm - 10*6cm以内 int priceArr2[] = { 280, 320, 450, 660, 780, 900, 1500 }; // 11*11cm内;12*8cm内;20*4cm以内 int priceArr3[] = { 340, 500, 850, 1100, 1550, 1700, 2500 }; stickersList = new YaJinStickersPrice().accountPriceBySize(width, length, count, priceArr1, priceArr2, priceArr3); } else if ("加凹凸".equals(dto.getAotu())) { // 6*5cm以下及10*3cm以下 int + * priceArr1[] = { 170, 200, 230, 310, 360, 420, 710 }; // 6*5cm-8*8cm;10-3cm - 10*6cm以内 int priceArr2[] = { 200, 240, 350, 440, 560, 670, 1000 }; // 11*11cm内;12*8cm内;20*4cm以内 int priceArr3[] = { 240, 380, 620, 800, 940, 1050, 1960 }; stickersList = new YaJinStickersPrice().accountPriceBySize(width, length, count, priceArr1, priceArr2, priceArr3); }else { + */ + // stickersList = new YaJinStickersPrice().getPriceNoAoTu(length, width, count); + dto.setKindValue("1"); + stickersList = productMapper.getThanPrice(dto); + if (("加凹凸".equals(dto.getAotu())) || ("纯烫金".equals(dto.getAotu()))) { + for (Product product : stickersList) { + product.setPrice(Math.ceil(product.getPrice() * 2.3)); + } + } else if (("印2色".equals(dto.getAotu()))) { + for (Product product : stickersList) { + product.setPrice(Math.ceil(product.getPrice() * 2.1)); + } + } /* + * else if ("印2色+凹凸".equals(dto.getAotu())){ for (Product product : stickersList) { product.setPrice(Math.ceil(product.getPrice() * 2.)); } } + */ else { + for (Product product : stickersList) { + product.setPrice(Math.ceil(product.getPrice() * 2)); + } + } + /* } */ + if (stickersList == null) + return stickersList; + break; + // 哑银不干胶-亮膜哑膜一样 + case "6": + dto.setKindValue("1"); + stickersList = productMapper.getThanPrice(dto); + if ("加凹凸".equals(dto.getAotu())) { + for (Product product : stickersList) { + product.setPrice(Math.ceil(product.getPrice() * 2.3)); + } + } + /* + * if ("印2色+凹凸".equals(dto.getAotu())) { // 6*5cm以下及10*3cm以下 int priceArr1[] = { 280, 300, 350, 460, 520, 660, 1100 }; // 6*5cm-8*8cm;10-3cm - 10*6cm以内 int priceArr2[] = { 280, 320, 450, 660, 780, 900, 1500 }; // 11*11cm内;12*8cm内;20*4cm以内 int priceArr3[] = { 340, 500, 850, 1100, 1550, 1700, 2500 }; stickersList = new YaJinStickersPrice().accountPriceBySize(width, length, count, priceArr1, priceArr2, priceArr3); } else if ("加凹凸".equals(dto.getAotu())) { // 6*5cm以下及10*3cm以下 int + * priceArr1[] = { 170, 200, 230, 310, 360, 420, 710 }; // 6*5cm-8*8cm;10-3cm - 10*6cm以内 int priceArr2[] = { 200, 240, 350, 440, 560, 670, 1000 }; // 11*11cm内;12*8cm内;20*4cm以内 int priceArr3[] = { 240, 380, 620, 800, 940, 1050, 1960 }; stickersList = new YaJinStickersPrice().accountPriceBySize(width, length, count, priceArr1, priceArr2, priceArr3); } else if ("印2色".equals(dto.getAotu())) { // 6*5cm以下及10*3cm以下 int priceArr1[] = { 140, 170, 200, 280, 380, 420, 680 }; // + * 6*5cm-8*8cm;10-3cm - 10*6cm以内 int priceArr2[] = { 160, 200, 300, 400, 600, 640, 1000 }; // 11*11cm内;12*8cm内;20*4cm以内 int priceArr3[] = { 200, 300, 480, 700, 850, 1050, 1900 }; stickersList = new YaJinStickersPrice().accountPriceBySize(width, length, count, priceArr1, priceArr2, priceArr3); } else { if(count <= 10000) { dto.setKindValue("1"); stickersList = productMapper.getThanPrice(dto); } } + */ + if (stickersList == null) + return stickersList; + break; + case "易碎纸不干胶": + if ((length == 1.0 || width == 1.0) && length * width != 1.0) { + area = 0.0001; + stickersList = new YiSBStickersPrice().getPrice(count, area); + if (width == 1.0) { + for (Product product : stickersList) { + product.setPrice(product.getPrice() + (length > 1 ? (length - 1) : 1) * 10); + } + } else { + for (Product product : stickersList) { + product.setPrice(product.getPrice() + (width > 1 ? (width - 1) : 1) * 10); + } + } + } else { + stickersList = new YiSBStickersPrice().getPrice(count, area); + } + break; + case "拉丝金": + if (length <= 5 && width <= 5) { + stickersList = new LaSiStickersPrice().acountPrice5x5(count); + } else if ((length <= 9 && width <= 5.5) || (length <= 5.5 && width <= 9)) { + stickersList = new LaSiStickersPrice().acountPrice9x5(count, area); + } else { + stickersList = new LaSiStickersPrice().acountPrice9xup(count, area); + /* + * stickersList2 = new LaSiStickersPrice().acountPrice9x5(count, area); // 对比价格,便宜的话替换 for (int i = 0; i < stickersList.size(); i++) { for (int j = 0; j < stickersList2.size(); j++) { if (stickersList.get(j).getPrice() < stickersList2.get(j).getPrice()) { stickersList.get(j).setPrice(stickersList2.get(j).getPrice() + 10); } } } + */ + } + if ("覆哑膜".equals(dto.getCraftMo())) { + for (Product product : stickersList) { + product.setPrice(Math.ceil(product.getPrice() + product.getPrice() * 1 / 10)); + } + } + break; + case "拉丝银": + if (length <= 5 && width <= 5) { + stickersList = new LaSiStickersPrice().acountPrice5x5(count); + } else if ((length <= 9 && width <= 5.4) || (length <= 5.4 && width <= 9)) { + stickersList = new LaSiStickersPrice().acountPrice9x5(count, area); + } else { + stickersList = new LaSiStickersPrice().acountPrice9xup(count, area); + /* + * stickersList2 = new LaSiStickersPrice().acountPrice9x5(count, area); // 对比价格,便宜的话替换 for (int i = 0; i < stickersList.size(); i++) { for (int j = 0; j < stickersList2.size(); j++) { if (stickersList.get(j).getPrice() < stickersList2.get(j).getPrice()) { stickersList.get(j).setPrice(stickersList2.get(j).getPrice() + 10); } } } + */ + } + if ("覆哑膜".equals(dto.getCraftMo())) { + for (Product product : stickersList) { + product.setPrice(Math.ceil(product.getPrice() + product.getPrice() * 1 / 10)); + } + } + break; + case "格底珠光膜": + if ("覆亮膜".equals(dto.getCraftMo())) { + if (length <= 5 && width <= 5) { + stickersList = new GDZGMStickersPrice().acountPrice5x5(count); + } else if ((length <= 9 && width <= 5.4) || (length <= 5.4 && width <= 9)) { + stickersList = new GDZGMStickersPrice().acountPrice9x5(count, area); + } else { + stickersList = new GDZGMStickersPrice().acountPrice9xup(count, area); + } + } else { + if ((length <= 9 && width <= 5.4) || (length <= 5.4 && width <= 9)) { + stickersList = new GDZGMStickersPrice().acountYaMoPrice9x5(count, area); + } else { + stickersList = new GDZGMStickersPrice().acountYamoPrice9xup(count, area); + } + } + break; + case "美纹纸": + stickersList = new PriceUtils().getMeiWenZhiPrice(length, width, count, number, dto.getCraftQie()); + break; + case "银平光": + /* + * stickersList = new YinPGStickersPrice().getPrice(count, area); for (Product product : stickersList) { if ((length <= 9 && width <= 5.4) || (length <= 5.4 && width <= 9)) { if (product.getCount() < 2000) { product.setPrice(Math.ceil(product.getPrice() * 1.3)); } else { product.setPrice(Math.ceil(product.getPrice() * 1.2)); } } else { product.setPrice(Math.ceil(product.getPrice() * 1.1)); } } + */ + if (count <= 10000) { + // 银平光的价格与透明不干胶价格一致 + dto.setKindValue("1"); + stickersList = productMapper.getThanPrice(dto); + /* + * for(Product product : stickersList) { if(product.getCount() < 5000) { product.setPrice(Math.ceil(product.getPrice() + 30)); } } + */ + } else { + // 1*1,2*1 价格调整成和3*1一致 + if (area < 0.0003) { + area = 0.0003; + } + stickersList = new PVCStickersPrice().getPrice(count, area); + } + for (Product product : stickersList) { + product.setPrice(Math.ceil(product.getPrice() * 1.5)); + } + break; + } + } else { + // 大于21cm的用计算-数量在500以上 + if (!"易碎纸不干胶".equals(kind) && !"0".equals(kind)) { + if (length == 1 || width == 1) { + area = 2 * area; + } + } + switch (kind) { + case "0": + // stickersList = new AStickersPrice().getPrice(count, area); + + // 带1厘米的尺寸,都变成2 + if (1 < length && length < 2) { + length = Math.ceil(length); + } + if (1 < width && width < 2) { + width = Math.ceil(width); + } + // 小数部分,四舍五入 + length = (double) Math.round(length); + width = (double) Math.round(width); + // 尺寸小数部分四舍五入后的面积 + double roundArea = length * width / 10000; + if ((length == 1 && width <= 48) || (width == 1 && length <= 48)) { + stickersList = new AStickersPrice().getPriceLess48(count); + } else if ((length == 1 && width <= 60) || (width == 1 && length <= 60)) { + stickersList = new AStickersPrice().getPriceLess60(count); + } else if ((length == 1 && width <= 70) || (width == 1 && length <= 70)) { + stickersList = new AStickersPrice().getPriceLess70(count); + } else if ((length == 1 && width <= 80) || (width == 1 && length <= 80)) { + stickersList = new AStickersPrice().getPriceLess80(count); + } else if ((length == 1 && width <= 90) || (width == 1 && length <= 90)) { + stickersList = new AStickersPrice().getPriceLess90(count); + } else if ((length == 1 && width <= 100) || (width == 1 && length <= 100)) { + stickersList = new AStickersPrice().getPriceLess100(count); + } else { + stickersList = new AStickersPrice().getPrice(count, roundArea, dto.getRole()); + } + + // 96 - 92 折 + for (Product product : stickersList) { + product.setKindLabel("铜版纸不干胶3"); + } + // 85折 + // for (Product product : stickersList) { + // product.setKindLabel("铜版纸不干胶2"); + // } + break; + case "1": + case "2": + + stickersList = new PVCStickersPrice().getPrice(count, area); + break; + case "3": + stickersList = new NiuStickersPrice().getPrice(count, area); + // PP合成纸覆亮膜是牛皮纸价格的0.8倍 + if ("PP合成纸".equals(oldKind)) { + dto.setKindValue(oldKind); + for (Product product : stickersList) { + product.setPrice(Math.ceil(product.getPrice() * 0.8)); + } + // PP合成纸覆哑膜价格比亮膜贵1分钱一张 + if (("覆哑膜".equals(dto.getCraftMo()))) { + for (Product product : stickersList) { +// if (product.getCount() <= 1000) { +// product.setPrice(Math.ceil(product.getPrice() + 10)); +// } else { +// product.setPrice(Math.ceil(product.getPrice() + product.getCount() * 0.01)); +// } + } + } + } + break; + case "4": + + // 原A级铜版纸附哑膜价格 + // stickersList = new AYaMoStickersPrice().getPrice(count, area); + // 带1厘米的尺寸,都变成2 + if (1 < length && length < 2) { + length = Math.ceil(length); + } + if (1 < width && width < 2) { + width = Math.ceil(width); + } + // 小数部分,四舍五入 + length = (double) Math.round(length); + width = (double) Math.round(width); + // 尺寸小数部分四舍五入后的面积 + roundArea = length * width / 10000; + + if ((length == 1 && width <= 48) || (width == 1 && length <= 48)) { + stickersList = new AStickersPrice().getPriceLess48(count); + } else if ((length == 1 && width <= 60) || (width == 1 && length <= 60)) { + stickersList = new AStickersPrice().getPriceLess60(count); + } else if ((length == 1 && width <= 70) || (width == 1 && length <= 70)) { + stickersList = new AStickersPrice().getPriceLess70(count); + } else if ((length == 1 && width <= 80) || (width == 1 && length <= 80)) { + stickersList = new AStickersPrice().getPriceLess80(count); + } else if ((length == 1 && width <= 90) || (width == 1 && length <= 90)) { + stickersList = new AStickersPrice().getPriceLess90(count); + } else if ((length == 1 && width <= 100) || (width == 1 && length <= 100)) { + stickersList = new AStickersPrice().getPriceLess100(count); + } else { + stickersList = new AStickersPrice().getPrice(count, roundArea, dto.getRole()); + } + // A级铜版纸覆亮膜价格*1.2 + for (Product product : stickersList) { + product.setPrice(Math.ceil(product.getPrice() * 1.2)); + // 亮膜做特价,有“kindLabel”标识,哑膜把标识去掉 + product.setKindLabel(null); + } + break; + case "PVC覆哑膜": + + stickersList = new PVCYaMoStickersPrice().getPrice(count, area); + break; + case "5": + if (StringUtils.isEmpty(dto.getAotu())) { + stickersList = new YaJinStickersPrice().getPriceNoAoTu(length, width, count); + break; + } + return stickersList; + case "6": + // 8.10 + // if (StringUtils.isEmpty(dto.getAotu())) { + // stickersList = new YaYinStickersPrice().getPrice(count, area); + // break; + // } + if (StringUtils.isEmpty(dto.getAotu())) { + // 小数部分,四舍五入 + length = (double) Math.round(length); + width = (double) Math.round(width); + // 尺寸小数部分四舍五入后的面积 + roundArea = length * width / 10000; + if ((length == 1 && width <= 48) || (width == 1 && length <= 48)) { + stickersList = new AStickersPrice().getPriceLess48(count); + } else if ((length == 1 && width <= 60) || (width == 1 && length <= 60)) { + stickersList = new AStickersPrice().getPriceLess60(count); + } else if ((length == 1 && width <= 70) || (width == 1 && length <= 70)) { + stickersList = new AStickersPrice().getPriceLess70(count); + } else if ((length == 1 && width <= 80) || (width == 1 && length <= 80)) { + stickersList = new AStickersPrice().getPriceLess80(count); + } else if ((length == 1 && width <= 90) || (width == 1 && length <= 90)) { + stickersList = new AStickersPrice().getPriceLess90(count); + } else if ((length == 1 && width <= 100) || (width == 1 && length <= 100)) { + stickersList = new AStickersPrice().getPriceLess100(count); + } else { + stickersList = new AStickersPrice().getPrice(count, roundArea, dto.getRole()); + } + + // A级铜版纸覆亮膜价格 哑银的 5000张以下(不含5千张的*2.8 ) 5千张以上*2.3 + for (Product product : stickersList) { + if (product.getCount() >= 5000) { + product.setPrice(Math.ceil(product.getPrice() * 2.3)); + } else { + product.setPrice(Math.ceil(product.getPrice() * 2.8)); + } + } + + // 少数量,算一下打印的价格和印刷的对比 + if (count < 500) { + double price = 65; + double addPrice = 12; + stickersList = new PriceUtils().getYy(kind, length, width, count, price, addPrice, number, dto.getCraftTang(), dto.getYinbai()); + } + // 如果打印的价格比印刷的价格便宜,就使用Collections工具类对list进行排序(把打印的展示在第一位),否则打印的显示在最后一位,然后 + if (stickersList.get(stickersList.size() - 1).getPrice() < stickersList.get(0).getPrice()) { + Collections.sort(stickersList, new Comparator() { + + @Override + public int compare(Product o1, Product o2) { + return o1.getCount() - o2.getCount(); + } + }); + } + break; + } + return null; + case "易碎纸不干胶": + + double l = 42.0; + double w = 38.0; + // 最大印刷面积为42*38 CM + if ((length > l || width > w) && (length > w || width > l)) + return null; + if ((length == 1.0 || width == 1.0) && length * width != 1.0) { + area = 0.0001; + stickersList = new YiSBStickersPrice().getPrice(count, area); + if (width == 1.0) { + for (Product product : stickersList) { + product.setPrice(product.getPrice() + (length > 1 ? (length - 1) : 1) * 10); + } + } else { + for (Product product : stickersList) { + product.setPrice(product.getPrice() + (width > 1 ? (width - 1) : 1) * 10); + } + } + } else { + stickersList = new YiSBStickersPrice().getPrice(count, area); + } + break; + case "拉丝金": + l = 42.0; + w = 38.0; + // 最大印刷面积为42*38 CM + if ((length > l || width > w) && (length > w || width > l)) + return null; + stickersList = new LaSiStickersPrice().acountPrice9xup(count, area); + if ("覆哑膜".equals(dto.getCraftMo())) { + for (Product product : stickersList) { + product.setPrice(Math.ceil(product.getPrice() + product.getPrice() * 1 / 10)); + } + } + break; + case "拉丝银": + l = 42.0; + w = 38.0; + // 最大印刷面积为42*38 CM + if ((length > l || width > w) && (length > w || width > l)) + return null; + stickersList = new LaSiStickersPrice().acountPrice9xup(count, area); + // 覆哑膜多1/10价格 + if ("覆哑膜".equals(dto.getCraftMo())) { + for (Product product : stickersList) { + product.setPrice(Math.ceil(product.getPrice() + product.getPrice() * 1 / 10)); + } + } + break; + case "格底珠光膜": + l = 42.0; + w = 38.0; + // 最大印刷面积为42*38 CM + if ((length > l || width > w) && (length > w || width > l)) + return null; + if ("覆亮膜".equals(dto.getCraftMo())) { + stickersList = new GDZGMStickersPrice().acountPrice9xup(count, area); + } else { + stickersList = new GDZGMStickersPrice().acountYamoPrice9xup(count, area); + } + break; + case "美纹纸": + stickersList = new PriceUtils().getMeiWenZhiPrice(length, width, count, number, dto.getCraftQie()); + break; + case "银平光": + stickersList = new YinPGStickersPrice().getPrice(count, area); + for (Product product : stickersList) { + if ((length <= 9 && width <= 5.4) || (length <= 5.4 && width <= 9)) { + if (product.getCount() < 2000) { + product.setPrice(Math.ceil(product.getPrice() * 1.3)); + } else { + product.setPrice(Math.ceil(product.getPrice() * 1.2)); + } + } else { + product.setPrice(Math.ceil(product.getPrice() * 1.1)); + } + } + break; + } + } + if (dto.getCraftPai() != null && !"".equals(dto.getCraftPai())) { + for (Product product : stickersList) { + double price = product.getPrice(); + if ("半排废".equals(dto.getCraftPai())) { + price = price + product.getCount() * 0.1; + } + if ("全排废".equals(dto.getCraftPai())) { + price = price + product.getCount() * 0.13; + } + product.setPrice(Math.max(price, 80)); + product.setKindLabel(null); + } + } + if (dto.getN_mq_num() != null && dto.getN_mq_num() > 1) { + double base_price = 15; + if (dto.getN_mq_num() >= 50 && dto.getN_mq_num() < 100) { + base_price = 14; + } + if (dto.getN_mq_num() >= 100 && dto.getN_mq_num() < 150) { + base_price = 13; + } + if (dto.getN_mq_num() >= 150 && dto.getN_mq_num() < 200) { + base_price = 12; + } + if (dto.getN_mq_num() >= 200) { + base_price = 10; + } + base_price += 4; + for (Product product : stickersList) { + double price = product.getPrice(); + product.setPrice(price + ((dto.getN_mq_num() - 1) * base_price)); + } + } + if ("彩色印刷+烫金/银".equals(dto.getCraftTang()) || "纯烫金".equals(dto.getCraftTang())) { + double[] basePrice = getStickersTanBasePrice(area * 10000); + int[] bigCountArr = {500, 1000, 2000, 3000, 5000, 10000}; + if ("彩色印刷+烫金/银".equals(dto.getCraftTang())) { + for (int i = 0; i < basePrice.length; i++) { + basePrice[i] = Math.ceil(basePrice[i] * 1.5); + } + } + for (Product product : stickersList) { + double productPrice = product.getPrice(); + double price = 0; + for (int i = 0; i < bigCountArr.length; i++) { + if (product.getCount() >= bigCountArr[i]) { + price = productPrice + basePrice[i]; + } + } + product.setPrice(Math.max(price, productPrice)); + } + } + // 彩色印刷+烫金报价方式 +// if ("彩色印刷+烫金/银".equals(dto.getCraftTang())) { +// if (width <= 15 && length <= 15) { +// for (Product product : stickersList) { +// product.setPrice((product.getPrice()) + (product.getCount() * 0.16 + 200 > 240 ? product.getCount() * 0.16 + 200 : 240)); +// } +// } else if (width > 15 || length > 15) { +// for (Product product : stickersList) { +// product.setPrice((product.getPrice()) + (product.getCount() * 0.18 + 200 > 240 ? product.getCount() * 0.18 + 200 : 240)); +// } +// } +// // 彩色印刷烫金加上烫金版价格 +// // 烫金版面积(长*宽)平方CM +// double areaTang = dto.getLengthTang() * dto.getWidthTang(); +// for (Product product : stickersList) { +// product.setPrice(product.getPrice() + (areaTang * 0.2 > 50 ? areaTang * 0.2 : 50)); +// product.setKindLabel(null); +// } +// } + + if ("印白墨".equals(dto.getYinbai())) { + stickersList = new PVCStickersPrice().acountYinbaiPrice(length, width, stickersList); + } + // 价格*款数 铜版纸放到外面执行 + if (!"0".equals(dto.getKindValue())) { + if (number > 1) { + for (Product product : stickersList) { + product.setPrice(product.getPrice() * number); + } + } + } + + + return stickersList; + } + + private double[] getStickersTanBasePrice(double area) { + + double[] priceArr = new double[6]; + if (area < 25) { + return new double[]{124, 124, 236, 250, 250, 334}; + } else if (area >= 598.5) { + return new double[]{704, 786, 1000, 1160, 1610, 2804}; + } else { + double[][] areaRanges = { + {25, 48.6}, + {48.6, 70}, + {70, 81}, + {81, 100}, + {100, 144}, + {144, 225}, + {225, 300}, + {300, 400}, + {400, 441}, + {441, 525}, + {525, 598.5} + }; + double[][] priceRanges = { + {124, 124, 236, 250, 250, 334}, + {124, 124, 236, 250, 250, 334}, + {210, 210, 210, 210, 224, 334}, + {220, 220, 220, 220, 254, 418}, + {238, 238, 238, 250, 308, 504}, + {282, 282, 282, 316, 428, 708}, + {358, 358, 394, 478, 648, 1014}, + {428, 428, 518, 630, 850, 1376}, + {520, 534, 680, 826, 1064, 1808}, + {558, 586, 746, 906, 1168, 2040}, + {636, 692, 880, 1024, 1380, 2476}, + {704, 786, 1000, 1160, 1610, 2804} + }; + + for (int i = 0; i < areaRanges.length; i++) { + if (area >= areaRanges[i][0] && area < areaRanges[i][1]) { + double rangeStart = areaRanges[i][0]; + double rangeEnd = areaRanges[i][1]; + double rangeSpan = rangeEnd - rangeStart; + for (int j = 0; j < priceArr.length; j++) { + double priceStart = priceRanges[i][j]; + double priceEnd = priceRanges[i + 1][j]; + priceArr[j] = Math.ceil(priceStart + (priceEnd - priceStart) * (area - rangeStart) / rangeSpan); + } + break; + } + } + } + return priceArr; + } + + // 加上工艺的钱 + private synchronized void getCraft(Product dto, List priceList, Double length, Double width, int min) { + if (!StringUtils.isEmpty(dto.getCraft())) { + List craftList = Arrays.asList(dto.getCraft()); + if (!("13".equals(dto.getKind()) && "4".equals(dto.getProTypeValue())) && craftList.contains("双面覆哑膜")) { + for (Product product : priceList) { + if (min > 1) { + if (product.getCount() > 2000) { + product.setPrice(Math.ceil(product.getPrice() * 1.1)); + } else { + product.setPrice(Math.ceil(product.getPrice() * 1.15)); + } + } else { + product.setPrice(Math.ceil(product.getPrice() * 1.3)); + } + } + } + if (craftList.contains("压痕")) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + (0.03 * product.getCount() > 30 ? 0.03 * product.getCount() : 30))); + } + } + if (craftList.contains("压点线")) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + 0.02 * product.getCount())); + } + } + if ("特种纸名片".equals(dto.getProTypeValue()) && craftList.contains("打点线")) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + (0.03 * product.getCount() > 30 ? 0.03 * product.getCount() : 30))); + } + } + if (craftList.contains("倒圆角")) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + (0.03 * product.getCount() > 30 ? 0.03 * product.getCount() : 30))); + } + } + if (craftList.contains("打孔")) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + (0.03 * product.getCount() > 30 ? 0.03 * product.getCount() : 30))); + } + } + if (craftList.contains("单面烫金")) { + if (min < 2) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + 50) + (0.1 * product.getCount() > 50 ? 0.1 * product.getCount() : 50)); + } + } else { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + 50) + (0.11 * product.getCount() > 50 ? 0.11 * product.getCount() : 50)); + } + } + // 彩色印刷烫金加上烫金版价格 + // 烫金版面积(长*宽)平方CM + double areaTang = dto.getLengthTang() * dto.getWidthTang(); + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + (areaTang * 0.2 > 10 ? areaTang * 0.2 : 10))); + } + } + if (craftList.contains("双面烫金")) { + if (min < 2) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice()) + (0.2 * product.getCount() > 220 ? 0.2 * product.getCount() : 220)); + } + } else { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice()) + (0.22 * product.getCount() > 220 ? 0.22 * product.getCount() : 220)); + } + } + // 彩色印刷烫金加上烫金版价格 + // 烫金版面积(长*宽)平方CM + double areaTang = dto.getLengthTang() * dto.getWidthTang(); + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + (areaTang * 0.2 > 10 ? areaTang * 0.2 : 10))); + } + } + if (craftList.contains("打码")) { + double danjia = 0.0; + // 5000张以上,一张5分 + if (dto.getCount() > 5000) { + danjia = 0.04; + } else { + danjia = 0.04; + } + if ("上下编码".equals(dto.getBianma())) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + (danjia * product.getCount() * 2 > 120 ? danjia * product.getCount() * 2 : 120))); + } + } else { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + (danjia * product.getCount()))); + } + } + if (craftList.contains("模切")) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + product.getPrice() * 1.6)); + } + } + } + //(!"4".equals(dto.getProTypeValue()) || !"4".equals(dto.getKind()) || !"5".equals(dto.getKind())) && + if (craftList.contains("模切") && !craftList.contains("打码")) {// 3个位以下25,3-16:50; 16 上 80 + if (min < 3) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + 25 + 0.04 * product.getCount())); + } + } else if (min < 16) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + 50 + 0.04 * product.getCount())); + } + } else { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + 30 + 50 + 0.04 * product.getCount())); + } + } + } + if (craftList.contains("腰封模切")) {// 腰封200克/157克模切收费(起步价100) + if (min < 3) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + (25 + 0.06 * product.getCount() > 100 ? 25 + 0.06 * product.getCount() : 100))); + } + } else if (min < 16) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + (50 + 0.06 * product.getCount() > 100 ? 50 + 0.06 * product.getCount() : 100))); + } + } else { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + (30 + 50 + 0.06 * product.getCount() > 100 ? 30 + 50 + 0.06 * product.getCount() : 100))); + } + } + } + if (craftList.contains("单面覆膜")) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + (length / 1000 * width / 1000 * product.getCount() * 0.7 > 70 ? length / 1000 * width / 1000 * product.getCount() * 0.7 : 70))); + } + } + if (craftList.contains("签名条") || craftList.contains("磁条")) { + double danjia = 0.0; + + for (Product product : priceList) { + // 1000张以内,一张5分 + if (product.getCount() <= 1000) { + danjia = 0.05; + } else if (product.getCount() == 2000) { + danjia = 0.03; + } else if (product.getCount() >= 3000) { + danjia = 0.02; + } + product.setPrice(Math.ceil(product.getPrice() + danjia * product.getCount())); + } + } + if (craftList.contains("倒圆角")) {// 特种纸名片工艺 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + (0.03 * product.getCount() > 30 ? 0.03 * product.getCount() : 30))); + } + } + if (craftList.contains("圆角")) {// 特种纸名片工艺 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + (0.03 * product.getCount() > 30 ? 0.03 * product.getCount() : 30) * 1.5)); + } + } else if (craftList.contains("烫金/")) { + for (Product product : priceList) { + if (product.getCount() <= 400) { + product.setPrice(product.getPrice() + 60); + } else { + product.setPrice(product.getPrice() + 100); + } + } + } + if (craftList.contains("击凸")) { + for (Product product : priceList) { + if (product.getCount() <= 400) { + product.setPrice(product.getPrice() + 60); + } else { + product.setPrice(product.getPrice() + 100); + } + } + } + if (!"特种纸名片".equals(dto.getProTypeValue()) && craftList.contains("异形模切")) {// 300克牛皮纸工艺 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + (0.05 * product.getCount() > 50 ? 0.05 * product.getCount() : 50))); + } + } + if ("特种纸名片".equals(dto.getProTypeValue()) && craftList.contains("异形模切")) {// 200-500张按照原有的价格乘以3倍 1000-5000张按照原有的价格乘以2.4倍 5000-10000张按照原有的价格乘以2倍 + for (Product product : priceList) { + if (200 <= product.getCount() && product.getCount() <= 500) { + product.setPrice(Math.ceil(product.getPrice() * 3)); + } + if (500 < product.getCount() && product.getCount() <= 1000) { + product.setPrice(Math.ceil(product.getPrice() * 2.6)); + } + if (1000 < product.getCount() && product.getCount() <= 5000) { + product.setPrice(Math.ceil(product.getPrice() * 2.4)); + } + if (5000 < product.getCount() && product.getCount() <= 10000) { + product.setPrice(Math.ceil(product.getPrice() * 2)); + } + } + } + if (craftList.contains("异形")) {// 广告扇工艺(选了异形,每把+3毛钱 + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + 0.3 * product.getCount())); + } + } + if (craftList.contains("单面局部烫金")) {// 合版封套/房卡套烫金价格 + for (Product product : priceList) { + if (product.getCount() >= 5000) { + product.setPrice(Math.ceil(product.getPrice() + (product.getCount() * 0.08 > 100 ? product.getCount() * 0.08 : 100))); + } else { + product.setPrice(Math.ceil(product.getPrice() + (product.getCount() * 0.1 > 100 ? product.getCount() * 0.1 : 100))); + } + + } + } + if (craftList.contains("糊成品")) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + 0.1 * product.getCount())); + } + } + if (craftList.contains("糊半成品")) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + 0.15 * product.getCount())); + } + } + if (craftList.contains("流苏")) { + for (Product product : priceList) { + product.setPrice(Math.ceil(product.getPrice() + 0.15 * product.getCount())); + } + } + } + } + + // 价格表上传 + public Msg ajaxUploadExcel(MultipartFile file) throws Exception { + if (!file.isEmpty()) { + InputStream in = null; + List> listob = null; + try { + in = file.getInputStream(); + listob = new ExcelUtils().getBankListByExcel(in, file.getOriginalFilename()); + } catch (IOException e) { + e.printStackTrace(); + } + String filename = file.getOriginalFilename(); + System.out.println(filename); + Product vo = new Product(); + for (int i = 0; i < listob.size(); i++) { + synchronized (this) { + List lo = listob.get(i); + for (int j = 2; j < lo.size(); j++) { + if (StringUtils.isEmpty(String.valueOf(lo.get(0)).trim()) || StringUtils.isEmpty(String.valueOf(lo.get(1)).trim())) { + continue; + } + /* + * String size = String.valueOf(lo.get(0)).trim(); int count = Integer.valueOf(String.valueOf(lo.get(1)).trim()); Double price = Double.valueOf(String.valueOf(lo.get(2)).trim()); if (size.equals("竖版260*360*80MM尼龙绳子")) { vo.setKindValue("0"); vo.setKindLabel("竖版260*360*80MM尼龙绳子"); } else if (size.equals("竖版300*400*80MM尼龙绳子")) { vo.setKindValue("1"); vo.setKindLabel("竖版300*400*80MM尼龙绳子"); } else if (size.equals("竖版360*260*100")) { vo.setKindValue("2"); + * vo.setKindLabel("竖版360*260*100"); } else if (size.equals("横版250*260*80MM尼龙绳子")) { vo.setKindValue("3"); vo.setKindLabel("横版250*260*80MM尼龙绳子"); } vo.setCount(count); vo.setPrice(price); + */ + + String other = String.valueOf(lo.get(j)).trim(); + if ("另行报价".equals(other)) { + other = "0"; + } + Integer count = Integer.valueOf(String.valueOf(lo.get(0)).trim()); + Double length = Double.valueOf(String.valueOf(lo.get(1)).trim()); + Double width = Double.valueOf(j - 1); + Double price = 0.0; + if (!StringUtils.isEmpty(other)) { + price = Double.valueOf(other); + } + vo.setCount(count); + vo.setLength(length); + vo.setWidth(width); + vo.setPrice(price); + + // 不干胶 0 ---0:A级铜版不干胶 1:pvc不干胶 = 2:透明不干胶 3:牛皮纸不干胶 4:哑膜铜版纸不干胶 + // 特殊不干胶 1---0:单色哑金哑银亮金亮银印刷 1:彩色哑金哑银亮金亮银印刷(不含白墨) 2:哑金哑银亮金亮银无印刷凹凸 + // 3:单色烫金烫银(铜版纸哑膜亮膜pvc透明材质) + vo.setProTypeValue("0"); + vo.setProTypeLabel("不干胶"); + vo.setKindValue("1"); + vo.setKindLabel("透明/PVC不干胶"); + productMapper.insertSelective(vo); + } + } + } + } + return Msg.success(); + } +} diff --git a/src/main/java/lingtao/net/service/QuestionService.java b/src/main/java/lingtao/net/service/QuestionService.java new file mode 100644 index 0000000..ebfc06a --- /dev/null +++ b/src/main/java/lingtao/net/service/QuestionService.java @@ -0,0 +1,68 @@ +package lingtao.net.service; + +import java.util.List; + +import javax.servlet.http.HttpSession; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import lingtao.net.bean.Msg; +import lingtao.net.bean.Question; +import lingtao.net.bean.SysUser; +import lingtao.net.dao.QuestionMapper; + +@Service +public class QuestionService { + + @Autowired + private QuestionMapper questionMapper; + + public List questions(Question question) { + return questionMapper.questions(question); + } + + public Msg addQuestion(Question question, HttpSession session) { + SysUser user = (SysUser) session.getAttribute("USER_SESSION"); + question.setCreateBy(user.getRealname()); + try { + questionMapper.addQuestion(question); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + // 修改 + public Msg updateQuestionById(Question question, HttpSession session) { + SysUser user = (SysUser) session.getAttribute("USER_SESSION"); + question.setUpdateBy(user.getRealname()); + try { + questionMapper.updateQuestionById(question); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + public Msg deleteQuestionById(Integer id) { + try { + questionMapper.deleteQuestionById(id); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + public List getSingleQuestions() { + return questionMapper.getSingleQuestions(); + } + + public List getMultipleQuestions() { + return questionMapper.getMultipleQuestions(); + } + + public List getFillQuestions() { + return questionMapper.getFillQuestions(); + } +} diff --git a/src/main/java/lingtao/net/service/QuoteDataService.java b/src/main/java/lingtao/net/service/QuoteDataService.java new file mode 100644 index 0000000..55529de --- /dev/null +++ b/src/main/java/lingtao/net/service/QuoteDataService.java @@ -0,0 +1,535 @@ +package lingtao.net.service; + +import java.io.OutputStream; +import java.lang.reflect.Field; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import lingtao.net.bean.Msg; +import lingtao.net.bean.QuoteData; +import lingtao.net.bean.SysRole; +import lingtao.net.bean.SysUser; +import lingtao.net.controller.CustomerDataControlle; +import lingtao.net.dao.QuoteDataMapper; +import lingtao.net.dao.SysRoleMapper; +import lingtao.net.util.DateFormatUtils; + +@Service +public class QuoteDataService { + + @Autowired + private QuoteDataMapper quoteDataMapper; + + @Autowired + private SysRoleMapper roleMapper; + + @Autowired + private SysRoleMapper sysRolemapper; + + /** + * 根据角色身份查询数据列表 + */ + public List quoteDatas(QuoteData quoteData) { + quoteData.setQuoteTimeEnd(new DateFormatUtils().formatEndTime(quoteData.getQuoteTimeBegin())); + quoteData.setQuoteTimeBegin(new DateFormatUtils().formatBeginTime(quoteData.getQuoteTimeBegin())); + // 用户所拥有的角色 + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + String[] roleArr = user.getRole().split(","); + // 转成list,拿掉‘组长’身份 + List list = new ArrayList(Arrays.asList(roleArr)); + // 判断是否拥有超管身份标识 + boolean isSuper = false; + boolean isAllShop = false; + for (int i = 0; i < roleArr.length; i++) { + // 有【超级管理员】身份,状态改为true + if ("1".equals(roleArr[i])) { + isSuper = true; + break; + } + // 有【全部店铺】身份,状态改为true + if ("777".equals(roleArr[i])) { + isAllShop = true; + break; + } + // 如果有【店长/考试审核员/客服/组长/IP管理员/操作日志/不填旺旺】身份,去掉。不带去查询 + if ("666".equals(roleArr[i]) || "888".equals(roleArr[i]) || "999".equals(roleArr[i]) + || "1011".equals(roleArr[i]) || "1015".equals(roleArr[i]) || "1042".equals(roleArr[i]) + || "1049".equals(roleArr[i])) { + list.remove(roleArr[i]); + } + } + // 将list转为String[] 数组 + roleArr = list.toArray(new String[list.size()]); + // 如果没有【超级管理员/全部店铺】身份 + if (!isSuper && !isAllShop) { + // 再判断有没有查询条件且没有选择查找条件 + // 全部属性为空 true:没有查询条件 false:有查询条件 + boolean isNullFlag = true; + try { + // 前台会带用户的角色回来,上面已经获取,这里设置null不影响 + quoteData.setRole(null); + // 判断quoteData对象是否有属性(查询条件) + for (Field f : quoteData.getClass().getDeclaredFields()) { + f.setAccessible(true); + if (f.get(quoteData) != null && StringUtils.isNotBlank(f.get(quoteData).toString())) { + // 有属性 + isNullFlag = false; + break; + } + } + } catch (IllegalArgumentException | IllegalAccessException e) { + e.printStackTrace(); + } + // 如果有多个店铺角色 + if (roleArr.length > 1) { + // 全部属性为空 即没有条件查询,默认查出所有的店铺数据 + if (isNullFlag) { + quoteData.setRoleArr(roleArr); + } else {// 不为空,根据店铺和条件查询数据 + quoteData.setRoleSearchArr(roleArr); + } + } else {// 只有一个角色 + quoteData.setRoleSearch(roleArr[0]); + } + } + // 如果有【超管】,但是没有【所有店铺】,隐藏非本部店铺 + if (isSuper && !isAllShop) { + quoteData.setIsSelfShop("0"); + } + // 有【超管、全部店铺】直接走这 + return quoteDataMapper.quoteDatas(quoteData); + } + + public Msg updateById(int id, String field, String value, String username) { + QuoteData quoteData = new QuoteData(); + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + boolean flag = new CustomerDataControlle().isSuperOrManager(); + // 如果修改的是店长评语,判断有没有【组长】身份 + if ("commentManager".equals(field)) { + // 超管、组长身份才允许修改comment + if (!flag) { + return Msg.fail("只允许店长修改!"); + } + quoteData.setCommentManager(value); + } else if ("price".equals(field) || "buyPrice".equals(field)) {// 如果是价格/成交价格,组长和自己都能改 + if (!flag && !username.equals(user.getUsername())) { + return Msg.fail("除店长外,不允许修改他人的数据!"); + } + if ("price".equals(field)) { + quoteData.setPrice(Double.valueOf(value)); + } else if ("buyPrice".equals(field)) { + quoteData.setBuyPrice(Double.valueOf(value)); + } + } else { + // 只有自己的数据才能更改【客户旺旺】 + if (!username.equals(user.getUsername())) { + return Msg.fail("只允许修改自己的数据!"); + } + if ("wangwang".equals(field)) { + quoteData.setWangwang(value); + // 填写客户旺旺的时候,更改填写状态 + quoteData.setIsFillIn("1"); + } else if ("commentSelf".equals(field)) { + quoteData.setCommentSelf(value); + } + } + quoteData.setId(id); + quoteDataMapper.updateById(quoteData); + + return Msg.success(); + } + + /** + * 获取报价过的产品种类 + * + * @return + */ + public List getProType() { + return quoteDataMapper.getProType(); + } + + /** + * 修改【是否当天成交】状态 + * + * @param id + * @return + */ + + public Msg changeIsBuyToDay(Integer id) { + try { + quoteDataMapper.changeIsBuyToDay(id); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + /** + * 修改【是否成交】状态 + * + * @param id + * @return + */ + public Msg changeIsBuy(Integer id) { + try { + quoteDataMapper.changeIsBuy(id); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + /** + * 修改所属店铺以及选择状态 + * + * @param id + * @return + */ + public Msg updateShopnameSelect(String shopname, Integer id) { + try { + quoteDataMapper.updateShopnameSelect(shopname, id); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + /** + * 填写成交订单号 + * + * @param orderNumber + * @return + */ + public Msg addOrderNumber(Integer id, String orderNumber) { + try { + quoteDataMapper.addOrderNumber(id, orderNumber); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + /** + * 柱状图 + * + * @param quoteData + * @return + */ + public Map echartZhuList(QuoteData quoteData,int isKefu) { + Map map = new HashMap(); + List sname = new ArrayList();// 获取数据中有的店铺名称 + List allData = new ArrayList();// 所有数据条数 + List allNotBuy = new ArrayList();// 合计未成交 + List allBuy = new ArrayList();// 合计已成交 + List todayBuy = new ArrayList();// 合计当天已成交 + List notTodaybuy = new ArrayList();// 合计跟单后已成交 + List allBuyPrice = new ArrayList();// 所有成交金额 + List todayBuyPrice = new ArrayList();// 当天成交金额 + List notTodayBuyPrice = new ArrayList();// 跟单成交金额 + List allBuyPercentage = new ArrayList();// 成交百分比 + List allDataList = new ArrayList();// 所有数据 + + // 判断是否拥有超管身份标识 + boolean isNoSuper = true; + boolean isNoAllShop = true; + long startTime, endTime = 0; + startTime = System.currentTimeMillis(); + quoteData.setQuoteTimeEnd(new DateFormatUtils().formatEndTime(quoteData.getQuoteTimeBegin())); + quoteData.setQuoteTimeBegin(new DateFormatUtils().formatBeginTime(quoteData.getQuoteTimeBegin())); + // 如果是通过‘所属店铺’查询 + // 只根据店铺查===>查出该店铺人员该店铺的报价数据 + if(isKefu != 0) {//判断是否统计客服大单信息 + List realnameList = new ArrayList(); + // 根据店铺搜索该店铺有的人员 + String roleSearch = "999"; + if(quoteData.getRoleSearch() != "") { + roleSearch = roleSearch.concat(",").concat(quoteData.getRoleSearch()); + } + realnameList = quoteDataMapper.getRealnames(roleSearch); + // 根据人员查询数据 + for (String realname : realnameList) { + quoteData.setShopname(quoteData.getRoleSearch()); + quoteData.setRealname(realname); + QuoteData echartList = quoteDataMapper.getKefuEchartList(quoteData); + // X坐标展示客服名字 + sname.add(realname); + allDataList.add(echartList); + } + }else if (StringUtils.isNotEmpty(quoteData.getRoleSearch()) && StringUtils.isEmpty(quoteData.getRealname()) + && !"1".equals(quoteData.getByProTypeLabel())) { + // 店铺人员集合 + List realnameList = new ArrayList(); + // 根据店铺搜索该店铺有的人员 + realnameList = quoteDataMapper.getRealnames(quoteData.getRoleSearch()); + // 根据人员查询数据 + for (String realname : realnameList) { + quoteData.setShopname(quoteData.getRoleSearch()); + quoteData.setRealname(realname); + QuoteData echartList = quoteDataMapper.getEchartList(quoteData); + // X坐标展示客服名字 + sname.add(realname); + allDataList.add(echartList); + } + } else if ("1".equals(quoteData.getByProTypeLabel()) && StringUtils.isEmpty(quoteData.getRoleSearch()) + && StringUtils.isEmpty(quoteData.getRealname())) { // 只根据产品查==>查出报价的所有产品 + // 产品 + List productList = new ArrayList(); + // 报价中有的产品 + productList = this.getProType(); + // 根据人员查询数据 + for (String product : productList) { + quoteData.setProTypeLabel(product); + QuoteData echartList = quoteDataMapper.getEchartList(quoteData); + // X坐标展示产品 + sname.add(product); + allDataList.add(echartList); + } + } else if (StringUtils.isNotEmpty(quoteData.getRoleSearch()) + && StringUtils.isNotEmpty(quoteData.getRealname())) { // 根据店铺及人员查==>查询人员该店铺的产品报价 + // 产品 + List productList = new ArrayList(); + // 报价中有的产品 + productList = this.getProType(); + // 根据人员查询数据 + for (String product : productList) { + quoteData.setProTypeLabel(product); + quoteData.setShopname(quoteData.getRoleSearch()); + quoteData.setRealname(quoteData.getRealname()); + QuoteData echartList = quoteDataMapper.getEchartList(quoteData); + // X坐标展示产品 + sname.add(product); + allDataList.add(echartList); + } + } else if (StringUtils.isNotEmpty(quoteData.getRoleSearch()) && "1".equals(quoteData.getByProTypeLabel()) + && StringUtils.isEmpty(quoteData.getRealname())) { // 查询店铺的产品 + // 产品 + List productList = new ArrayList(); + // 报价中有的产品 + productList = this.getProType(); + // 根据人员查询数据 + for (String product : productList) { + quoteData.setShopname(quoteData.getRoleSearch()); + quoteData.setProTypeLabel(product); + QuoteData echartList = quoteDataMapper.getEchartList(quoteData); + // X坐标展示产品 + sname.add(product); + allDataList.add(echartList); + } + } else if (StringUtils.isNotEmpty(quoteData.getRealname()) && StringUtils.isEmpty(quoteData.getRoleSearch()) + && !"1".equals(quoteData.getByProTypeLabel())) { // 只根据名字查==>查该人员所有店铺的产品报价 + // 产品 + List productList = new ArrayList(); + // 报价中有的产品 + productList = this.getProType(); + // 根据人员查询数据 + for (String product : productList) { + quoteData.setProTypeLabel(product); + quoteData.setRealname(quoteData.getRealname()); + QuoteData echartList = quoteDataMapper.getEchartList(quoteData); + sname.add(product); + allDataList.add(echartList); + } + } else { + // 用户所拥有的角色 + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + String[] roleArr = user.getRole().split(","); + for (int i = 0; i < roleArr.length; i++) { + // 有【超级管理员、全部店铺】身份,状态改为false + if ("1".equals(roleArr[i])) { + isNoSuper = false; + break; + } + if ("777".equals(roleArr[i])) { + isNoAllShop = false; + break; + } + } + // 报价数据中拥有的店铺 + // List shopName = quoteDataMapper.getShopName(quoteData); + List shopName = new ArrayList(); + + // 如果没有【超管、所有店铺】,直接把自己的拥有的店铺拿去查询数据,同时排除特殊角色 + if (isNoSuper && isNoAllShop) { + // 获取【不允许被创建】的特殊角色id + List specialRoleIdList = roleMapper.getRoleIdsWhenIsNotRegist(); + // shopName.clear(); + for (String shopname : roleArr) { + // 是否拥有特殊角色标识 + boolean specialFlag = false; + for (int j = 0; j < specialRoleIdList.size(); j++) { + // 如果用户拥有的角色属于不可被创建的特殊角色,就排除,不加到图形中统计 + if (specialRoleIdList.get(j).toString().equals(shopname)) { + specialFlag = true; + break; + } + } + // 不是特殊角色,就加到列表中 + if (!specialFlag) { + shopName.add(shopname); + } + } + } else {// 有【超管】或者有【所有店铺】 + // 报价数据中拥有的店铺 + shopName = quoteDataMapper.getShopName(quoteData); + // 如果有【超管】,但是没有【所有店铺】,把非公司店铺去除掉 + if (!isNoSuper && isNoAllShop) { + // 别的公司的店铺ID + List otherRoleIdList = roleMapper.getRoleIdsWhenIsNotLingTao(); + for (int i = 0; i < shopName.size(); i++) { + // 其他公司店铺标识 + boolean otherFlag = false; + for (int j = 0; j < otherRoleIdList.size(); j++) { + // 如果报价中的店铺是别的公司的店铺,就排除,不加到图形中统计 + if (otherRoleIdList.get(j).toString().equals(shopName.get(i).toString())) { + otherFlag = true; + break; + } + } + // 是别的公司的店铺,就移除 + if (otherFlag) { + shopName.remove(i); + i--; + } + } + } + } + // 根据店铺查询数据 + for (String shopname : shopName) { + quoteData.setShopname(shopname); + QuoteData echartList = quoteDataMapper.getEchartList(quoteData); + sname.add(shopname); + allDataList.add(echartList); + } + } + + // 排序 + Collections.sort(allDataList, new Comparator() { + @Override + public int compare(QuoteData o1, QuoteData o2) { + return (int) (o2.getAllData() - o1.getAllData()); + } + }); + + for (QuoteData data : allDataList) { + allData.add(data.getAllData()); + allBuy.add(data.getAllBuy()); + allNotBuy.add(data.getAllNotBuy()); + todayBuy.add(data.getTodayBuy()); + notTodaybuy.add(data.getNotTodayBuy()); + allBuyPrice.add(data.getAllBuyPrice()); + todayBuyPrice.add(data.getTodayBuyPrice()); + notTodayBuyPrice.add(data.getNotTodayBuyPrice()); + allBuyPercentage.add(data.getAllBuyPercentage()); + } + map.put("sname", sname); + map.put("one", allData); + map.put("two", allBuy); + map.put("three", allNotBuy); + map.put("four", todayBuy); + map.put("five", notTodaybuy); + map.put("six", allBuyPrice); + map.put("seven", todayBuyPrice); + map.put("eight", notTodayBuyPrice); + map.put("nine", allBuyPercentage); + endTime = System.currentTimeMillis(); + System.out.println("getShopName使用的时间:" + (endTime - startTime)); + return map; + } + + @SuppressWarnings("resource") + public void excel(HttpServletResponse response, QuoteData quoteData) throws Exception { + response.setCharacterEncoding("UTF-8"); + List quoteDatasList = new ArrayList(); + List allRoleNameList = sysRolemapper.getAllRoleName(null); + + // 需要导出的数据 + quoteDatasList = quoteDatas(quoteData); + + // 创建excel文件 + XSSFWorkbook wb = new XSSFWorkbook(); + // 创建sheet页 + XSSFSheet sheet = wb.createSheet("总表"); + // 创建excel文件 +// HSSFWorkbook wb = new HSSFWorkbook(); + // 创建sheet页 +// HSSFSheet sheet = wb.createSheet("总表"); + String filename = "客服操作数据"; + String shopname = ""; + String isToDayBuy = "未成交"; + String isBuy = "未成交"; + + // 创建标题行 + XSSFRow titleRow = sheet.createRow(0); + // 创建标题行 +// HSSFRow titleRow = sheet.createRow(0); + titleRow.createCell(0).setCellValue("操作人"); + titleRow.createCell(1).setCellValue("数据所属店铺"); + titleRow.createCell(2).setCellValue("客户旺旺"); + titleRow.createCell(3).setCellValue("操作"); + titleRow.createCell(4).setCellValue("金额"); + titleRow.createCell(5).setCellValue("当天成交"); + titleRow.createCell(6).setCellValue("未成交原因"); + titleRow.createCell(7).setCellValue("跟单后成交"); + titleRow.createCell(8).setCellValue("成交金额"); + titleRow.createCell(9).setCellValue("店长追踪情况汇报"); + titleRow.createCell(10).setCellValue("操作时间"); + // 遍历将数据放到excel列中 + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + for (QuoteData quoteDatas : quoteDatasList) { + shopname = ""; + isToDayBuy = "未成交"; + isBuy = "未成交"; + for (SysRole sysRole : allRoleNameList) { + if (String.valueOf(sysRole.getRoleId()).equals(quoteDatas.getShopname())) { + shopname = sysRole.getRoleName(); + break; + } + } + if (quoteDatas.getIsBuyToDay().equals("1")) { + isToDayBuy = "已成交"; + } + if (quoteDatas.getIsBuy().equals("1")) { + isBuy = "已成交"; + } + XSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1); +// HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1); + dataRow.createCell(0).setCellValue(quoteDatas.getRealname()); + dataRow.createCell(1).setCellValue(shopname); + dataRow.createCell(2).setCellValue(quoteDatas.getWangwang()); + dataRow.createCell(3).setCellValue(quoteDatas.getRemark()); + dataRow.createCell(4).setCellValue(quoteDatas.getPrice()); + dataRow.createCell(5).setCellValue(isToDayBuy); + dataRow.createCell(6).setCellValue(quoteDatas.getCommentSelf()); + dataRow.createCell(7).setCellValue(isBuy); + dataRow.createCell(8).setCellValue(quoteDatas.getBuyPrice() != null ? quoteDatas.getBuyPrice() : 0); + dataRow.createCell(9).setCellValue(quoteDatas.getCommentManager()); + dataRow.createCell(10).setCellValue(formatter.format(quoteDatas.getQuoteTime())); + } + + // 设置下载时客户端Excel的名称 + response.setContentType("application/octet-stream;charset=utf-8"); + response.setHeader("Content-Disposition", + "attachment;filename=" + new String(filename.getBytes(), "iso-8859-1") + ".xls");// + ".xls" + + OutputStream ouputStream = response.getOutputStream(); + wb.write(ouputStream); + ouputStream.flush(); + ouputStream.close(); + } +} diff --git a/src/main/java/lingtao/net/service/QuoteLogService.java b/src/main/java/lingtao/net/service/QuoteLogService.java new file mode 100644 index 0000000..4edd691 --- /dev/null +++ b/src/main/java/lingtao/net/service/QuoteLogService.java @@ -0,0 +1,247 @@ +package lingtao.net.service; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import lingtao.net.bean.Product; +import lingtao.net.bean.ProductImg; +import lingtao.net.bean.QuoteData; +import lingtao.net.bean.QuoteLog; +import lingtao.net.bean.SysDictProduct; +import lingtao.net.bean.SysRole; +import lingtao.net.bean.SysUser; +import lingtao.net.dao.ProductImgMapper; +import lingtao.net.dao.QuoteDataMapper; +import lingtao.net.dao.QuoteLogMapper; +import lingtao.net.util.DateFormatUtils; +import lingtao.net.util.IPUtils; + +@Service +public class QuoteLogService { + + @Autowired + private QuoteLogMapper quoteLogMapper; + + @Autowired + private QuoteDataMapper quoteDataMapper; + + @Autowired + ProductImgMapper productImgMapper; + + @Autowired + private SysRoleService sysRoleService; + + // 列表 + public List quoteLogs(QuoteLog quoteLog) { + quoteLog.setQuoteTimeEnd(new DateFormatUtils().formatEndTime(quoteLog.getQuoteTimeBegin())); + quoteLog.setQuoteTimeBegin(new DateFormatUtils().formatBeginTime(quoteLog.getQuoteTimeBegin())); + return quoteLogMapper.quoteLogs(quoteLog); + } + + // 操作日志 + public String log(Product product, HttpServletRequest request, List proList) { + long startTime, endTime = 0; + startTime = System.currentTimeMillis(); + SysUser user = (SysUser) request.getSession().getAttribute("USER_SESSION"); + if (user == null) { + return "登陆失效"; + } + QuoteLog log = new QuoteLog(); + ProductImg productImg = new ProductImg(); + + // product转productImg + BeanUtils.copyProperties(product, productImg); + // 根据value查询label + if ("13".equals(productImg.getProTypeValue()) || "15".equals(productImg.getProTypeValue()) + || "4".equals(productImg.getProTypeValue())) { + productImg.setKind2Value(null); + } + // 优惠券 + if ("4".equals(productImg.getProTypeValue())) { + productImg.setKindValue("0"); + productImg.setKind2Value(product.getKind()); + } + // 合版封套 + if ("6".equals(productImg.getProTypeValue())) { + if (product.getLengthSize() > 0) { + productImg.setKind2Value("0"); + } + } + // 根据value获取label + SysDictProduct label = productImgMapper.getLabel(productImg); + + if (StringUtils.isEmpty(label)) { + return null; + } + String s = ""; + String remark_judge = ""; + String proTypeLabel = ""; + if ("常用种类".equals(product.getStickerKind())) { + s += "常用种类- "; + } + if ("少数量".equals(product.getStickerKind())) { + s += "少数量- "; + } + if ("专版打印".equals(product.getStickerKind())) { + s += "专版打印- "; + } + if (!StringUtils.isEmpty(label.getProTypeLabel())) { + if ("金属标".equals(label.getProTypeLabel()) && StringUtils.isEmpty(product.getCraftMo())) { + s += "UV转印贴 - "; + proTypeLabel = "UV转印贴"; + } else { + s += label.getProTypeLabel() + " - "; + proTypeLabel = label.getProTypeLabel(); + } + } + if ("少数量".equals(product.getCouponKind())) { + s += product.getProTypeLabel() + " - "; + } + if (!StringUtils.isEmpty(label.getKindLabel())) { + s += label.getKindLabel() + " - "; + } + if (!StringUtils.isEmpty(label.getKind2Label())) { + s += label.getKind2Label() + " - "; + } + if (!StringUtils.isEmpty(product.getKind3Value())) { + if ("0".equals(product.getKind3Value())) { + s += "骑马钉 - "; + } + } + String new_s = s; + new_s += "客户旺旺:" + product.getWangwang() + " - "; + // 产品 - 种类 + remark_judge = new_s; + // 不区分专版打印或者常用,3分钟内都不要 + if (remark_judge.contains("常用种类- ") || remark_judge.contains("专版打印- ")) { + remark_judge = remark_judge.substring(6); + } + // 画册P数 + if (!StringUtils.isEmpty(product.getPcount())) { + s += product.getPcount() + "P - "; + } + if (!StringUtils.isEmpty(product.getSize())) { + s += product.getSize() + " - "; + } + if (!StringUtils.isEmpty(product.getCraftMo())) { + s += product.getCraftMo() + " - "; + } + if (!StringUtils.isEmpty(product.getCraftTang())) { + s += product.getCraftTang() + " - "; + } + if (!StringUtils.isEmpty(product.getAotu())) { + s += product.getAotu() + " - "; + } + if (!StringUtils.isEmpty(product.getYinbai())) { + s += product.getYinbai() + " - "; + } + if (!StringUtils.isEmpty(product.getCraftSheng())) { + s += product.getCraftSheng() + " - "; + } + if (!StringUtils.isEmpty(product.getCraftShua())) { + s += product.getCraftShua() + " - "; + } + if (!StringUtils.isEmpty(product.getCraftBu())) { + s += product.getCraftBu() + " - "; + } + if (!StringUtils.isEmpty(product.getCraftJiao())) { + s += product.getCraftJiao() + " - "; + } + + if (!StringUtils.isEmpty(product.getCraft())) { + String[] craft = product.getCraft(); + for (int i = 0; i < craft.length; i++) { + if (StringUtils.isEmpty(craft[i])) + continue; + s += craft[i] + " - "; + } + } + if (!StringUtils.isEmpty(product.getNumber())) { + s += product.getNumber() + "款 - "; + } + + if ("16".equals(product.getProTypeValue())) { + s += product.getCount() + "本 " + proList.get(0).getPrice() + "元 "; + } else { + s += product.getCount() + "个 " + proList.get(0).getPrice() + "元 "; + } + + log.setRemark(s); + log.setRealname(user.getRealname()); + log.setUsername(user.getUsername()); + log.setQuoteIp(IPUtils.getIpAddr(request));// 获取ip + log.setBrower(IPUtils.getBrowserName(request));// 获取浏览器名称 + log.setOs(IPUtils.getOsName(request)); // 获取操作系统名称 + log.setPrice(proList.get(0).getPrice()); + List allRoleNames = sysRoleService.getAllRoleName(null); + String roleName = ""; + String[] split = user.getRole().split(","); + for (SysRole sysRole : allRoleNames) { + for (int i = 0; i < split.length; i++) { + if (split[i].equals(String.valueOf(sysRole.getRoleId()))) { + roleName += sysRole.getRoleName() + "、"; + } + } + } + log.setShopname(roleName); + quoteLogMapper.insertSelective(log); + + endTime = System.currentTimeMillis(); + System.out.println("【insertSelective】使用的时间:" + (endTime - startTime)); + + long startTime2, endTime2 = 0; + startTime2 = System.currentTimeMillis(); + boolean flag = false; + // 查询3分钟内自己报的数据 + List remarkJudgeData = quoteDataMapper.getQuoteDataByMinutes(user.getUsername()); + endTime2 = System.currentTimeMillis(); + System.out.println("【getQuoteDataByMinutes】使用的时间:" + (endTime2 - startTime2)); + for (String remarkJudge : remarkJudgeData) { + if (remarkJudge.equals(remark_judge)) { + // 如果3分钟内报过相同数据 + flag = true; + break; + } + } + // 插入数据(给客服数据新增用的) + String role = user.getRole(); + // 客服报的且3分钟内没有同一个客户报的数据才插入 + if (role.contains("999,") && !flag) { + QuoteData quoteData = new QuoteData(); + quoteData.setUsername(user.getUsername()); + quoteData.setRealname(user.getRealname()); + quoteData.setPrice(proList.get(0).getPrice()); + quoteData.setRole(user.getRole()); + // 默认都是没选择店铺 + quoteData.setIsSelect("0"); +// role = role.replace("999,", "").replace(",1049", "").replace(",1011", ""); + // 规则:第一位客服,第二位主店铺 + String shopname = role.substring(role.indexOf(",") + 1); + if (shopname.indexOf(",") != -1) { + shopname = shopname.substring(0, shopname.indexOf(",")); + } + System.out.println(shopname); + quoteData.setShopname(shopname); + quoteData.setIsSelect("1"); + // 除去【客服】只有一个店铺,所属店铺就是剩下这个店铺 切 选择状态改为已选择 +// if (!role.contains(",")) { +// } + quoteData.setIsBuy("0"); + quoteData.setIsBuyToDay("0"); + quoteData.setRemark(s); + quoteData.setRemarkJudge(remark_judge); + // 默认都是填写旺旺号 + quoteData.setIsFillIn("1"); + quoteData.setWangwang(product.getWangwang().trim()); + quoteData.setProTypeLabel(proTypeLabel); + quoteDataMapper.addQuoteData(quoteData); + } + return null; + } +} diff --git a/src/main/java/lingtao/net/service/SysDictSearchProService.java b/src/main/java/lingtao/net/service/SysDictSearchProService.java new file mode 100644 index 0000000..dfdfaa0 --- /dev/null +++ b/src/main/java/lingtao/net/service/SysDictSearchProService.java @@ -0,0 +1,66 @@ +package lingtao.net.service; + +import java.util.List; + +import javax.servlet.http.HttpSession; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysDictSearchPro; +import lingtao.net.bean.SysUser; +import lingtao.net.dao.SysDictSearchProMapper; + +@Service +public class SysDictSearchProService { + + @Autowired + SysDictSearchProMapper searchProMapper; + + // 查询 + public List keyWordsList(SysDictSearchPro searchPro) { + return searchProMapper.keyWordsList(searchPro); + } + + // 新增 + public Msg addSearchPro(SysDictSearchPro searchPro, HttpSession session) { + SysUser user = (SysUser) session.getAttribute("USER_SESSION"); + searchPro.setCreator(user.getRealname()); + try { + searchProMapper.insertSelective(searchPro); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + // 修改关键字 + public Msg updateKeyWordById(HttpSession session, int id, String value, String field) { + SysUser user = (SysUser) session.getAttribute("USER_SESSION"); + SysDictSearchPro searchPro = new SysDictSearchPro(); + searchPro.setId(id); + if ("url".equals(field)) { + searchPro.setUrl(value); + } else { + searchPro.setLikeProTypeLabel(value); + } + searchPro.setUpdater(user.getRealname()); + try { + searchProMapper.updateKeyWordById(searchPro); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + // 改变状态 + public Msg changeKeyWordStatus(Integer id) { + try { + searchProMapper.changeKeyWordStatus(id); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } +} diff --git a/src/main/java/lingtao/net/service/SysPermissionService.java b/src/main/java/lingtao/net/service/SysPermissionService.java new file mode 100644 index 0000000..658e8ed --- /dev/null +++ b/src/main/java/lingtao/net/service/SysPermissionService.java @@ -0,0 +1,29 @@ +package lingtao.net.service; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import lingtao.net.bean.SysPermission; +import lingtao.net.dao.SysPermissionMapper; + +@Service +public class SysPermissionService { + + @Autowired + SysPermissionMapper sysPermissionMapper; + + public List getAll() { + return sysPermissionMapper.getAll(); + } + + public List getParentPers() { + return sysPermissionMapper.getParentPers(); + } + + public List getPersByUserId(Integer userId) { + return sysPermissionMapper.getPersByUserId(userId); + } + +} diff --git a/src/main/java/lingtao/net/service/SysRoleService.java b/src/main/java/lingtao/net/service/SysRoleService.java new file mode 100644 index 0000000..9523690 --- /dev/null +++ b/src/main/java/lingtao/net/service/SysRoleService.java @@ -0,0 +1,85 @@ +package lingtao.net.service; + +import java.util.List; + +import javax.servlet.http.HttpSession; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysRole; +import lingtao.net.bean.SysUser; +import lingtao.net.dao.SysRoleMapper; + +@Service +public class SysRoleService { + + @Autowired + private SysRoleMapper sysRolemapper; + + // 角色列表 + public List getRoles(SysRole role) { + return sysRolemapper.getRoles(role); + } + + // 新增 + public Msg addRole(SysRole role, HttpSession session) { + SysUser user = (SysUser) session.getAttribute("USER_SESSION"); + try { + role.setCreateBy(user.getRealname()); + sysRolemapper.insertSelective(role); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + // 修改 + public Msg updateRoleById(SysRole role) { + try { + sysRolemapper.updateByPrimaryKeySelective(role); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + // 改变用户状态 + public Msg changeRoleStatus(String roleId) { + try { + sysRolemapper.changeRoleStatus(roleId); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + // 根据角色id查询角色拥有的权限 + public List getPerIdsByRoleId(Integer id) { + return sysRolemapper.getPerIdsByRoleId(id); + } + + // 删除角色已有的权限 + public void deleteRolePermissions(Integer roleId) { + sysRolemapper.deleteRolePermissions(roleId); + + } + + // 给角色授权 + public void addRolePermissions(Integer roleId, String[] split) { + sysRolemapper.addRolePermissions(roleId, split); + + } + + // 查询允许被注册的角色 + public List getAllRoleName(String isRegist) { + return sysRolemapper.getAllRoleName(isRegist); + } + + // 查询出用户所拥有的且允许被创建的角色 + public List getRolesByUserId(Integer userId) { + return sysRolemapper.getRolesByUserId(userId); + } + +} diff --git a/src/main/java/lingtao/net/service/SysUserService.java b/src/main/java/lingtao/net/service/SysUserService.java new file mode 100644 index 0000000..7844c7a --- /dev/null +++ b/src/main/java/lingtao/net/service/SysUserService.java @@ -0,0 +1,269 @@ +package lingtao.net.service; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.dao.SysUserMapper; +import lingtao.net.util.MD5Util; + +@Service +public class SysUserService { + + @Autowired + private SysUserMapper userMapper; + + // 注册 + public Msg register(SysUser user) { + user.setPassword(new MD5Util().md5(user.getPassword(), "lingtao")); + user.setCreateDate(new Date()); + // 注册的用户都是未激活状态 + user.setUserStatus("0"); + // 注册的用户都是系统功能隐藏状态 + user.setSysStatus("0"); + // 注册的用户不需要判断IP + user.setNeedIp("1"); + String roleId = user.getRole(); + if (StringUtils.isEmpty(roleId)) + return null; + // 给用户赋予角色 + user.setRole("999," + roleId); + // user.setRole("999"); + // Integer[] ids = {999}; + int count = userMapper.insertSelective(user); + // 根据角色的id把角色的权限给用户 + Integer[] ids = { 999, Integer.valueOf(roleId) }; + // 新增用户后会自动回补id + Integer userId = user.getUserId(); + userMapper.addUserRoles(userId, ids); + if (count < 0) { + return Msg.fail(); + } + return Msg.success(); + } + + public List getUsers(SysUser user) { + // 用户所拥有的角色 + String[] roleArr = user.getRole().split(","); + // 转成list,拿掉‘组长’身份 + List list = new ArrayList(Arrays.asList(roleArr)); + // 判断是否拥有超管身份标识 + boolean isSuper = false; + for (int i = 0; i < roleArr.length; i++) { + // 有‘超级管理员’身份,状态改为true + if ("1".equals(roleArr[i])) { + isSuper = true; + break; + } + + // 如果有【店长/考试审核员/客服/组长/IP管理员/操作日志/不填旺旺】身份,去掉。不带去查询 + if ("666".equals(roleArr[i]) || "888".equals(roleArr[i]) || "999".equals(roleArr[i]) + || "1011".equals(roleArr[i]) || "1015".equals(roleArr[i]) || "1042".equals(roleArr[i]) + || "1049".equals(roleArr[i])) { + list.remove(roleArr[i]); + } + } + // 将list转为String[] 数组 + roleArr = list.toArray(new String[list.size()]); + + // 如果没有‘超级管理员’身份,只能看到负责的部门的用户;如果有可以看到所有用户 + if (!isSuper) { + // 如果是通过‘用户角色’查询 + if (StringUtils.isNotEmpty(user.getRoleSearch())) { + // 清除自己拥有的角色,防止查询出所有的部门数据 + roleArr = null; + } + // 如果有多个 + if (user.getRole().contains(",")) { + user.setRoleArr(roleArr); + } else {// 只有一个角色 + user.setRoleSearch(user.getRole()); + } + } + + return userMapper.getUsers(user); + } + + // 检查用户名是否存在 + public Msg checkUsername(String username) { + SysUser user = userMapper.getUserByUsername(username); + if (user != null) { + return Msg.fail(); + } + return Msg.success(); + } + + // 新增 + public Msg addUser(SysUser user) { + user.setPassword(new MD5Util().md5(user.getPassword(), "lingtao")); + user.setCreateDate(new Date()); + try { + userMapper.insertSelective(user); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + // 修改 + public Msg updateUserById(SysUser user) { + if (!"********".equals(user.getPassword())) { // 如果改过密码 + user.setPassword(new MD5Util().md5(user.getPassword(), "lingtao")); + } else { + user.setPassword(null); + } + // 如果有【店长】身份,更改的角色前面添加【客服】 + SysUser user2 = (SysUser) SecurityUtils.getSubject().getPrincipal(); + boolean flag = false; + String[] role = user2.getRole().split(","); + for (int i = 0; i < role.length; i++) { + if ("666".equals(role[i])) { + flag = true; + break; + } + } + if (flag) { + user.setRole("999," + user.getRole()); + } + user.setUpdateDate(new Date()); + try { + userMapper.updateByPrimaryKeySelective(user); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + // 删除用户 + public Msg deleteUserById(Integer userId) { + try { + userMapper.deleteByPrimaryKey(userId); + return Msg.success(); + } catch (Exception e) { + return Msg.fail("主外键关联,删除失败!"); + } + } + + // 改变用户状态 + public Msg changeUserStatus(Integer userId) { + try { + userMapper.changeUserStatus(userId); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + public void addUserRoles(Integer userId, Integer[] ids) { + userMapper.addUserRoles(userId, ids); + } + + public void deleteUserRoles(Integer userId) { + userMapper.deleteUserRoles(userId); + } + + public Msg updatePassword(SysUser user) { + user.setPassword(new MD5Util().md5(user.getPassword(), "lingtao")); + int i = userMapper.updateByPrimaryKeySelective(user); + if (i > 0) { + return Msg.success(); + } + return Msg.fail(); + } + + public Msg addBirthDay(SysUser user) { + SysUser sysUser = (SysUser) SecurityUtils.getSubject().getPrincipal(); + user.setUserId(sysUser.getUserId()); + user.setIsBirthDay(0); + int i = userMapper.updateByPrimaryKeySelective(user); + if (i > 0) { + return Msg.success(); + } + return Msg.fail(); + } + + // 改变用户生日状态 + public Msg changeIsBirthDay(Integer userId) { + try { + userMapper.changeIsBirthDay(userId); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + public Msg changeNeedIp() { + try { + userMapper.changeNeedIp(); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + // 改变用户系统状态(管理员调整) + public Msg changeSysStatus(Integer userId) { + try { + userMapper.changeSysStatus(userId); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + // 改变用户系统状态(看完视频) + public Msg videoOverToChangeSysStatus(Integer userId) { + try { + userMapper.videoOverToChangeSysStatus(userId); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + // 改变用户系统状态(答题通过) + public Msg examOverToChangeSysStatus(Integer userId) { + try { + userMapper.examOverToChangeSysStatus(userId); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + // 改变阅读更新日志状态 + public Msg changeReadLogStatus(Integer userId) { + try { + userMapper.changeReadLogStatus(userId); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + public SysUser getUserInfo(Integer userId) { + try { + return userMapper.getUserInfo(userId); + } catch (Exception e) { + return null; + } + } + + /** + * 客服数据 -- 根据搜索的店铺获取人员 + * + * @return + */ + public List getRealnamesByShopname(String shopname) { + return userMapper.getRealnamesByShopname(shopname); + } + +} diff --git a/src/main/java/lingtao/net/service/UpdateLogService.java b/src/main/java/lingtao/net/service/UpdateLogService.java new file mode 100644 index 0000000..7912dc3 --- /dev/null +++ b/src/main/java/lingtao/net/service/UpdateLogService.java @@ -0,0 +1,64 @@ +package lingtao.net.service; + +import java.util.List; + +import javax.servlet.http.HttpSession; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import lingtao.net.bean.Msg; +import lingtao.net.bean.SysUser; +import lingtao.net.bean.UpdateLog; +import lingtao.net.dao.UpdateLogMapper; + +@Service +public class UpdateLogService { + + @Autowired + private UpdateLogMapper updateLogMapper; + + public List getUpdateLogs(UpdateLog updateLog) { + + return updateLogMapper.getUpdateLogs(updateLog); + } + + public Msg addLog(UpdateLog updateLog, HttpSession session) { + SysUser user = (SysUser) session.getAttribute("USER_SESSION"); + updateLog.setCreateBy(user.getRealname()); + try { + updateLogMapper.addLog(updateLog); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + public Msg updateLogById(UpdateLog updateLog, HttpSession session) { + try { + updateLogMapper.updateLogById(updateLog); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + public Msg deleteLogById(Integer id) { + try { + updateLogMapper.deleteLogById(id); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + + public Msg changeReadLogStatus() { + try { + updateLogMapper.changeReadLogStatus(); + return Msg.success(); + } catch (Exception e) { + return Msg.fail(); + } + } + +} diff --git a/src/main/java/lingtao/net/service/price/ClothingTagService.java b/src/main/java/lingtao/net/service/price/ClothingTagService.java new file mode 100644 index 0000000..5edf5d5 --- /dev/null +++ b/src/main/java/lingtao/net/service/price/ClothingTagService.java @@ -0,0 +1,6 @@ +package lingtao.net.service.price; + +public interface ClothingTagService { + + void inster(); +} diff --git a/src/main/java/lingtao/net/service/price/ProductService.java b/src/main/java/lingtao/net/service/price/ProductService.java new file mode 100644 index 0000000..f2a66cd --- /dev/null +++ b/src/main/java/lingtao/net/service/price/ProductService.java @@ -0,0 +1,14 @@ +package lingtao.net.service.price; + +import lingtao.net.enums.ProductEnum; +import org.apache.poi.ss.formula.functions.T; + +public interface ProductService { + + /** + * 计算价格 + */ + void getProduct(T t); + + ProductEnum getEnum(); +} diff --git a/src/main/java/lingtao/net/service/price/SelfAdhesiveStickerService.java b/src/main/java/lingtao/net/service/price/SelfAdhesiveStickerService.java new file mode 100644 index 0000000..33792c8 --- /dev/null +++ b/src/main/java/lingtao/net/service/price/SelfAdhesiveStickerService.java @@ -0,0 +1,4 @@ +package lingtao.net.service.price; + +public interface SelfAdhesiveStickerService { +} diff --git a/src/main/java/lingtao/net/service/price/impl/ClothingTagServiceImpl.java b/src/main/java/lingtao/net/service/price/impl/ClothingTagServiceImpl.java new file mode 100644 index 0000000..2ae0036 --- /dev/null +++ b/src/main/java/lingtao/net/service/price/impl/ClothingTagServiceImpl.java @@ -0,0 +1,27 @@ +package lingtao.net.service.price.impl; + +import lingtao.net.entity.ClothingTag; +import lingtao.net.enums.ProductEnum; +import lingtao.net.service.price.ClothingTagService; +import lingtao.net.service.price.ProductService; +import org.springframework.stereotype.Service; + + +@Service +public class ClothingTagServiceImpl implements ProductService, ClothingTagService { + + @Override + public void getProduct(ClothingTag clothingTag) { + System.out.println("===========clothingTag"); + } + + @Override + public ProductEnum getEnum() { + return ProductEnum.clothing_Tag; + } + + @Override + public void inster() { + + } +} diff --git a/src/main/java/lingtao/net/service/price/impl/ProductContent.java b/src/main/java/lingtao/net/service/price/impl/ProductContent.java new file mode 100644 index 0000000..57bfab9 --- /dev/null +++ b/src/main/java/lingtao/net/service/price/impl/ProductContent.java @@ -0,0 +1,32 @@ +package lingtao.net.service.price.impl; + +import lingtao.net.enums.ProductEnum; +import lingtao.net.service.price.ProductService; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Service +public class ProductContent implements ApplicationContextAware { + + @Autowired(required = false) + Map productServiceMap; + + public ProductService getService(ProductEnum productEnum) { + return productServiceMap.get(productEnum); + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + Map map = applicationContext.getBeansOfType(ProductService.class); + productServiceMap = new HashMap<>(); + map.forEach((key, value) -> { + productServiceMap.put(value.getEnum(), value); + }); + } +} diff --git a/src/main/java/lingtao/net/service/price/impl/SelfAdhesiveStickerServiceImpl.java b/src/main/java/lingtao/net/service/price/impl/SelfAdhesiveStickerServiceImpl.java new file mode 100644 index 0000000..13b0cc5 --- /dev/null +++ b/src/main/java/lingtao/net/service/price/impl/SelfAdhesiveStickerServiceImpl.java @@ -0,0 +1,20 @@ +package lingtao.net.service.price.impl; + +import lingtao.net.entity.SelfAdhesiveSticker; +import lingtao.net.enums.ProductEnum; +import lingtao.net.service.price.ProductService; +import lingtao.net.service.price.SelfAdhesiveStickerService; +import org.springframework.stereotype.Service; + +@Service +public class SelfAdhesiveStickerServiceImpl implements ProductService, SelfAdhesiveStickerService { + @Override + public void getProduct(SelfAdhesiveSticker selfAdhesiveSticker) { + System.out.println("===========SelfAdhesiveSticker"); + } + + @Override + public ProductEnum getEnum() { + return ProductEnum.self_adhesive_sticker; + } +} diff --git a/src/main/java/lingtao/net/util/AStickersPrice.java b/src/main/java/lingtao/net/util/AStickersPrice.java new file mode 100644 index 0000000..23562f1 --- /dev/null +++ b/src/main/java/lingtao/net/util/AStickersPrice.java @@ -0,0 +1,432 @@ +package lingtao.net.util; + +import lingtao.net.bean.Product; + +import java.util.ArrayList; +import java.util.List; + +/** + * A级铜版纸不干胶价格 + */ +public class AStickersPrice { + + int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000, + 100000}; + + double AreaArr[] = {0.004, 0.006, 0.008, 0.01, 0.012, 0.015, 0.017, 0.018, 0.02, 0.03, 0.04, 0.06, 0.1, 0.2, 0.3}; + + // 9*5.4cm(一个名片位)以内价格 + public List oneCradPrice(int count, String role) { + List list = new ArrayList(); + Product pro = new Product(); + int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000, 100000}; + int[] priceArr; + priceArr = new int[]{60, 70, 95, 125, 175, 270, 510, 800, 1000, 1200, 1400, 1600, 1800, 2000, 2200}; + + for (int i = 0; i < bigCountArr.length; i++) { + if (bigCountArr[i] < count || list.size() > 5) { + continue; + } + pro = new Product(); + pro.setCount(bigCountArr[i]); + pro.setPrice(Math.ceil(priceArr[i])); + list.add(pro); + } + return list; + } + + // 20*1以内 + public List getPriceLess20(int count) { + List list = new ArrayList(); + Product pro = new Product(); + int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000}; + int priceArr[] = {80, 90, 150, 180, 200, 240, 400, 580, 720}; + if (count <= 40000) { + for (int i = 0; i < bigCountArr.length; i++) { + if (bigCountArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(bigCountArr[i]); + pro.setPrice(Math.ceil(priceArr[i])); + list.add(pro); + } + } else { + pro = new Product(); + pro.setCount(count); + pro.setPrice(Math.ceil((Math.ceil(count / 10000.0) - 4) * 150 + 720)); + list.add(pro); + } + return list; + } + + // 48*1以内 + public List getPriceLess48(int count) { + List list = new ArrayList(); + Product pro = new Product(); + int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000}; + int priceArr[] = {90, 100, 160, 190, 230, 420, 760, 1100, 1400}; + if (count <= 40000) { + for (int i = 0; i < bigCountArr.length; i++) { + if (bigCountArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(bigCountArr[i]); + pro.setPrice(Math.ceil(priceArr[i])); + list.add(pro); + } + } else { + pro = new Product(); + pro.setCount(count); + pro.setPrice(Math.ceil((Math.ceil(count / 10000.0) - 4) * 300 + 1400)); + list.add(pro); + } + return list; + } + + // 60*1以内 + public List getPriceLess60(int count) { + List list = new ArrayList(); + Product pro = new Product(); + int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000}; + int priceArr[] = {100, 120, 180, 230, 300, 550, 960, 1300, 1600}; + if (count <= 40000) { + for (int i = 0; i < bigCountArr.length; i++) { + if (bigCountArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(bigCountArr[i]); + pro.setPrice(Math.ceil(priceArr[i])); + list.add(pro); + } + } else { + pro = new Product(); + pro.setCount(count); + pro.setPrice(Math.ceil((Math.ceil(count / 10000.0) - 4) * 400 + 1600)); + list.add(pro); + } + return list; + } + + // 70*1以内 + public List getPriceLess70(int count) { + List list = new ArrayList(); + Product pro = new Product(); + int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000}; + int priceArr[] = {110, 130, 200, 270, 330, 580, 1100, 1500, 1900}; + if (count <= 40000) { + for (int i = 0; i < bigCountArr.length; i++) { + if (bigCountArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(bigCountArr[i]); + pro.setPrice(Math.ceil(priceArr[i])); + list.add(pro); + } + } else { + pro = new Product(); + pro.setCount(count); + pro.setPrice(Math.ceil((Math.ceil(count / 10000.0) - 4) * 400 + 1900)); + list.add(pro); + } + return list; + } + + // 80*1以内 + public List getPriceLess80(int count) { + List list = new ArrayList(); + Product pro = new Product(); + int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000}; + int priceArr[] = {130, 150, 240, 300, 380, 650, 1200, 1650, 2100}; + if (count <= 40000) { + for (int i = 0; i < bigCountArr.length; i++) { + if (bigCountArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(bigCountArr[i]); + pro.setPrice(Math.ceil(priceArr[i])); + list.add(pro); + } + } else { + pro = new Product(); + pro.setCount(count); + pro.setPrice(Math.ceil((Math.ceil(count / 10000.0) - 4) * 450 + 2100)); + list.add(pro); + } + return list; + } + + // 90*1以内 + public List getPriceLess90(int count) { + List list = new ArrayList(); + Product pro = new Product(); + int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000}; + int priceArr[] = {150, 170, 245, 320, 420, 750, 1300, 1750, 2200}; + if (count <= 40000) { + for (int i = 0; i < bigCountArr.length; i++) { + if (bigCountArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(bigCountArr[i]); + pro.setPrice(Math.ceil(priceArr[i])); + list.add(pro); + } + } else { + pro = new Product(); + pro.setCount(count); + pro.setPrice(Math.ceil((Math.ceil(count / 10000.0) - 4) * 450 + 2200)); + list.add(pro); + } + return list; + } + + // 100*1以内 + public List getPriceLess100(int count) { + List list = new ArrayList(); + Product pro = new Product(); + int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000}; + int priceArr[] = {170, 200, 260, 350, 480, 860, 1400, 2000, 2600}; + if (count <= 40000) { + for (int i = 0; i < bigCountArr.length; i++) { + if (bigCountArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(bigCountArr[i]); + pro.setPrice(Math.ceil(priceArr[i])); + list.add(pro); + } + } else { + pro = new Product(); + pro.setCount(count); + pro.setPrice(Math.ceil((Math.ceil(count / 10000.0) - 4) * 600 + 2600)); + list.add(pro); + } + return list; + } + + // 面积在0.003内 + public List getPrice(int count) { + List list = new ArrayList(); + Product pro = new Product(); + int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000, 100000}; + int priceArr[] = {56, 63, 84, 108, 150, 240, 456, 684, 912, 1125, 1350, 1575, 1800, 2025, 2250}; + if (count <= 40000) { + for (int i = 0; i < bigCountArr.length; i++) { + if (bigCountArr[i] < count || list.size() > 5) { + continue; + } + pro = new Product(); + pro.setCount(bigCountArr[i]); + pro.setPrice(Math.ceil(priceArr[i])); + list.add(pro); + } + } else { + pro = new Product(); + pro.setCount(count); + pro.setPrice(Math.ceil((Math.ceil(count / 10000.0) - 4) * 200 + 850)); + list.add(pro); + } + return list; + } + + public List f_getPrice(int priceArr[], int count, String craftMo) { + List list = new ArrayList(); + Product p = new Product(); + int countArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000, 50000}; + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count || list.size() > 3) { + continue; + } + p = new Product(); + p.setCount(countArr[i]); + if ("覆哑膜".equals(craftMo)) { + p.setPrice(Math.ceil(Double.valueOf(priceArr[i]) * 1.2)); + } else { + p.setPrice(Double.valueOf(priceArr[i])); + } + + list.add(p); + } + + return list; + } + + // 根据面积计算价格 + private List bigSizeAcountPrice(int count, Double area, List list, double[] priceArr) { + Product pro = new Product(); + if (count > bigCountArr[bigCountArr.length - 1]) { + pro.setCount(count); + pro.setPrice(Math.ceil(area * count * priceArr[bigCountArr.length - 1])); + list.add(pro); + } + for (int i = 0; i < bigCountArr.length; i++) { + if (bigCountArr[i] < count || list.size() > 3) { + continue; + } + + double[] arrPrice = new double[16]; + if (bigCountArr[i] == 500) { + arrPrice = new double[]{37, 33, 30, 26, 25, 21, 19, 18, 17, 19, 17, 12.8, 12.5, 12, 11.5, 11}; + } else if (bigCountArr[i] == 1000) { + arrPrice = new double[]{21, 19, 17, 17, 15, 14, 14, 12, 12, 12.5, 13, 9, 9, 8, 8, 7.8}; + } else if (bigCountArr[i] == 2000) { + arrPrice = new double[]{14, 13, 13, 12, 11, 11, 10, 10, 9, 10, 11, 7.8, 7.5, 7.5, 7.2, 7}; + } else if (bigCountArr[i] == 3000) { + arrPrice = new double[]{12, 11, 11, 10, 9, 9.5, 9, 8, 8, 9, 10, 6.8, 6.5, 6.5, 6, 6.5}; + } else if (bigCountArr[i] == 5000) { + arrPrice = new double[]{10, 9.5, 8, 7.8, 8.5, 9, 8.3, 7, 8, 6.5, 8, 6, 6, 6, 5.5, 5}; + } else if (bigCountArr[i] == 10000) { + arrPrice = new double[]{8, 7.5, 6.5, 6.5, 7.6, 8, 7.3, 6, 7.5, 6, 6, 6, 6, 6, 5, 5}; + } else if (bigCountArr[i] == 20000) { + arrPrice = new double[]{7.6, 6.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5, 4.5}; + } else if (bigCountArr[i] == 30000) { + arrPrice = new double[]{7.6, 6.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5, 4.5}; + } else if (bigCountArr[i] == 40000) { + arrPrice = new double[]{7.6, 6.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5, 4.5}; + } else if (bigCountArr[i] == 50000) { + arrPrice = new double[]{7.5, 6.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5, 4.5}; + } else if (bigCountArr[i] == 60000) { + arrPrice = new double[]{7.5, 6.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5, 4.5}; + } else if (bigCountArr[i] == 70000) { + arrPrice = new double[]{7.5, 6.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5, 4.5}; + } else if (bigCountArr[i] == 80000) { + arrPrice = new double[]{7.5, 6.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5, 4.5}; + } else if (bigCountArr[i] == 90000) { + arrPrice = new double[]{7.5, 6.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5, 4.5}; + } else if (bigCountArr[i] == 100000) { + arrPrice = new double[]{7.5, 6.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5, 4.5}; + } + + double pirce = getPrcieInArea(bigCountArr[i], area, arrPrice); + pro = new Product(); + pro.setCount(bigCountArr[i]); + pro.setPrice(Math.ceil(pirce)); + + list.add(pro); + } + return list; + } + + // 判断小尺寸是否大于大尺寸价格 + private double getPrcieInArea(int count, Double area, double[] priceArr) { + double lastPrice = 0, price = 0; + if (area > AreaArr[AreaArr.length - 1]) { + price = area * count * priceArr[AreaArr.length - 1]; + lastPrice = area * count * priceArr[AreaArr.length - 2]; + if (lastPrice > price) { + price = lastPrice; + } + } + for (int i = 0; i < AreaArr.length; i++) { + if (AreaArr[i] < area) { + continue; + } + double lastArea = 0; + if (i > 0) { + lastArea = AreaArr[i - 1]; + lastPrice = lastArea * count * priceArr[i - 1]; + } + price = area * count * priceArr[i]; + if (lastPrice > price) { + price = lastPrice; + } + break; + } + + return price; + } + + public List getPrice(int count, Double area, String role) { + List list = new ArrayList(); + double[] priceArrA = new double[16]; + + + if (area <= 0.004) { + priceArrA = new double[]{37.0, 21.0, 14.0, 12.0, 10.0, 8.0, 7.6, 7.6, 7.6, 7.5, 7.5, 7.5, 7.5, 7.5, 7.5, 7.5}; + } else if (area <= 0.006) { + priceArrA = new double[]{33.0, 19.0, 13.0, 11.0, 9.5, 7.5, 6.5, 6.5, 6.5, 6.5, 6.5, 6.5, 6.5, 6.5, 6.5, 6.5}; + } else if (area <= 0.008) { + priceArrA = new double[]{30.0, 17.0, 13.0, 11.0, 8, 6.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5}; + } else if (area <= 0.01) { + priceArrA = new double[]{26.0, 17.0, 12.0, 10.0, 7.8, 6.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5}; + } else if (area <= 0.012) { + priceArrA = new double[]{25.0, 15.0, 11.0, 9.0, 8.5, 7.6, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5}; + } else if (area <= 0.015) { + priceArrA = new double[]{21.0, 14.0, 11.0, 9.5, 9, 8, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5}; + } else if (area <= 0.017) { + priceArrA = new double[]{19.0, 14.0, 10, 9, 8.3, 7.3, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5}; + } else if (area <= 0.018) { + priceArrA = new double[]{18.0, 12.0, 10.0, 8.0, 7.0, 6.0, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5}; + } else if (area <= 0.02) { + priceArrA = new double[]{17.0, 12.0, 9.0, 8.0, 8.0, 7.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5}; + } else if (area <= 0.03) { + priceArrA = new double[]{19.0, 12.5, 10.0, 9.0, 6.5, 6.0, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5}; + } else if (area <= 0.04) { + priceArrA = new double[]{17.0, 13.0, 11.0, 10.0, 6.0, 6.0, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5}; + } else if (area <= 0.06) { + priceArrA = new double[]{12.8, 9.0, 7.8, 6.8, 6.0, 6.0, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5}; + } else if (area <= 0.1) { + priceArrA = new double[]{12.5, 9.0, 7.5, 6.5, 6.0, 6.0, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5}; + } else if (area <= 0.2) { + priceArrA = new double[]{12.0, 8.0, 7.5, 6.5, 6.0, 6.0, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5}; + } else if (area <= 0.3) { + priceArrA = new double[]{11.5, 8.0, 7.2, 6.0, 5.5, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0}; + } else if (area > 0.3) { + priceArrA = new double[]{11.0, 7.8, 7.0, 6.5, 5.0, 5.0, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5}; + } + + list = bigSizeAcountPrice(count, area, list, priceArrA); + return list; + } + + public static void main(String[] args) { + String memoStr = "(1988074200376066673)-80x54mm-1000张-铜版纸不干胶覆膜模切-ZS-马晓光123maxiaoguang-河南省-红红-[C2+1]"; + memoStr = memoStr.replace("(", "("); + memoStr = memoStr.replace(")", ")"); + int sIndex = memoStr.indexOf("("); + int eIndex = memoStr.indexOf(")"); + if (sIndex == -1 || eIndex == -1) { + return; + } + String first = memoStr.substring(0, sIndex + 1); + String memoCtid = "S_C1_1988074200376066673"; + if (memoCtid.indexOf("C") != -1) { + String CIdx = midStrEx(memoStr, "[", "]"); //C1 + if (CIdx.indexOf("+") != -1) { + CIdx = "C" + CIdx.split("\\+")[1]; + } + memoCtid = memoCtid.replace(CIdx + "_", ""); //去掉C1 + } + String last = memoStr.substring(eIndex, memoStr.length()); + String newMemo = first + memoCtid + last; + System.out.println(newMemo); + } + + public static String midStrEx(String source, String startStr, String endStr) { + String result = ""; + int startIndex, endIndex; + try { + startIndex = source.indexOf(startStr); + if (startIndex == -1) { + + return result; + } + String tmpStr = source.substring(startIndex + startStr.length()); + endIndex = tmpStr.indexOf(endStr); + if (endIndex == -1) { + return result; + } + result = tmpStr.substring(0, endIndex); + } catch (Exception ex) { + System.out.println("MidStrEx Err: " + ex.getMessage()); + } + return result; + } + +} diff --git a/src/main/java/lingtao/net/util/AYaMoStickersPrice.java b/src/main/java/lingtao/net/util/AYaMoStickersPrice.java new file mode 100644 index 0000000..7246c91 --- /dev/null +++ b/src/main/java/lingtao/net/util/AYaMoStickersPrice.java @@ -0,0 +1,116 @@ +package lingtao.net.util; + +import java.util.ArrayList; +import java.util.List; + +import lingtao.net.bean.Product; + +/** + * 哑膜A级铜版纸不干胶价格 + */ +public class AYaMoStickersPrice { + + int bigCountArr[] = { 500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000, + 100000 }; + + /** + * 不干胶大数量遍历添加价格 + */ + private List bigSizeAcountPrice(int count, Double area, List list, Double[] priceArr) { + Product pro = new Product(); + if (count > bigCountArr[bigCountArr.length - 1]) { + pro.setCount(count); + pro.setPrice(Math.ceil(area * count * priceArr[bigCountArr.length - 1])); + list.add(pro); + } + for (int i = 0; i < bigCountArr.length; i++) { + if (bigCountArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(bigCountArr[i]); + pro.setPrice(Math.ceil(area * bigCountArr[i] * priceArr[i])); + list.add(pro); + } + return list; + } + + // 小尺寸 1万以上 + public List getPrice(int count, Double area) { + List list = new ArrayList(); + if (area > 0 && area <= 0.0004) { + Double priceArrA[] = { 450.0, 275.0, 225.0, 183.0, 160.0, 100.0, 72.0, 70.0, 60.0, 55.0, 49.0, 43.0, 37.0, + 35.0, 34.0, 33.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0004 && area <= 0.0006) { + Double priceArrA[] = { 300.0, 183.0, 150.0, 122.0, 106.0, 67.0, 62.0, 48.0, 42.0, 39.0, 38.0, 37.0, 36.0, + 35.0, 33.0, 33.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0006 && area <= 0.0008) { + Double priceArrA[] = { 257.0, 157.0, 128.0, 105.0, 91.0, 57.0, 48.0, 40.0, 32.0, 32.0, 31.0, 30.0, 29.0, + 28.0, 27.0, 26.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0008 && area <= 0.001) { + Double priceArrA[] = { 200.0, 122.0, 100.0, 81.0, 71.0, 45.0, 41.0, 32.0, 27.0, 26.0, 25.0, 24.0, 23.0, + 22.0, 21.0, 20.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.001 && area <= 0.0012) { + Double priceArrA[] = { 150.0, 92.0, 75.0, 61.0, 53.0, 45.0, 35.0, 28.0, 23.0, 22.0, 21.0, 20.0, 19.0, 18.0, + 17.0, 16.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0012 && area <= 0.0014) { + Double priceArrA[] = { 138.0, 85.0, 69.0, 62.0, 51.0, 38.0, 30.0, 25.0, 21.0, 20.0, 19.0, 18.0, 17.0, 16.0, + 15.0, 14.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0014 && area <= 0.0016) { + Double priceArrA[] = { 120.0, 73.0, 67.0, 53.0, 47.0, 33.0, 20.0, 19.0, 17.0, 17.0, 17.0, 16.0, 15.0, 14.0, + 13.0, 13.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0016 && area <= 0.0025) { + Double priceArrA[] = { 117.0, 71.0, 67.0, 51.0, 44.0, 29.0, 14.0, 13.0, 12.5, 12.0, 11.0, 11.0, 10.5, 10.0, + 10.0, 9.5 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0025 && area <= 0.0035) { + Double priceArrA[] = { 110.0, 65.0, 63.0, 46.0, 37.0, 27.0, 13.5, 11.5, 11.5, 11.5, 11.0, 11.0, 11.0, 10.0, + 9.5, 9.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0035 && area <= 0.0045) { + Double priceArrA[] = { 84.0, 50.0, 44.0, 33.0, 25.0, 19.0, 12.0, 11.0, 11.0, 11.0, 10.0, 10.0, 10.0, 9.5, + 9.5, 9.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0045 && area <= 0.0084) { + Double priceArrA[] = { 56.0, 35.0, 29.0, 26.0, 19.0, 16.0, 11.0, 11.0, 10.5, 10.5, 10.0, 10.0, 9.0, 9.0, + 9.0, 8.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0084 && area <= 0.012) { + Double priceArrA[] = { 42.0, 26.0, 23.0, 18.0, 14.0, 12.0, 11.0, 11.0, 9.0, 8.0, 7.5, 7.5, 7.5, 7.5, 7.5, + 7.5 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.012 && area <= 0.015) { + Double priceArrA[] = { 36.0, 25.0, 22.0, 17.0, 14.0, 12.0, 9.0, 9.0, 8.0, 8.0, 7.0, 7.0, 7.0, 7.0, 7.0, + 7.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.015 && area <= 0.02) { + Double priceArrA[] = { 35.0, 24.0, 21.0, 17.0, 14.0, 12.0, 9.0, 9.0, 8.0, 8.0, 7.0, 7.0, 7.0, 7.0, 7.0, + 7.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.02 && area <= 0.06) { + Double priceArr[] = { 32.0, 23.0, 21.0, 17.0, 14.0, 12.0, 9.0, 9.0, 8.0, 8.0, 7.0, 7.0, 7.0, 7.0, 7.0, + 7.0 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } else if (area > 0.06 && area <= 0.1) { + Double priceArr[] = { 17.0, 12.0, 11.0, 10.0, 9.0, 9.0, 8.2, 8.0, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } else if (area > 0.1 && area <= 0.2) { + Double priceArr[] = { 13.0, 10.0, 9.0, 8.0, 6.5, 6.0, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } else if (area > 0.2 && area <= 0.3) { + Double priceArr[] = { 11.0, 8.0, 7.5, 7.0, 6.5, 6.0, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } else if (area > 0.3) { + Double priceArr[] = { 10.0, 7.0, 6.5, 6.0, 6.0, 6.0, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } + return list; + } +} diff --git a/src/main/java/lingtao/net/util/AngClothUtil.java b/src/main/java/lingtao/net/util/AngClothUtil.java new file mode 100644 index 0000000..14cf98e --- /dev/null +++ b/src/main/java/lingtao/net/util/AngClothUtil.java @@ -0,0 +1,37 @@ +package lingtao.net.util; + +import lingtao.net.bean.Product; + +import java.util.List; + +public class AngClothUtil { + + public static List getPrice(Double area, int count, List priceList, String[] craft) { + area = area * count; + Product pro = null; + double basePrice = 0; + double price = 0; + double mince = 45; + if (area <= 1) { + basePrice = 60; + } else if (area <= 2) { + basePrice = 55; + } else if (area <= 3) { + basePrice = 50; + } else if (area <= 4) { + basePrice = 45; + } else if (area <= 5) { + basePrice = 40; + } else if (area <= 10) { + basePrice = 36; + } else { + basePrice = 33; + } + price = Math.ceil(basePrice * area); + pro = new Product(); + pro.setCount(count); + pro.setPrice(Math.max(price, mince)); + priceList.add(pro); + return priceList; + } +} diff --git a/src/main/java/lingtao/net/util/BqPrice.java b/src/main/java/lingtao/net/util/BqPrice.java new file mode 100644 index 0000000..51c684d --- /dev/null +++ b/src/main/java/lingtao/net/util/BqPrice.java @@ -0,0 +1,53 @@ +package lingtao.net.util; + +import lingtao.net.bean.Product; +import org.springframework.util.StringUtils; + +import java.util.List; + +public class BqPrice { + public List getPrice(int count, Double length, List list, Integer number, String craftShua, String[] craft) { + double dj = 0; + if (length == 96 || length == 120) { + if (craftShua.equals("单面印刷")) { + dj = 45; + } else { + dj = 60; + } + } else if (length == 192) { + if (craftShua.equals("单面印刷")) { + dj = 57; + } else { + dj = 75; + } + } else if (length == 144) { + if (craftShua.equals("单面印刷")) { + dj = 49; + } else { + dj = 70; + } + } else if (length == 240) { + if (craftShua.equals("单面印刷")) { + dj = 96; + } else { + dj = 125; + } + } else { + if (craftShua.equals("单面印刷")) { + dj = 111; + } else { + dj = 144; + } + } + + if (!StringUtils.isEmpty(craft) && craft[0].equals("旗杆")) { + dj += 15; + } + dj += 5; + Product pro = new Product(); + pro.setPrice(Math.ceil(dj * count * number * 1.2)); + pro.setCount(count); + list.add(pro); + return list; + } +} diff --git a/src/main/java/lingtao/net/util/CanopyUtil.java b/src/main/java/lingtao/net/util/CanopyUtil.java new file mode 100644 index 0000000..a73b4a8 --- /dev/null +++ b/src/main/java/lingtao/net/util/CanopyUtil.java @@ -0,0 +1,77 @@ +package lingtao.net.util; + +import lingtao.net.bean.Product; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class CanopyUtil { + + public static List getPrice(Double area, int count, List priceList, String kindvalue, String craft) { + Product pro = null; + double price = 0; + area = area * count;//计算总面积 + double basePrice = 0; + double[] priceArr = getBasePrice(kindvalue, craft); + if (priceArr.length == 0) { + return priceList; + } + if (area <= 4) { + basePrice = priceArr[0]; + } else if (area <= 6) { + basePrice = priceArr[1]; + } else if (area <= 9) { + basePrice = priceArr[2]; + } else { + basePrice = priceArr[3]; + } + double mince = getMinPrice(kindvalue, craft); + price = Math.ceil(basePrice * area); + pro = new Product(); + pro.setCount(count); + pro.setPrice(Math.max(price, mince)); + pro.setWeight(String.valueOf(area * 0.18)); + priceList.add(pro); + + return priceList; + } + + private static double[] getBasePrice(String kindvalue, String craft) { + List craftList = craft != null ? Collections.singletonList(craft) : new ArrayList<>(); + if ("银胶涤纶布".equals(kindvalue)) { + if (craftList.contains("定制")) { + return new double[]{27, 26, 25, 24.5}; + } else { + return new double[]{12.5, 11.5, 11, 10}; + } + } + if ("黑胶涤纶布".equals(kindvalue)) { + if (craftList.contains("定制")) { + return new double[]{29, 28, 27, 26}; + } else { + return new double[]{14.5, 13.5, 13, 12}; + } + } + return new double[]{}; + } + + private static double getMinPrice(String kindvalue, String craft) { + List craftList = craft != null ? Collections.singletonList(craft) : new ArrayList<>(); + if ("银胶涤纶布".equals(kindvalue)) { + if (craftList.contains("定制")) { + return 80; + } else { + return 60; + } + } + if ("黑胶涤纶布".equals(kindvalue)) { + if (craftList.contains("定制")) { + return 80; + } else { + return 50; + } + } + return 0; + } +} diff --git a/src/main/java/lingtao/net/util/CardPrice.java b/src/main/java/lingtao/net/util/CardPrice.java new file mode 100644 index 0000000..d704364 --- /dev/null +++ b/src/main/java/lingtao/net/util/CardPrice.java @@ -0,0 +1,187 @@ +package lingtao.net.util; + +import java.util.ArrayList; +import java.util.List; + +import lingtao.net.bean.Product; + +public class CardPrice { + int countArr[] = { 500, 1000, 2000, 3000, 5000, 10000}; + + public List getCardPrice(int count, Double area, List list, Double[] priceArr, String kind) { + Product pro = new Product(); + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(countArr[i]); + if(kind.equals("1")) { + priceArr[i] += 2; + } + if(area == 0.0012) { + pro.setPrice(Math.ceil(area * countArr[i] * priceArr[i])+20); + }else { + pro.setPrice(Math.ceil(area * countArr[i] * priceArr[i])); + } + + list.add(pro); + } + + return list; + } + + //1万以上报价 + public List getMorePrice(int count, Double area) { + List list = new ArrayList(); + Product pro = new Product(); + double dj = 0; + if (area <= 0.0016) { + dj = 76.0; + } else if (area <= 0.0024) { + dj = 43.0; + } else if (area <= 0.0028) { + dj = 38.0; + } else if (area <= 0.0032) { + dj = 37.0; + } else if (area <= 0.0036) { + dj = 30.0; + } else if (area <= 0.005) { + dj = 29.0; + } else if (area <= 0.006) { + dj = 28.0; + } else if (area <= 0.009) { + dj = 27.0; + } else if (area <= 0.014) { + dj = 20.0; + } else if (area <= 0.021) { + dj = 20.0; + } else if (area <= 0.025) { + dj = 19.0; + } else if (area <= 0.12) { + dj = 17.0; + } + + pro = new Product(); + pro.setCount(count); + pro.setPrice(Math.ceil(dj * 10000 * area * 1.6)); + list.add(pro); + return list; + } + + // 1万以下报价 + public List getPrice(int count, Double area, String kind) { + List list = new ArrayList(); + if (area <= 0.0009) { + Double priceArrA[] = { 226.0, 142.0, 110.0, 86.0, 92.0, 76.0}; + list = getCardPrice(count, area, list, priceArrA, kind); + } else if (area <= 0.0016) { + Double priceArrA[] = { 158.0, 106.0, 82.0, 86.0, 84.0, 76.0}; + list = getCardPrice(count, area, list, priceArrA, kind); + } else if (area <= 0.0024) { + Double priceArrA[] = { 80.0, 56.0, 56.0, 45.0, 43.0, 43.0}; + list = getCardPrice(count, area, list, priceArrA, kind); + } else if (area <= 0.0028) { + Double priceArrA[] = { 76.0, 52.0, 50.0, 45.0, 43.0, 38.0}; + list = getCardPrice(count, area, list, priceArrA, kind); + } else if (area <= 0.0032) { + Double priceArrA[] = { 69.0, 51.0, 49.0, 44.0, 42.0, 37.0}; + list = getCardPrice(count, area, list, priceArrA, kind); + } else if (area <= 0.0036) { + Double priceArrA[] = { 60.0, 48.0, 45.0, 40.0, 35.0, 35.0}; + list = getCardPrice(count, area, list, priceArrA, kind); + } else if (area <= 0.0039) { + Double priceArrA[] = { 50.0, 45.0, 40.0, 35.0, 30.0, 30.0}; + list = getCardPrice(count, area, list, priceArrA, kind); + } else if (area <= 0.0044) { + Double priceArrA[] = { 75.0, 70.0, 60.0, 58.0, 56.0, 55.0}; + list = getCardPrice(count, area, list, priceArrA, kind); + } else if (area <= 0.0048) { + Double priceArrA[] = { 48.0, 44.0, 34.0, 35.0, 30.0, 30.0}; + list = getCardPrice(count, area, list, priceArrA, kind); + } else if (area <= 0.005) { + Double priceArrA[] = { 45.0, 40.0, 34.0, 35.0, 30.0, 30.0}; + list = getCardPrice(count, area, list, priceArrA, kind); + } else if (area <= 0.006) { + Double priceArrA[] = { 40.0, 35.0, 33.0, 32.0, 28.0, 28.0}; + list = getCardPrice(count, area, list, priceArrA, kind); + } else if (area <= 0.009) { + Double priceArrA[] = { 39.0, 34.0, 32.0, 31.0, 27.0, 37.0}; + list = getCardPrice(count, area, list, priceArrA, kind); + } else if (area <= 0.014) { + Double priceArrA[] = { 33.0, 28.0, 25.0, 23.0, 20.0, 20.0}; + list = getCardPrice(count, area, list, priceArrA, kind); + } else if (area <= 0.021) { + Double priceArrA[] = { 32.0, 28.0, 24.0, 22.0, 20.0, 20.0}; + list = getCardPrice(count, area, list, priceArrA, kind); + } else if (area <= 0.025) { + Double priceArrA[] = { 30.0, 26.0, 22.0, 20.0, 19.0, 19.0}; + list = getCardPrice(count, area, list, priceArrA, kind); + } else if (area <= 0.12) { + Double priceArrA[] = { 26.0, 23.0, 20.0, 18.0, 17.0, 17.0}; + list = getCardPrice(count, area, list, priceArrA, kind); + } + return list; + } + + /*菜单报价 + * kind 材质 + * size 尺寸 + * count 数量 + * number 款数 + * craft 工艺 + * */ + public List getMenuPrice(String kind, String size, int count, int number, String[] craft) { + List list = new ArrayList(); + double price = 0; + int type = 0; + int num = count * number; + for(int i = 0;i < craft.length; i++) { + if(craft[i].equals("单面过塑")) { + type = 1; + }else if(craft[i].equals("双面过塑")) { + type = 2; + } + } + if(kind.equals("1")) {//300克铜版纸菜单 + if(size.equals("21*14")) { + if(type == 1) { + price = 110 + 15 * num; + }else { + price = 110 + 16 * num; + } + }else if(size.equals("21*28.5")) { + if(type == 1) { + price = 120 + 15 * num; + }else { + price = 120 + 16 * num; + } + }else { + if(type == 1) { + price = 130 + 20 * num; + }else { + price = 130 + 22 * num; + } + } + }else {//pvc菜单 + if(size.equals("21*14")) { + if(type == 1) { + price = 120 + 18 * num; + }else { + price = 120 + 20 * num; + } + }else { + if(type == 1) { + price = 125 + 20 * num; + }else { + price = 125 + 30 * num; + } + } + } + Product pro = new Product(); + pro.setPrice(Math.ceil(price)); + pro.setCount(count); + list.add(pro); + return list; + } +} diff --git a/src/main/java/lingtao/net/util/CouponPrice.java b/src/main/java/lingtao/net/util/CouponPrice.java new file mode 100644 index 0000000..0c4f9ff --- /dev/null +++ b/src/main/java/lingtao/net/util/CouponPrice.java @@ -0,0 +1,212 @@ +package lingtao.net.util; + +import lingtao.net.bean.Product; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * 优惠券/贺卡价格 + */ +public class CouponPrice { + + int countArr[] = {200, 500, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000}; + + int countArr2[] = {200, 500, 1000, 2000, 3000, 5000, 10000}; + + + /** + * 遍历添加价格 + */ + private List setPrice(int count, int min, List list, Double[] priceArr) { + Product pro = new Product(); + if (min <= 4) { + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(Math.ceil(priceArr[i])); + list.add(pro); + } + } else if (min > 4) { + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(priceArr[i] * min); + list.add(pro); + } + } + return list; + } + + public List getPrice(int count, int min) { + List list = new ArrayList(); + if (min == 1) { + Double priceArrA[] = {35.0, 40.0, 60.0, 100.0, 150.0, 180.0, 200.0, 240.0, 280.0, 320.0, 360.0, 380.0}; + list = setPrice(count, min, list, priceArrA); + } else if (min == 2) { + Double priceArrA[] = {65.0, 70.0, 80.0, 130.0, 180.0, 240.0, 320.0, 380.0, 440.0, 500.0, 520.0, 540.0}; + list = setPrice(count, min, list, priceArrA); + } else if (min == 3) { + Double priceArrA[] = {90.0, 100.0, 120.0, 180.0, 280.0, 380.0, 480.0, 570.0, 670.0, 780.0, 840.0, 880.0}; + list = setPrice(count, min, list, priceArrA); + } else if (min == 4) { + Double priceArrA[] = {120.0, 120.0, 150.0, 240.0, 320.0, 400.0, 480.0, 600.0, 680.0, 800.0, 1040.0, 1080.0}; + list = setPrice(count, min, list, priceArrA); + } else if (min == 5) { + Double priceArrA[] = {26.0, 32.0, 36.0, 52.0, 76.0, 90.0, 116.0, 136.0, 150.0, 180.0, 220.0, 225.0}; + list = setPrice(count, min, list, priceArrA); + } else if (min > 5 && min <= 9) { + Double priceArrA[] = {24.0, 25.0, 30.0, 50.0, 70.0, 85.0, 105.0, 135.0, 150.0, 180.0, 200.0, 210.0}; + list = setPrice(count, min, list, priceArrA); + } else if (min == 10) { + Double priceArrA[] = {22.0, 23.0, 30.0, 50.0, 70.0, 85.0, 105.0, 135.0, 150.0, 180.0, 200.0, 210.0}; + list = setPrice(count, min, list, priceArrA); + } else if (min > 10 && min <= 20) { + Double priceArrA[] = {20.0, 20.0, 28.0, 48.0, 70.0, 85.0, 100.0, 135.0, 150.0, 180.0, 200.0, 200.0}; + list = setPrice(count, min, list, priceArrA); + } else if (min > 20 && min < 30) { + Double priceArrA[] = {15.0, 18.0, 24.0, 45.0, 70.0, 85.0, 95.0, 135.0, 150.0, 180.0, 190.0, 190.0}; + list = setPrice(count, min, list, priceArrA); + } else if (min == 30) { + Double priceArrA[] = {14.0, 17.0, 23.0, 44.0, 69.0, 84.0, 92.0, 132.0, 147.0, 176.0, 185.0, 185.0}; + list = setPrice(count, min, list, priceArrA); + } else if (min == 40) { + Double priceArrA[] = {13.0, 16.0, 22.0, 43.0, 68.0, 83.0, 90.0, 130.0, 145.0, 174.0, 180.0, 180.0}; + list = setPrice(count, min, list, priceArrA); + } else if (min == 50) { + Double priceArrA[] = {12.0, 15.0, 21.0, 42.0, 66.0, 83.0, 88.0, 128.0, 143.0, 170.0, 175.0, 175.0}; + list = setPrice(count, min, list, priceArrA); + } + return list; + } + + private static final String compate = "basePrice + area*price"; + private static final String moCompate = "chu*number"; + + public List getCouponPrice(int min, Product dto, List priceList, int count) { + Product product = null; + List products = new ArrayList<>(); + int[] priceArr = {20, 28, 52, 100, 155, 165, 250}; + + double minPrice = 0.00; + if ("0".equals(dto.getFmType())) { + minPrice = 60.00; + } + if ("1".equals(dto.getFmType())) { + minPrice = 55.00; + } + dto.setNumber(dto.getNumber() == null || dto.getNumber() == 0 ? 1 : dto.getNumber()); + for (int i = 0; i < countArr2.length; i++) { + product = new Product(); + if (count > countArr2[i] || products.size() >= 3) { + continue; + } + Double price = this.price(min, dto, countArr2[i], Double.valueOf(priceArr[i]), minPrice); + + product.setPrice(price); + product.setCount(countArr2[i]); + products.add(product); + } + return products; + } + + private Double price(int min, Product dto, int count, double basePrice, double minPrice) { + //200张以内16元/款/单,200张以上24元/款/单 + int price = count <= 200 ? 16 * dto.getNumber() : 20 * dto.getNumber(); + if (min == 1) { + price = count <= 200 ? 19 * dto.getNumber() : 25 * dto.getNumber(); + } + double minW = min; + if (minW > 1) { + minW = minW - 0.5; + } + double v = basePrice * min * dto.getNumber() + ((dto.getAwards() - 1) * minW * price); + String[] size_list = dto.getSize1().split(","); + double chu = 0.00; + double total_chu = 0.00; + List chu_list = new ArrayList<>(); + + //0贴膜1配膜 + for (int i = 0; i < size_list.length; i++) { + if ("60*25".equals(size_list[i])) { + if ("0".equals(dto.getFmType())) { + chu = 0.12 * count; + chu = chu < 30 ? 30 : chu; + } + if ("1".equals(dto.getFmType())) { + chu = 0.08 * count; + chu = chu < 20 ? 20 : chu; + } + } else if ("8*36".equals(size_list[i]) || "18*32".equals(size_list[i]) || "15*48".equals(size_list[i])) { + if ("0".equals(dto.getFmType())) { + chu = 0.1 * count; + chu = chu < 30 ? 30 : chu; + } + if ("1".equals(dto.getFmType())) { + chu = 0.07 * count; + chu = chu < 20 ? 20 : chu; + } + } else if ("35*58".equals(size_list[i])) { + if ("0".equals(dto.getFmType())) { + chu = 0.22 * count; + chu = chu < 100 ? 100 : chu; + } + if ("1".equals(dto.getFmType())) { + chu = 0.14 * count; + chu = chu < 50 ? 50 : chu; + } + } else if ("41*72".equals(size_list[i])) { + if ("0".equals(dto.getFmType())) { + chu = 0.24 * count; + chu = chu < 100 ? 100 : chu; + } + if ("1".equals(dto.getFmType())) { + chu = 0.16 * count; + chu = chu < 50 ? 50 : chu; + } + } else if ("70*50".equals(size_list[i])) { + if ("0".equals(dto.getFmType())) { + chu = 0.26 * count; + chu = chu < 100 ? 100 : chu; + } + if ("1".equals(dto.getFmType())) { + chu = 0.18 * count; + chu = chu < 50 ? 50 : chu; + } + } else { + //正常规格 + if ("0".equals(dto.getFmType())) { + chu = count <= 10000 ? 0.05 * count : 0.03 * count; + chu = chu < 30 ? 30 : chu; + } + if ("1".equals(dto.getFmType())) { + chu = 0.04 * count; + chu = chu < 20 ? 20 : chu; + } + } + chu_list.add(chu); + } + if (dto.getAwards() == 1 && count == 500) {//只有一个奖项时500和200价格相同 500+5 + minPrice = minPrice + 5; + } + Collections.sort(chu_list); + for (Double aDouble : chu_list) { + if (total_chu > 0.00) { + total_chu = total_chu + aDouble * dto.getNumber(); + }else{ + total_chu = Math.max(v + aDouble * dto.getNumber(), minPrice); + } + } + total_chu = Math.round(total_chu); + + return total_chu; + } + +} diff --git a/src/main/java/lingtao/net/util/CupHolderUtil.java b/src/main/java/lingtao/net/util/CupHolderUtil.java new file mode 100644 index 0000000..0e84d6a --- /dev/null +++ b/src/main/java/lingtao/net/util/CupHolderUtil.java @@ -0,0 +1,62 @@ +package lingtao.net.util; + +import lingtao.net.bean.Product; + +import java.util.List; + +public class CupHolderUtil { + static int countArr[] = {200, 500, 1000, 2000, 3000, 5000, 8000, 10000}; + static double priceArr[] = {98.8, 57, 30.4, 22.8, 16, 14.8, 14.8, 12.8}; + static double priceLess[] = {532, 570, 760, 950, 1080, 1600, 1920, 2112}; + + public static List getPrice(Double area, int count, List priceList) { + Product pro = new Product(); + double price = 0; + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count || priceList.size() > 3) { + continue; + } + price = Math.ceil(priceArr[i] * area * countArr[i]); + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(price > priceLess[i] ? price : priceLess[i]); + priceList.add(pro); + } + + return priceList; + } + + static int pvcCountArr[] = {500, 1000, 2000, 3000, 5000, 10000}; + + public static List getPvcPrice(String size, String kind, int count, List priceList) { + double[] price = {}; + if ("0.18mm哑白PVC".equals(kind)) { + if ("14*44".equals(size)) { + price = new double[]{546, 910, 1594, 2318, 3148, 6022}; + } + if ("27.8*44".equals(size)) { + price = new double[]{1094, 1820, 3190, 4636, 6298, 12046}; + } + } + if ("0.32mm哑白PVC".equals(kind)) { + if ("14*44".equals(size)) { + price = new double[]{712, 1242, 2242, 3286, 4500, 8700}; + } + if ("27.8*44".equals(size)) { + price = new double[]{1422, 2484, 4482, 6570, 9000, 17400}; + } + } + Product pro = new Product(); + for (int i = 0; i < pvcCountArr.length; i++) { + if (pvcCountArr[i] < count || priceList.size() > 3) { + continue; + } + pro = new Product(); + pro.setCount(pvcCountArr[i]); + pro.setPrice(price[i]); + priceList.add(pro); + } + + return priceList; + } +} diff --git a/src/main/java/lingtao/net/util/DateFormatUtils.java b/src/main/java/lingtao/net/util/DateFormatUtils.java new file mode 100644 index 0000000..e1be4ed --- /dev/null +++ b/src/main/java/lingtao/net/util/DateFormatUtils.java @@ -0,0 +1,164 @@ +package lingtao.net.util; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Calendar; +import java.util.Date; + +import org.apache.commons.lang.StringUtils; + +public class DateFormatUtils { + + // 开始日期 + public String formatBeginTime(String add_time_begin) { + // 按日期范围统计 + if (add_time_begin.length() > 20 && !add_time_begin.contains("~")) { + return add_time_begin.substring(0, 10); + } + // 按周统计 + if (add_time_begin.contains("~")) { + String[] dates = add_time_begin.split("~"); + return dates[0]; + } // 按月统计 + else if (add_time_begin.length() == 7) { + return add_time_begin + "-01"; + } // 按季度统计 + else if (add_time_begin.length() == 6) { + String subYear = add_time_begin.substring(0, 4); + if (add_time_begin.contains("-1")) { + return subYear + "-01-01"; + } else if (add_time_begin.contains("-2")) { + return subYear + "-04-01"; + } else if (add_time_begin.contains("-3")) { + return subYear + "-07-01"; + } else { + return subYear + "-10-01"; + } + } // 按年统计 + else if (add_time_begin.length() == 4) { + return add_time_begin + "-01-01"; + } else { // 按日统计 + return add_time_begin; + } + + } + + // 结束日期 + public String formatEndTime(String add_time_begin) { + // 按日期范围统计 + if (add_time_begin.length() > 20 && !add_time_begin.contains("~")) { + return add_time_begin.substring(13) + " 23:59:59"; + } + // 按周统计 + if (add_time_begin.contains("~")) { + String[] dates = add_time_begin.split("~"); + return dates[1]; + } + // 按月统计 + else if (add_time_begin.length() == 7) { + return add_time_begin + "-31"; + } + // 按季度统计 + else if (add_time_begin.length() == 6) { + String subYear = add_time_begin.substring(0, 4); + if (add_time_begin.contains("-1")) { + return subYear + "-03-31"; + } else if (add_time_begin.contains("-2")) { + return subYear + "-06-30"; + } else if (add_time_begin.contains("-3")) { + return subYear + "-09-30"; + } else { + return subYear + "-12-31"; + } + } + // 按年统计 + else if (add_time_begin.length() == 4) { + return add_time_begin + "-12-31"; + } else {// 按日统计 + if (StringUtils.isEmpty(add_time_begin)) + return add_time_begin; + return add_time_begin + " 23:59:59"; + } + } + + /** + * 计算俩个日期间隔的时间 + * + * @param date1 + * @param date2 + * @return + */ + public static long getSubtractiveDays(Date date1, Date date2) { + long nano = (Date + .from(LocalDateTime.ofInstant(date2.toInstant(), ZoneId.systemDefault()).atZone(ZoneId.systemDefault()) + .withHour(0).withMinute(0).withSecond(0).withNano(0).toInstant()) + .getTime() + - Date.from(LocalDateTime.ofInstant(date1.toInstant(), ZoneId.systemDefault()) + .atZone(ZoneId.systemDefault()).withHour(0).withMinute(0).withSecond(0).withNano(0).toInstant()) + .getTime()); + return nano / (1000 * 3600 * 24); + } + + /** + * 计算俩个日期间隔的时间 + * + * @param date1 + * @param date2 + * @return + */ + public static int getDay(Date date1, Date date2) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date1); + long time1 = cal.getTimeInMillis(); + cal.setTime(date2); + long time2 = cal.getTimeInMillis(); + long between_days = (time2 - time1) / (1000 * 3600 * 24); + return Integer.parseInt(String.valueOf(between_days)); + } + + /** + * 计算俩个日期间隔的时间 + * + * @param date1 + * @param date2 + * @return + */ + public static String getDatePoor(Date endDate, Date nowDate) { + + long nd = 1000 * 24 * 60 * 60;// 每天毫秒数 + + long nh = 1000 * 60 * 60;// 每小时毫秒数 + + long nm = 1000 * 60;// 每分钟毫秒数 + + long diff = endDate.getTime() - nowDate.getTime(); // 获得两个时间的毫秒时间差异 + + long day = diff / nd; // 计算差多少天 + + long hour = diff % nd / nh; // 计算差多少小时 + + long min = diff % nd % nh / nm; // 计算差多少分钟 + + return day + "天" + hour + "小时" + min + "分钟"; + } + + /** + * 计算俩个日期间隔的时间 + * + * @param date1 字符串日期 + * @param date2 字符串日期 + * @return + * @throws ParseException + */ + public static String getDay(String date1, String date2) throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date d1 = sdf.parse(date1); + Date d2 = sdf.parse(date2); + + long daysBetween = (long) ((d1.getTime() - d2.getTime()) / (60 * 60 * 24 * 1000)); + System.out.println(date1 + " 与 " + date2 + "间隔 " + daysBetween + " 天"); + return date1 + " 与 " + date2 + "间隔 " + daysBetween + " 天"; + } +} diff --git a/src/main/java/lingtao/net/util/ExcelUtils.java b/src/main/java/lingtao/net/util/ExcelUtils.java new file mode 100644 index 0000000..63ba536 --- /dev/null +++ b/src/main/java/lingtao/net/util/ExcelUtils.java @@ -0,0 +1,159 @@ +package lingtao.net.util; + +import java.io.IOException; +import java.io.InputStream; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import org.apache.poi.hssf.usermodel.HSSFDateUtil; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.apache.shiro.SecurityUtils; + +import lingtao.net.bean.SysUser; + +public class ExcelUtils { + + private final static String excel2003L = ".xls"; // 2003- 版本的excel + private final static String excel2007U = ".xlsx"; // 2007+ 版本的excel + + /** + * 描述:获取IO流中的数据,组装成List>对象 + * + * @param in,fileName + * @return + * @throws IOException + */ + public List> getBankListByExcel(InputStream in, String fileName) throws Exception { + List> list = null; + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + // 创建Excel工作薄 + Workbook work = this.getWorkbook(in, fileName); + if (null == work) { + throw new Exception("创建Excel工作薄为空!"); + } + Sheet sheet = null; // 页数 + Row row = null; // 行数 + Cell cell = null; // 列数 + + list = new ArrayList>(); + // 遍历Excel中所有的sheet + for (int i = 0; i < work.getNumberOfSheets(); i++) { + sheet = work.getSheetAt(i); + if (sheet == null) { + continue; + } + + // 遍历当前sheet中的所有行 + for (int j = sheet.getFirstRowNum(); j <= sheet.getLastRowNum(); j++) { + row = sheet.getRow(j); + if (user.getRole().contains("1050")) { + if (row == null || row.getFirstCellNum() == j) { + continue; + } + } else { + if (row == null) {// ||row.getFirstCellNum()==j 第一行不要 + continue; + } + } + + // 遍历所有的列 + List li = new ArrayList(); + for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) { + cell = row.getCell(y); + li.add(this.getValue(cell)); + } + list.add(li); + } + } + + return list; + + } + + /** + * 描述:根据文件后缀,自适应上传文件的版本 + * + * @param inStr,fileName + * @return + * @throws Exception + */ + public Workbook getWorkbook(InputStream inStr, String fileName) throws Exception { + Workbook wb = null; + String fileType = fileName.substring(fileName.lastIndexOf(".")); + if (excel2003L.equals(fileType)) { + wb = new HSSFWorkbook(inStr); // 2003- + } else if (excel2007U.equals(fileType)) { + wb = new XSSFWorkbook(inStr); // 2007+ + } else { + throw new Exception("解析的文件格式有误!"); + } + return wb; + } + + /** + * 描述:对表格中数值进行格式化 + * + * @param cell + * @return + */ + // 解决excel类型问题,获得数值 + public String getValue(Cell cell) { + String value = ""; + if (null == cell) { + return value; + } + switch (cell.getCellType()) { + // 数值型 + case Cell.CELL_TYPE_NUMERIC: + if (HSSFDateUtil.isCellDateFormatted(cell)) { + // 如果是date类型则 ,获取该cell的date值 + Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue()); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + value = format.format(date); + ; + } else {// 纯数字 + BigDecimal big = new BigDecimal(cell.getNumericCellValue()); + value = big.toString(); + // 解决1234.0 去掉后面的.0 + if (null != value && !"".equals(value.trim())) { + String[] item = value.split("[.]"); + if (1 < item.length && "0".equals(item[1])) { + value = item[0]; + } + } + } + break; + // 字符串类型 + case Cell.CELL_TYPE_STRING: + value = cell.getStringCellValue().toString(); + break; + // 公式类型 + case Cell.CELL_TYPE_FORMULA: + // 读公式计算值 + value = String.valueOf(cell.getNumericCellValue()); + if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串 + value = cell.getStringCellValue().toString(); + } + break; + // 布尔类型 + case Cell.CELL_TYPE_BOOLEAN: + value = " " + cell.getBooleanCellValue(); + break; + default: + value = cell.getStringCellValue().toString(); + } + if ("null".endsWith(value.trim())) { + value = ""; + } + return value; + } + +} \ No newline at end of file diff --git a/src/main/java/lingtao/net/util/FerruleUtil.java b/src/main/java/lingtao/net/util/FerruleUtil.java new file mode 100644 index 0000000..d52bffb --- /dev/null +++ b/src/main/java/lingtao/net/util/FerruleUtil.java @@ -0,0 +1,32 @@ +package lingtao.net.util; + +import java.util.List; + +import lingtao.net.bean.Product; + +public class FerruleUtil {//会员卡卡套 + int countList[] = {100, 200, 300, 500, 1000}; + double priceList[] = new double[5]; + public List getPrice(double length, int count, List list) { + + if(length == 19.5) { + priceList = new double[]{800, 1500, 1950, 2500, 4000}; + }else if(length == 15.5) { + priceList = new double[]{600, 1100, 1500, 2000, 3000}; + }else{ + priceList = new double[]{600, 1000, 1180, 1680, 2800}; + } + + for(int i = 0;i< countList.length;i++) { + if(countList[i] < count || list.size() > 2) { + continue; + } + Product pro = new Product(); + pro.setPrice(priceList[i]); + pro.setCount(countList[i]); + list.add(pro); + } + + return list; + } +} diff --git a/src/main/java/lingtao/net/util/FgqPrice.java b/src/main/java/lingtao/net/util/FgqPrice.java new file mode 100644 index 0000000..cccdf18 --- /dev/null +++ b/src/main/java/lingtao/net/util/FgqPrice.java @@ -0,0 +1,66 @@ +package lingtao.net.util; + +import java.text.DecimalFormat; +import java.util.List; + +import lingtao.net.bean.Product; + +public class FgqPrice { + DecimalFormat df = new DecimalFormat("0.00"); + /**仿古旗报价*/ + public List getPrice(int count, Double area, List list,String[] craftList, String kind, int num) { + Product pro = new Product(); + pro = new Product(); + pro.setCount(count); + String craft = craftList[0]; + double dj = 0,wei = 0; + if(kind.equals("1")) { + if(craft.equals("单面")) { + dj = 90; + wei = 0.065; + }else { + dj = 100; + wei = 0.195; + } + }else { + if(craft.equals("单面")) { + dj = 100; + wei = 0.165; + }else { + dj = 135; + wei = 0.33; + } + } + + double price = Math.ceil(area * dj); + pro.setPrice(price); + pro.setWeight(df.format(area * wei * num)); + list.add(pro); + + return list; + } + + /**手拉旗报价*/ + public List getSlqPrice(int count, List list) { + Product pro = new Product(); + pro = new Product(); + pro.setCount(count); + pro.setPrice(Math.ceil(30 * count)); + list.add(pro); + + return list; + } + + public List getSlqSpeicPrice(int count, List list, int type) { + Product pro = new Product(); + pro = new Product(); + pro.setCount(count); + if(type == 1) { + pro.setPrice(Math.ceil(16 * count)); + }else { + pro.setPrice(Math.ceil(12 * count)); + } + list.add(pro); + return list; + } +} diff --git a/src/main/java/lingtao/net/util/GDZGMStickersPrice.java b/src/main/java/lingtao/net/util/GDZGMStickersPrice.java new file mode 100644 index 0000000..cb38ec5 --- /dev/null +++ b/src/main/java/lingtao/net/util/GDZGMStickersPrice.java @@ -0,0 +1,174 @@ +package lingtao.net.util; + +import java.util.ArrayList; +import java.util.List; + +import lingtao.net.bean.Product; + +/** + * 格底珠光膜不干胶价格 + */ +public class GDZGMStickersPrice { + + int countArr[] = { 500, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000, 20000, 30000, 40000, 50000, + 60000, 70000, 80000, 90000, 100000 }; + + /** + * 5*5cm以内(含) + * + * @param count + * @return + */ + public List acountPrice5x5(int count) { + int priceArr[] = { 180, 200, 240, 280, 320, 380, 420, 460, 500, 540, 620, 1000, 1600, 2100, 2500, 3000, 3500, + 4000, 4500, 5000 }; + Product pro = new Product(); + List list = new ArrayList(); + if (count > countArr[countArr.length - 1]) { + pro.setCount(count); + // 每一万张增加500元 + pro.setPrice((Math.ceil(count / 100000.0) - 1) * 450 + 5000); + list.add(pro); + } + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(Math.ceil(priceArr[i])); + list.add(pro); + } + return list; + } + + /** + * 9*5.4cm 以内 + * + * @param count + * @param area 单个产品的面积(平方米) + * @return + */ + public List acountPrice9x5(int count, Double area) { + int priceArr[] = { 200, 240, 320, 380, 440, 500, 620, 700, 800, 900, 1000, 1750, 2400, 3200, 4000, 4800, 5400, + 6000, 6600, 7200 }; + Product pro = new Product(); + List list = new ArrayList(); + if (count > countArr[countArr.length - 1]) { + pro.setCount(count); + // 每平方17元 + pro.setPrice(Math.ceil(area * count * 17)); + list.add(pro); + } + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(Math.ceil(priceArr[i])); + list.add(pro); + } + return list; + } + + public List acountPrice9xup(int count, Double area) { + Product pro = new Product(); + List list = new ArrayList(); + double price = 0.0; + if (count > countArr[countArr.length - 1]) { + pro.setCount(count); + pro.setPrice(Math.ceil(area * count * 20)); + list.add(pro); + } + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + if (area * countArr[i] <= 3) { + price = 85; + } else if (area * countArr[i] > 3 && area * countArr[i] <= 5) { + price = 70; + } else if (area * countArr[i] > 5 && area * countArr[i] <= 8) { + price = 50; + } else if (area * countArr[i] > 8 && area * countArr[i] <= 10) { + price = 37; + } else if (area * countArr[i] > 10 && area * countArr[i] <= 15) { + price = 35; + } else if (area * countArr[i] > 15 && area * countArr[i] <= 25) { + price = 30; + } else if (area * countArr[i] > 25 && area * countArr[i] <= 30) { + price = 26; + } else if (area * countArr[i] > 30 && area * countArr[i] <= 100) { + price = 25; + } else if (area * countArr[i] > 100 && area * countArr[i] <= 500) { + price = 22; + } else { + price = 20; + } + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(Math.ceil(countArr[i] * area * price)); + list.add(pro); + } + return list; + } + + public List acountYaMoPrice9x5(int count, Double area) { + int priceArr[] = { 520, 540, 560, 600, 640, 680, 740, 800, 860, 940, 1100, 1800, 2500, 3300, 4100, 4900, 5500, + 6100, 6700, 7400 }; + Product pro = new Product(); + List list = new ArrayList(); + if (count > countArr[countArr.length - 1]) { + pro.setCount(count); + // 每平方18元 + pro.setPrice(Math.ceil(area * count * 18)); + list.add(pro); + } + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(Math.ceil(priceArr[i])); + list.add(pro); + } + return list; + } + + public List acountYamoPrice9xup(int count, Double area) { + Product pro = new Product(); + List list = new ArrayList(); + double price = 0.0; + if (count > countArr[countArr.length - 1]) { + pro.setCount(count); + pro.setPrice(Math.ceil(area * count * 20)); + list.add(pro); + } + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + if (area * countArr[i] <= 15) { + price = 0; + } else if (area * countArr[i] > 15 && area * countArr[i] <= 25) { + price = 32; + } else if (area * countArr[i] > 25 && area * countArr[i] <= 30) { + price = 28; + } else if (area * countArr[i] > 30 && area * countArr[i] <= 100) { + price = 27; + } else if (area * countArr[i] > 100 && area * countArr[i] <= 500) { + price = 24; + } else { + price = 22; + } + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(Math.ceil(countArr[i] * area * price) > 600 ? Math.ceil(countArr[i] * area * price) : 600); + list.add(pro); + } + return list; + } + +} diff --git a/src/main/java/lingtao/net/util/IPUtils.java b/src/main/java/lingtao/net/util/IPUtils.java new file mode 100644 index 0000000..7fe350f --- /dev/null +++ b/src/main/java/lingtao/net/util/IPUtils.java @@ -0,0 +1,134 @@ +package lingtao.net.util; + +import eu.bitwalker.useragentutils.Browser; +import eu.bitwalker.useragentutils.OperatingSystem; +import eu.bitwalker.useragentutils.UserAgent; +import eu.bitwalker.useragentutils.Version; +import org.apache.commons.lang.StringUtils; + +import javax.servlet.http.HttpServletRequest; + +public class IPUtils { + /** + * 获取登录用户的IP地址 + * + * @param request + * @return + */ + public static String getIpAddr(HttpServletRequest request) { + if (request == null) { + return "unknown"; + } + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Forwarded-For"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("X-Real-IP"); + } + + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + + return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : getMultistageReverseProxyIp(ip); + } + + /** + * 从多级反向代理中获得第一个非unknown IP地址 + * + * @param ip 获得的IP地址 + * @return 第一个非unknown IP地址 + */ + public static String getMultistageReverseProxyIp(String ip) { + // 多级反向代理检测 + if (ip != null && ip.indexOf(",") > 0) { + final String[] ips = ip.trim().split(","); + for (String subIp : ips) { + if (false == isUnknown(subIp)) { + ip = subIp; + break; + } + } + } + return StringUtils.substring(ip, 0, 255); + } + + /** + * 检测给定字符串是否为未知,多用于检测HTTP请求相关 + * + * @param checkString 被检测的字符串 + * @return 是否未知 + */ + public static boolean isUnknown(String checkString) { + return StringUtils.isBlank(checkString) || "unknown".equalsIgnoreCase(checkString); + } + + /** + * 获取发起请求的浏览器名称 + */ + public static String getBrowserName(HttpServletRequest request) { + String header = request.getHeader("User-Agent"); + UserAgent userAgent = UserAgent.parseUserAgentString(header); + Browser browser = userAgent.getBrowser(); + return browser.getName(); + } + + /** + * 获取发起请求的浏览器版本号 + */ + public static String getBrowserVersion(HttpServletRequest request) { + String header = request.getHeader("User-Agent"); + UserAgent userAgent = UserAgent.parseUserAgentString(header); + // 获取浏览器信息 + Browser browser = userAgent.getBrowser(); + // 获取浏览器版本号 + Version version = browser.getVersion(header); + return version.getVersion(); + } + + /** + * 获取发起请求的操作系统名称 + */ + public static String getOsName(HttpServletRequest request) { + String header = request.getHeader("User-Agent"); + UserAgent userAgent = UserAgent.parseUserAgentString(header); + OperatingSystem operatingSystem = userAgent.getOperatingSystem(); + return operatingSystem.getName(); + } + + + /** + * 通过IP获取地址(需要联网,调用淘宝的IP库) + * + * @param ip + * @return + */ + /* + * public static String getIpInfo(String ip) { if ("127.0.0.1".equals(ip)) { ip + * = "127.0.0.1"; } String info = ""; try { URL url = new + * URL("http://ip.taobao.com/service/getIpInfo.php?ip=" + ip); HttpURLConnection + * htpcon = (HttpURLConnection) url.openConnection(); + * htpcon.setRequestMethod("GET"); htpcon.setDoOutput(true); + * htpcon.setDoInput(true); htpcon.setUseCaches(false); + * + * InputStream in = htpcon.getInputStream(); BufferedReader bufferedReader = new + * BufferedReader(new InputStreamReader(in)); StringBuffer temp = new + * StringBuffer(); String line = bufferedReader.readLine(); while (line != null) + * { temp.append(line).append("\r\n"); line = bufferedReader.readLine(); } + * bufferedReader.close(); JSONObject obj = (JSONObject) + * JSON.parse(temp.toString()); if (obj.getIntValue("code") == 0) { JSONObject + * data = obj.getJSONObject("data"); info += data.getString("country") + " "; + * info += data.getString("region") + " "; info += data.getString("city") + " "; + * info += data.getString("isp"); } } catch (MalformedURLException e) { + * e.printStackTrace(); } catch (ProtocolException e) { e.printStackTrace(); } + * catch (IOException e) { e.printStackTrace(); } return info; } + */ + +} diff --git a/src/main/java/lingtao/net/util/KztPrice.java b/src/main/java/lingtao/net/util/KztPrice.java new file mode 100644 index 0000000..c329662 --- /dev/null +++ b/src/main/java/lingtao/net/util/KztPrice.java @@ -0,0 +1,33 @@ +package lingtao.net.util; + +import java.util.List; + +import lingtao.net.bean.Product; + +public class KztPrice { + public List getPrice(int count, Double length, List list) { + Product pro = new Product(); + pro = new Product(); + pro.setCount(count); + double price = 0; + + if(length < 24) { + if(count == 5000) { + price = 310; + }else { + price = 520; + } + }else { + if(count == 5000) { + price = 450; + }else { + price = 730; + } + } + pro.setPrice(price); + pro.setCount(count); + list.add(pro); + + return list; + } +} diff --git a/src/main/java/lingtao/net/util/LaSiStickersPrice.java b/src/main/java/lingtao/net/util/LaSiStickersPrice.java new file mode 100644 index 0000000..7cf61d5 --- /dev/null +++ b/src/main/java/lingtao/net/util/LaSiStickersPrice.java @@ -0,0 +1,117 @@ +package lingtao.net.util; + +import java.util.ArrayList; +import java.util.List; + +import lingtao.net.bean.Product; + +/** + * 拉丝金/银不干胶价格 + */ +public class LaSiStickersPrice { + + int countArr[] = { 500, 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000, 20000, 30000, 40000, 50000, + 60000, 70000, 80000, 90000, 100000 }; + + /** + * 5*5cm以内(含) + * + * @param count + * @return + */ + public List acountPrice5x5(int count) { + int priceArr[] = { 190, 220, 280, 360, 420, 500, 580, 640, 700, 780, 860, 1400, 2000, 2500, 3000, 3500, 4000, + 4500, 5000, 5500 }; + Product pro = new Product(); + List list = new ArrayList(); + if (count > countArr[countArr.length - 1]) { + pro.setCount(count); + // 每一万张增加500元 + pro.setPrice((Math.ceil(count / 100000.0) - 1) * 500 + 5500); + list.add(pro); + } + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(Math.ceil(priceArr[i])); + list.add(pro); + } + return list; + } + + /** + * 9*5.4cm 以内 + * + * @param count + * @param area 单个产品的面积(平方米) + * @return + */ + public List acountPrice9x5(int count, Double area) { + int priceArr[] = { 200, 260, 340, 420, 520, 630, 740, 850, 960, 1020, 1150, 2100, 3000, 4100, 5000, 5600, 6200, + 7300, 8000, 9000 }; + Product pro = new Product(); + List list = new ArrayList(); + if (count > countArr[countArr.length - 1]) { + pro.setCount(count); + // 每平方20元 + pro.setPrice(Math.ceil(area * count * 20)); + list.add(pro); + } + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(Math.ceil(priceArr[i])); + list.add(pro); + } + return list; + } + + public List acountPrice9xup(int count, Double area) { + Product pro = new Product(); + List list = new ArrayList(); + double price = 0.0; + if (count > countArr[countArr.length - 1]) { + pro.setCount(count); + pro.setPrice(Math.ceil(area * count * 20)); + list.add(pro); + } + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + if (area * countArr[i] <= 3) { + price = 90; + } else if (area * countArr[i] > 3 && area * countArr[i] <= 5) { + price = 70; + } else if (area * countArr[i] > 5 && area * countArr[i] <= 8) { + price = 50; + } else if (area * countArr[i] > 8 && area * countArr[i] <= 10) { + price = 37; + } else if (area * countArr[i] > 10 && area * countArr[i] <= 15) { + price = 35; + } else if (area * countArr[i] > 15 && area * countArr[i] <= 25) { + price = 30; + } else if (area * countArr[i] > 25 && area * countArr[i] <= 30) { + price = 26; + } else if (area * countArr[i] > 30 && area * countArr[i] <= 100) { + price = 25; + } else if (area * countArr[i] > 100 && area * count <= 500) { + price = 22; + } else { + price = 20; + } + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(Math.ceil(countArr[i] * area * price)); + list.add(pro); + } + return list; + } + +} diff --git a/src/main/java/lingtao/net/util/LunarCalendarUtil.java b/src/main/java/lingtao/net/util/LunarCalendarUtil.java new file mode 100644 index 0000000..66c97cc --- /dev/null +++ b/src/main/java/lingtao/net/util/LunarCalendarUtil.java @@ -0,0 +1,306 @@ +package lingtao.net.util; + +import java.util.Arrays; +import java.util.Date; +import java.util.GregorianCalendar; + +/** + * 工具类,实现阴阳历互转 + */ +public class LunarCalendarUtil { + /** + * 支持转换的最小农历年份 + */ + public static final int MIN_YEAR = 1900; + + /** + * 支持转换的最大农历年份 + */ + public static final int MAX_YEAR = 2099; + + /** + * 公历每月前的天数 + */ + private static final int[] DAYS_BEFORE_MONTH = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }; + /** + * 用来表示1900年到2099年间农历年份的相关信息,共24位bit的16进制表示,其中: 1. 前4位表示该年闰哪个月; 2. + * 5-17位表示农历年份13个月的大小月分布,0表示小,1表示大; 3. 最后7位表示农历年首(正月初一)对应的公历日期。 + * 以2014年的数据0x955ABF为例说明: 1001 0101 0101 1010 1011 1111 闰九月 农历正月初一对应公历1月31号 + */ + private static final int[] LUNAR_INFO = { + /* 1900 */ + 0x84B6BF, + /* 1901-1910 */ + 0x04AE53, 0x0A5748, 0x5526BD, 0x0D2650, 0x0D9544, 0x46AAB9, 0x056A4D, 0x09AD42, 0x24AEB6, 0x04AE4A, + /* 1911-1920 */ + 0x6A4DBE, 0x0A4D52, 0x0D2546, 0x5D52BA, 0x0B544E, 0x0D6A43, 0x296D37, 0x095B4B, 0x749BC1, 0x049754, + /* 1921-1930 */ + 0x0A4B48, 0x5B25BC, 0x06A550, 0x06D445, 0x4ADAB8, 0x02B64D, 0x095742, 0x2497B7, 0x04974A, 0x664B3E, + /* 1931-1940 */ + 0x0D4A51, 0x0EA546, 0x56D4BA, 0x05AD4E, 0x02B644, 0x393738, 0x092E4B, 0x7C96BF, 0x0C9553, 0x0D4A48, + /* 1941-1950 */ + 0x6DA53B, 0x0B554F, 0x056A45, 0x4AADB9, 0x025D4D, 0x092D42, 0x2C95B6, 0x0A954A, 0x7B4ABD, 0x06CA51, + /* 1951-1960 */ + 0x0B5546, 0x555ABB, 0x04DA4E, 0x0A5B43, 0x352BB8, 0x052B4C, 0x8A953F, 0x0E9552, 0x06AA48, 0x6AD53C, + /* 1961-1970 */ + 0x0AB54F, 0x04B645, 0x4A5739, 0x0A574D, 0x052642, 0x3E9335, 0x0D9549, 0x75AABE, 0x056A51, 0x096D46, + /* 1971-1980 */ + 0x54AEBB, 0x04AD4F, 0x0A4D43, 0x4D26B7, 0x0D254B, 0x8D52BF, 0x0B5452, 0x0B6A47, 0x696D3C, 0x095B50, + /* 1981-1990 */ + 0x049B45, 0x4A4BB9, 0x0A4B4D, 0xAB25C2, 0x06A554, 0x06D449, 0x6ADA3D, 0x0AB651, 0x095746, 0x5497BB, + /* 1991-2000 */ + 0x04974F, 0x064B44, 0x36A537, 0x0EA54A, 0x86B2BF, 0x05AC53, 0x0AB647, 0x5936BC, 0x092E50, 0x0C9645, + /* 2001-2010 */ + 0x4D4AB8, 0x0D4A4C, 0x0DA541, 0x25AAB6, 0x056A49, 0x7AADBD, 0x025D52, 0x092D47, 0x5C95BA, 0x0A954E, + /* 2011-2020 */ + 0x0B4A43, 0x4B5537, 0x0AD54A, 0x955ABF, 0x04BA53, 0x0A5B48, 0x652BBC, 0x052B50, 0x0A9345, 0x474AB9, + /* 2021-2030 */ + 0x06AA4C, 0x0AD541, 0x24DAB6, 0x04B64A, 0x6a573D, 0x0A4E51, 0x0D2646, 0x5E933A, 0x0D534D, 0x05AA43, + /* 2031-2040 */ + 0x36B537, 0x096D4B, 0xB4AEBF, 0x04AD53, 0x0A4D48, 0x6D25BC, 0x0D254F, 0x0D5244, 0x5DAA38, 0x0B5A4C, + /* 2041-2050 */ + 0x056D41, 0x24ADB6, 0x049B4A, 0x7A4BBE, 0x0A4B51, 0x0AA546, 0x5B52BA, 0x06D24E, 0x0ADA42, 0x355B37, + /* 2051-2060 */ + 0x09374B, 0x8497C1, 0x049753, 0x064B48, 0x66A53C, 0x0EA54F, 0x06AA44, 0x4AB638, 0x0AAE4C, 0x092E42, + /* 2061-2070 */ + 0x3C9735, 0x0C9649, 0x7D4ABD, 0x0D4A51, 0x0DA545, 0x55AABA, 0x056A4E, 0x0A6D43, 0x452EB7, 0x052D4B, + /* 2071-2080 */ + 0x8A95BF, 0x0A9553, 0x0B4A47, 0x6B553B, 0x0AD54F, 0x055A45, 0x4A5D38, 0x0A5B4C, 0x052B42, 0x3A93B6, + /* 2081-2090 */ + 0x069349, 0x7729BD, 0x06AA51, 0x0AD546, 0x54DABA, 0x04B64E, 0x0A5743, 0x452738, 0x0D264A, 0x8E933E, + /* 2091-2099 */ + 0x0D5252, 0x0DAA47, 0x66B53B, 0x056D4F, 0x04AE45, 0x4A4EB9, 0x0A4D4C, 0x0D1541, 0x2D92B5 }; + + /** + * 将农历日期转换为公历日期 + * + * @param year 农历年份 + * @param month 农历月 + * @param monthDay 农历日 + * @param isLeapMonth 该月是否是闰月(该参数可以根据本类中leapMonth()方法,先判断一下要查询的年份是否有闰月,并且闰的几月) + * @return 返回农历日期对应的公历日期,year0, month1, day2. + */ + public static final int[] lunarToSolar(int year, int month, int monthDay, boolean isLeapMonth) { + int dayOffset; + int leapMonth; + int i; + if (year < MIN_YEAR || year > MAX_YEAR || month < 1 || month > 12 || monthDay < 1 || monthDay > 30) { + throw new IllegalArgumentException("Illegal lunar date, must be like that:\n\t" + "year : 1900~2099\n\t" + + "month : 1~12\n\t" + "day : 1~30"); + } + dayOffset = (LUNAR_INFO[year - MIN_YEAR] & 0x001F) - 1; + if (((LUNAR_INFO[year - MIN_YEAR] & 0x0060) >> 5) == 2) { + dayOffset += 31; + } + for (i = 1; i < month; i++) { + if ((LUNAR_INFO[year - MIN_YEAR] & (0x80000 >> (i - 1))) == 0) { + dayOffset += 29; + } else { + dayOffset += 30; + } + } + dayOffset += monthDay; + leapMonth = (LUNAR_INFO[year - MIN_YEAR] & 0xf00000) >> 20; + // 这一年有闰月 + if (leapMonth != 0) { + if (month > leapMonth || (month == leapMonth && isLeapMonth)) { + if ((LUNAR_INFO[year - MIN_YEAR] & (0x80000 >> (month - 1))) == 0) { + dayOffset += 29; + } else { + dayOffset += 30; + } + } + } + if (dayOffset > 366 || (year % 4 != 0 && dayOffset > 365)) { + year += 1; + if (year % 4 == 1) { + dayOffset -= 366; + } else { + dayOffset -= 365; + } + } + int[] solarInfo = new int[3]; + for (i = 1; i < 13; i++) { + int iPos = DAYS_BEFORE_MONTH[i]; + if (year % 4 == 0 && i > 2) { + iPos += 1; + } + if (year % 4 == 0 && i == 2 && iPos + 1 == dayOffset) { + solarInfo[1] = i; + solarInfo[2] = dayOffset - 31; + break; + } + if (iPos >= dayOffset) { + solarInfo[1] = i; + iPos = DAYS_BEFORE_MONTH[i - 1]; + if (year % 4 == 0 && i > 2) { + iPos += 1; + } + if (dayOffset > iPos) { + solarInfo[2] = dayOffset - iPos; + } else if (dayOffset == iPos) { + if (year % 4 == 0 && i == 2) { + solarInfo[2] = DAYS_BEFORE_MONTH[i] - DAYS_BEFORE_MONTH[i - 1] + 1; + } else { + solarInfo[2] = DAYS_BEFORE_MONTH[i] - DAYS_BEFORE_MONTH[i - 1]; + } + } else { + solarInfo[2] = dayOffset; + } + break; + } + } + solarInfo[0] = year; + return solarInfo; + } + + /** + * 将公历日期转换为农历日期,且标识是否是闰月 (如果当年有闰月,被闰的阴历月份所对应的阳历日期计算出来不对,后期自己根据本方法leap3 + * 返回值判断如果为1,给月份+1,如果为0就是正确的,不用在操作,阴历闰月对应的阳历日期计算出来的阴历闰月日期正确,leap3为0) + * + * @param year + * @param month 传入需要为单数如 08 为8 + * @param monthDay + * @return 返回公历日期对应的农历日期,year0,month1,day2,leap3(0 为计算正常 1 月份会比正确少一个月,需要月份+1) + */ + public static final int[] solarToLunar(int year, int month, int monthDay) { + int[] lunarDate = new int[4]; + Date baseDate = new GregorianCalendar(1900, 0, 31).getTime(); + Date objDate = new GregorianCalendar(year, month - 1, monthDay).getTime(); + int offset = (int) ((objDate.getTime() - baseDate.getTime()) / 86400000L); + // 用offset减去每农历年的天数计算当天是农历第几天 + // iYear最终结果是农历的年份, offset是当年的第几天 + int iYear, daysOfYear = 0; + for (iYear = MIN_YEAR; iYear <= MAX_YEAR && offset > 0; iYear++) { + daysOfYear = daysInLunarYear(iYear); + offset -= daysOfYear; + } + if (offset < 0) { + offset += daysOfYear; + iYear--; + } + // 农历年份 + lunarDate[0] = iYear; + int leapMonth = leapMonth(iYear); + // 闰哪个月,1-12 + boolean isLeap = false; + // 用当年的天数offset,逐个减去每月(农历)的天数,求出当天是本月的第几天 + int iMonth, daysOfMonth = 0; + for (iMonth = 1; iMonth <= 13 && offset > 0; iMonth++) { + daysOfMonth = daysInLunarMonth(iYear, iMonth); + offset -= daysOfMonth; + } + // 当前月超过闰月,要校正 + if (leapMonth != 0 && iMonth > leapMonth) { + --iMonth; + if (iMonth == leapMonth) { + isLeap = true; + } + } + // offset小于0时,也要校正 + if (offset < 0) { + offset += daysOfMonth; + --iMonth; + } + lunarDate[1] = iMonth; + lunarDate[2] = offset + 1; + lunarDate[3] = isLeap ? 1 : 0; + return lunarDate; + } + + /** + * 传回农历year年month月的总天数 + * + * @param year 要计算的年份 + * @param month 要计算的月 + * @return 传回天数 + */ + final public static int daysInMonth(int year, int month) { + return daysInMonth(year, month, false); + } + + /** + * 传回农历year年month月的总天数 + * + * @param year 要计算的年份 + * @param month 要计算的月 + * @param leap 当月是否是闰月 + * @return 传回天数,如果闰月是错误的,返回0. + */ + public static final int daysInMonth(int year, int month, boolean leap) { + int leapMonth = leapMonth(year); + int offset = 0; + // 如果本年有闰月且month大于闰月时,需要校正 + if (leapMonth != 0 && month > leapMonth) { + offset = 1; + } + // 不考虑闰月 + if (!leap) { + return daysInLunarMonth(year, month + offset); + } else { + // 传入的闰月是正确的月份 + if (leapMonth != 0 && leapMonth == month) { + return daysInLunarMonth(year, month + 1); + } + } + return 0; + } + + /** + * 传回农历 year年的总天数 + * + * @param year 将要计算的年份 + * @return 返回传入年份的总天数 + */ + private static int daysInLunarYear(int year) { + int i, sum = 348; + if (leapMonth(year) != 0) { + sum = 377; + } + int monthInfo = LUNAR_INFO[year - MIN_YEAR] & 0x0FFF80; + for (i = 0x80000; i > 0x7; i >>= 1) { + if ((monthInfo & i) != 0) { + sum += 1; + } + } + return sum; + } + + /** + * 传回农历 year年month月的总天数,总共有13个月包括闰月 + * + * @param year 将要计算的年份 + * @param month 将要计算的月份 + * @return 传回农历 year年month月的总天数 + */ + private static int daysInLunarMonth(int year, int month) { + if ((LUNAR_INFO[year - MIN_YEAR] & (0x100000 >> month)) == 0) { + return 29; + } else { + return 30; + } + } + + /** + * 传回农历 year年闰哪个月 1-12 , 没闰传回 0 + * + * @param year 将要计算的年份 + * @return 传回农历 year年闰哪个月1-12, 没闰传回 0 + */ + public static int leapMonth(int year) { + return ((LUNAR_INFO[year - MIN_YEAR] & 0xF00000)) >> 20; + } + + public static void main(String[] args) { + // 计算录入年份是否有闰月 + System.out.println(leapMonth(2020)); + // 传回农历 year年month月的总天数,总共有13个月包括闰月 + System.out.println(daysInLunarMonth(2017, 6)); + // 传回农历year年month月的总天数 + System.out.println(daysInMonth(2017, 6, false)); + // 阳历转阴历 9.25 10.23 有问题 + System.out.println(Arrays.toString(solarToLunar(2020, 3, 2))); + // 阴历转阳历 + System.out.println(Arrays.toString(lunarToSolar(2020, 2, 9, true))); + } +} \ No newline at end of file diff --git a/src/main/java/lingtao/net/util/MD5Util.java b/src/main/java/lingtao/net/util/MD5Util.java new file mode 100644 index 0000000..0a72676 --- /dev/null +++ b/src/main/java/lingtao/net/util/MD5Util.java @@ -0,0 +1,19 @@ +package lingtao.net.util; + +import org.apache.shiro.crypto.hash.Md5Hash; + +public class MD5Util { + + /** + * md5加密 + * @param str + * @param salt + * @return + */ + public String md5(String str,String salt) { + return new Md5Hash(str,salt).toString(); + } + public static void main(String[] args) { + System.out.println(new MD5Util().md5("123456", "lingtao")); + } +} diff --git a/src/main/java/lingtao/net/util/NiuStickersPrice.java b/src/main/java/lingtao/net/util/NiuStickersPrice.java new file mode 100644 index 0000000..083c191 --- /dev/null +++ b/src/main/java/lingtao/net/util/NiuStickersPrice.java @@ -0,0 +1,116 @@ +package lingtao.net.util; + +import java.util.ArrayList; +import java.util.List; + +import lingtao.net.bean.Product; + +/** + * A级铜版纸不干胶价格 + */ +public class NiuStickersPrice { + + int bigCountArr[] = { 500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000, + 100000 }; + + /** + * 不干胶大数量遍历添加价格 + */ + private List bigSizeAcountPrice(int count, Double area, List list, Double[] priceArr) { + Product pro = new Product(); + if (count > bigCountArr[bigCountArr.length - 1]) { + pro.setCount(count); + pro.setPrice(Math.ceil(area * count * priceArr[bigCountArr.length - 1])); + list.add(pro); + } + for (int i = 0; i < bigCountArr.length; i++) { + if (bigCountArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(bigCountArr[i]); + pro.setPrice(Math.ceil(area * bigCountArr[i] * priceArr[i])); + list.add(pro); + } + return list; + } + + // 小尺寸 1万以上或 5万以上 + public List getPrice(int count, Double area) { + List list = new ArrayList(); + if (area > 0 && area <= 0.0004) { + Double priceArrA[] = { 300.0, 200.0, 137.5, 130.0, 125.0, 90.0, 69.0, 68.0, 58.0, 52.5, 50.0, 48.0, 46.0, + 44.0, 42.0, 40.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0004 && area <= 0.0006) { + Double priceArrA[] = { 200.0, 133.0, 92.0, 90.0, 87.0, 65.0, 60.0, 46.0, 39.0, 37.0, 40.0, 38.0, 36.0, 34.0, + 32.0, 30.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0006 && area <= 0.0008) { + Double priceArrA[] = { 150.0, 100.0, 81.0, 79.0, 70.0, 50.0, 46.0, 38.0, 30.0, 30.0, 38.0, 36.0, 34.0, 32.0, + 30.0, 29.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0008 && area <= 0.001) { + Double priceArrA[] = { 120.0, 80.0, 65.0, 63.0, 60.0, 39.0, 39.0, 30.0, 25.0, 24.0, 38.0, 36.0, 34.0, 32.0, + 30.0, 29.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.001 && area <= 0.0012) { + Double priceArrA[] = { 100.0, 67.0, 54.0, 53.0, 50.0, 43.0, 26.0, 21.0, 21.0, 20.0, 20.0, 19.0, 18.0, 18.0, + 18.0, 18.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0012 && area <= 0.0014) { + Double priceArrA[] = { 86.0, 57.0, 46.0, 45.0, 40.0, 30.0, 26.0, 21.0, 21.0, 20.0, 18.0, 17.0, 16.0, 16.0, + 16.0, 16.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0014 && area <= 0.0016) { + Double priceArrA[] = { 75.0, 50.0, 44.0, 40.0, 36.0, 28.0, 26.0, 21.0, 21.0, 20.0, 16.0, 16.0, 15.0, 14.0, + 14.0, 14.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0016 && area <= 0.0025) { + Double priceArrA[] = { 118.0, 71.0, 68.0, 51.0, 42.0, 30.0, 20.0, 16.0, 16.0, 16.0, 16.0, 16.0, 15.0, 14.0, + 14.0, 14.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0025 && area <= 0.0035) { + Double priceArrA[] = { 62.5, 38.0, 36.0, 30.0, 22.0, 22.0, 19.0, 19.0, 19.0, 18.0, 16.0, 16.0, 15.0, 14.0, + 14.0, 14.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0035 && area <= 0.0045) { + Double priceArrA[] = { 56.0, 34.0, 32.0, 26.0, 20.0, 19.0, 18.0, 18.0, 18.0, 17.0, 15.0, 14.0, 13.0, 13.0, + 13.0, 13.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0045 && area <= 0.0084) { + Double priceArrA[] = { 46.0, 32.0, 24.0, 20.0, 18.0, 17.0, 13.0, 13.0, 13.0, 12.0, 11.0, 10.0, 9.0, 8.0, + 8.0, 8.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0084 && area <= 0.012) { + Double priceArrA[] = { 42.0, 26.0, 23.0, 18.0, 18.0, 17.0, 13.0, 13.0, 13.0, 12.0, 10.5, 10.0, 9.3, 7.5, + 8.0, 8.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.012 && area <= 0.015) { + Double priceArrA[] = { 40.0, 25.0, 22.0, 17.0, 17.0, 16.0, 10.0, 9.0, 8.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, + 7.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.015 && area <= 0.02) { + Double priceArrA[] = { 35.0, 24.0, 21.0, 17.0, 16.0, 15.0, 10.0, 9.0, 8.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, + 7.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.02 && area <= 0.06) { + Double priceArr[] = { 32.0, 23.0, 21.0, 16.5, 15.0, 14.0, 9.5, 9.5, 8.5, 8.5, 8.5, 8.0, 8.0, 7.5, 7.5, 7.5 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } else if (area > 0.06 && area <= 0.1) { + Double priceArr[] = { 30.0, 22.0, 19.0, 15.0, 14.0, 13.0, 8.5, 8.5, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 7.5 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } else if (area > 0.1 && area <= 0.2) { + Double priceArr[] = { 29.0, 20.0, 18.0, 14.0, 13.0, 12.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } else if (area > 0.2 && area <= 0.3) { + Double priceArr[] = { 23.0, 18.0, 16.0, 12.0, 10.0, 7.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } else if (area > 0.3) { + Double priceArr[] = { 20.0, 15.0, 14.0, 11.0, 8.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } + return list; + } + +} diff --git a/src/main/java/lingtao/net/util/PVCStickersPrice.java b/src/main/java/lingtao/net/util/PVCStickersPrice.java new file mode 100644 index 0000000..67c69db --- /dev/null +++ b/src/main/java/lingtao/net/util/PVCStickersPrice.java @@ -0,0 +1,212 @@ +package lingtao.net.util; + +import java.util.ArrayList; +import java.util.List; + +import lingtao.net.bean.Product; + +/** + * PVC/透明不干胶价格 + */ +public class PVCStickersPrice { + + int bigCountArr[] = { 500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000, + 100000 }; + + /** + * 透明不干胶加印白墨 + */ + public List acountYinbaiPrice(Double length, Double width, List stickersList) { + double price = 0; + if (length <= 5 && width <= 5) { + for (Product product : stickersList) { + if (product.getCount() == 500 || product.getCount() == 1000) { + price = 50; + } else if (product.getCount() == 2000) { + price = 75; + } else if (product.getCount() == 3000) { + price = 90; + } else if (product.getCount() == 5000) { + price = 100; + } else if (product.getCount() == 10000 || product.getCount() == 20000) { + price = 150; + } else if (product.getCount() == 30000) { + price = 200; + } else if (product.getCount() == 40000) { + price = 260; + } else if (product.getCount() == 50000 || product.getCount() == 60000) { + price = 300; + } else if (product.getCount() == 70000) { + price = 400; + } else if (product.getCount() == 80000) { + price = 500; + } else if (product.getCount() == 90000) { + price = 600; + } else if (product.getCount() == 100000) { + price = 700; + } + product.setPrice(product.getPrice() + price); + } + } else if ((length <= 9 && width <= 5.4) || (length <= 5.4 && width <= 9)) { + for (Product product : stickersList) { + if (product.getCount() == 500 || product.getCount() == 1000) { + price = 50; + } else if (product.getCount() == 2000) { + price = 90; + } else if (product.getCount() == 3000) { + price = 100; + } else if (product.getCount() == 5000) { + price = 120; + } else if (product.getCount() == 10000) { + price = 150; + } else if (product.getCount() == 20000) { + price = 220; + } else if (product.getCount() == 30000) { + price = 400; + } else if (product.getCount() == 40000) { + price = 500; + } else if (product.getCount() == 50000) { + price = 700; + } else if (product.getCount() == 60000) { + price = 900; + } else if (product.getCount() == 70000) { + price = 1000; + } else if (product.getCount() == 80000) { + price = 1200; + } else if (product.getCount() == 90000) { + price = 1300; + } else if (product.getCount() == 100000) { + price = 1500; + } + product.setPrice(product.getPrice() + price); + } + } else { + for (Product product : stickersList) { + // 产品面积(平方米) + double area = product.getCount() * length * width / 10000; + if (area <= 10) { + area = 10; + price = 11; + } else if (area <= 20) { + area = 20; + price = 6; + } else if (area <= 30) { + area = 30; + price = 4.5; + } else if (area <= 50) { + area = 50; + price = 3.5; + } else { + price = 3; + } + product.setPrice(product.getPrice() + (price * area > 50 ? price * area : 50)); + } + } + return stickersList; + } + + /** + * PVC不干胶大数量遍历添加价格 + */ + private List bigSizeAcountPrice(int count, Double area, List list, Double[] priceArr) { + Product pro = new Product(); + if (count > bigCountArr[bigCountArr.length - 1]) { + pro.setCount(count); + pro.setPrice(Math.ceil(area * count * priceArr[bigCountArr.length - 1])); + list.add(pro); + } + for (int i = 0; i < bigCountArr.length; i++) { + if (bigCountArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(bigCountArr[i]); + pro.setPrice(Math.ceil(area * bigCountArr[i] * priceArr[i])); + list.add(pro); + } + return list; + } + + // 小尺寸 1万以上 + public List getPrice(int count, Double area) { + List list = new ArrayList(); + if (area <= 0.0004) { + Double priceArrA[] = { 450.0, 300.0, 238.0, 184.0, 175.0, 158.0, 87.0, 70.0, 65.0, 59.0, 52.0, 48.0, 45.0, + 42.0, 39.0, 36.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area <= 0.0006) { + Double priceArrA[] = { 300.0, 200.0, 158.0, 122.0, 117.0, 85.0, 60.0, 50.0, 45.0, 40.0, 38.0, 37.0, 36.0, + 35.0, 33.0, 32.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area <= 0.0008) { + Double priceArrA[] = { 260.0, 171.0, 135.0, 105.0, 100.0, 73.0, 51.0, 45.0, 39.0, 33.0, 32.0, 31.0, 30.0, + 29.0, 28.0, 27.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area <= 0.001) { + Double priceArrA[] = { 200.0, 133.0, 105.0, 82.0, 78.0, 56.0, 42.0, 33.0, 28.0, 27.0, 26.0, 25.0, 24.0, + 23.0, 22.0, 21.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area <= 0.0012) { + Double priceArrA[] = { 150.0, 92.0, 75.0, 62.0, 55.0, 48.0, 35.0, 29.0, 24.0, 23.0, 22.0, 21.0, 20.0, 19.0, + 18.0, 17.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area <= 0.0014) { + Double priceArrA[] = { 138.0, 85.0, 70.0, 62.0, 54.0, 43.0, 31.0, 26.0, 22.0, 21.0, 20.0, 19.0, 18.0, 17.0, + 16.0, 15.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area <= 0.0016) { + Double priceArrA[] = { 120.0, 80.0, 67.0, 54.0, 51.0, 43.0, 29.0, 23.0, 19.0, 19.0, 19.0, 18.0, 17.0, 16.0, + 15.0, 15.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area <= 0.0025) { + Double priceArrA[] = { 118.0, 76.0, 68.0, 51.0, 48.0, 39.0, 20.0, 19.0, 18.0, 17.0, 16.0, 15.0, 14.0, 13.0, + 13.0, 13.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area <= 0.0035) { + Double priceArrA[] = { 62.5, 60.0, 63.0, 47.0, 46.0, 38.0, 18.0, 18.0, 18.0, 16.0, 16.0, 15.0, 14.0, 13.0, + 12.0, 12.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area <= 0.0045) { + Double priceArrA[] = { 84.0, 50.0, 44.0, 33.0, 25.0, 19.0, 15.0, 14.0, 14.0, 14.0, 13.0, 13.0, 12.0, 12.0, + 12.0, 12.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area <= 0.0084) { + Double priceArrA[] = { 56.0, 35.0, 29.0, 26.0, 19.0, 16.0, 15.0, 14.0, 14.0, 13.0, 12.0, 12.0, 12.0, 12.0, + 12.0, 12.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area <= 0.012) { + Double priceArrA[] = { 42.0, 26.0, 23.0, 18.0, 14.0, 12.0, 14.0, 13.0, 13.0, 12.0, 11.0, 11.0, 11.0, 11.0, + 11.0, 11.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area <= 0.015) { + Double priceArrA[] = { 36.0, 25.0, 22.0, 17.0, 15.0, 13.0, 13.0, 12.0, 12.0, 11.0, 11.0, 11.0, 11.0, 11.0, + 11.0, 11.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area <= 0.02) { + Double priceArrA[] = { 35.0, 24.0, 21.0, 17.0, 15.0, 13.0, 13.0, 12.0, 12.0, 11.0, 11.0, 11.0, 11.0, 11.0, + 11.0, 11.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area <= 0.06) { + Double priceArr[] = { 32.0, 23.0, 21.0, 17.0, 15.0, 13.0, 13.0, 12.0, 12.0, 11.0, 11.0, 11.0, 11.0, 11.0, + 11.0, 11.0 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } else if (area <= 0.1) { + Double priceArr[] = { 30.0, 20.0, 15.0, 13.0, 13.0, 13.0, 13.0, 12.0, 12.0, 11.0, 11.0, 11.0, 11.0, 11.0, + 11.0, 11.0 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } else if (area <= 0.2) { + Double priceArr[] = { 17.0, 14.0, 13.0, 12.0, 12.0, 12.0, 12.0, 11.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, + 10.0, 10.0 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } /*else if (area <= 0.3) { + Double priceArr[] = { 15.0, 13.0, 12.0, 12.0, 11.0, 11.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, + 10.0, 10.0 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + }*/ else{ + Double priceArr[] = { 15.0, 13.0, 12.0, 12.0, 11.0, 11.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, + 10.0, 10.0 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } + return list; + } +} diff --git a/src/main/java/lingtao/net/util/PVCYaMoStickersPrice.java b/src/main/java/lingtao/net/util/PVCYaMoStickersPrice.java new file mode 100644 index 0000000..5182ed6 --- /dev/null +++ b/src/main/java/lingtao/net/util/PVCYaMoStickersPrice.java @@ -0,0 +1,120 @@ +package lingtao.net.util; + +import java.util.ArrayList; +import java.util.List; + +import lingtao.net.bean.Product; + +/** + * PVC/透明哑膜不干胶价格 + */ +public class PVCYaMoStickersPrice { + + int bigCountArr[] = { 500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000, + 100000 }; + + /** + * PVC不干胶大数量遍历添加价格 + */ + private List bigSizeAcountPrice(int count, Double area, List list, Double[] priceArr) { + Product pro = new Product(); + if (count > bigCountArr[bigCountArr.length - 1]) { + pro.setCount(count); + pro.setPrice(Math.ceil(area * count * priceArr[bigCountArr.length - 1])); + list.add(pro); + } + for (int i = 0; i < bigCountArr.length; i++) { + if (bigCountArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(bigCountArr[i]); + pro.setPrice(Math.ceil(area * bigCountArr[i] * priceArr[i])); + list.add(pro); + } + return list; + } + + // 小尺寸 1万以上 + public List getPrice(int count, Double area) { + List list = new ArrayList(); + if (area > 0 && area <= 0.0004) { + Double priceArrA[] = { 500.0, 400.0, 220.0, 180.0, 150.0, 120.0, 80.0, 72.0, 67.0, 61.0, 53.0, 49.0, 46.0, + 43.0, 40.0, 37.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0004 && area <= 0.0006) { + Double priceArrA[] = { 360.0, 243.0, 144.0, 126.0, 108.0, 81.0, 59.0, 50.0, 41.0, 37.0, 35.0, 34.0, 33.0, + 32.0, 31.0, 30.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0006 && area <= 0.0008) { + Double priceArrA[] = { 266.0, 168.0, 98.0, 84.0, 74.0, 56.0, 42.0, 35.0, 28.0, 24.0, 23.0, 22.0, 22.0, + 21.0, 20.0, 20.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0008 && area <= 0.001) { + Double priceArrA[] = { 231.0, 133.0, 84.0, 70.0, 63.0, 49.0, 35.0, 25.0, 21.0, 20.0, 19.0, 18.0, 17.0, + 17.0, 15.0, 15.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.001 && area <= 0.0012) { + Double priceArrA[] = { 130.0, 125.0, 45.0, 40.0, 35.0, 27.0, 20.0, 15.0, 12.0, 12.0, 11.0, 11.0, 10.0, 10.0, + 9.0, 9.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0012 && area <= 0.0014) { + Double priceArrA[] = { 125.0, 70.0, 42.0, 37.0, 32.0, 26.0, 19.0, 13.0, 11.0, 11.0, 10.0, 10.0, 9.0, 9.0, + 8.0, 8.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0014 && area <= 0.0016) { + Double priceArrA[] = { 110.0, 62.0, 35.0, 32.0, 30.0, 23.0, 17.0, 12.0, 10.0, 10.0, 10.0, 9.0, 9.0, 8.0, + 8.0, 8.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0016 && area <= 0.0025) { + Double priceArrA[] = { 100.0, 55.0, 34.0, 30.0, 27.0, 21.0, 13.0, 11.0, 8.0, 8.0, 7.0, 7.0, 7.0, 7.0, + 7.0, 7.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0025 && area <= 0.0035) { + Double priceArrA[] = { 75.0, 51.0, 30.0, 24.0, 20.0, 16.0, 12.0, 8.0, 8.0, 8.0, 8.0, 8.0, 8.0, 7.0, + 7.0, 7.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0035 && area <= 0.0045) { + Double priceArrA[] = { 75.0, 47.0, 27.0, 22.0, 19.0, 15.0, 9.0, 7.0, 7.0, 7.0, 6.0, 6.0, 6.0, 6.0, + 6.0, 6.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0045 && area <= 0.0084) { + Double priceArrA[] = { 75.0, 40.0, 24.0, 18.0, 15.0, 12.0, 8.0, 7.0, 7.0, 6.0, 6.0, 6.0, 6.0, 6.0, + 6.0, 6.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0084 && area <= 0.012) { + Double priceArrA[] = { 55.0, 32.0, 20.0, 15.0, 12.0, 11.0, 8.0, 7.0, 7.0, 7.0, 6.0, 6.0, 6.0, 6.0, + 6.0, 6.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.012 && area <= 0.015) { + Double priceArrA[] = { 17.0, 10.0, 8.0, 7.0, 7.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, + 6.0, 6.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.015 && area <= 0.02) { + Double priceArrA[] = { 15.0, 9.0, 7.0, 7.0, 7.0, 7.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, + 6.0, 6.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.02 && area <= 0.04) { + Double priceArr[] = { 13.0, 8.0, 7.0, 7.0, 7.0, 7.0, 7.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, + 6.0, 6.0 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } else if (area > 0.02 && area <= 0.06) { + Double priceArr[] = { 12.0, 8.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, + 6.0, 6.0 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } else if (area > 0.06 && area <= 0.1) { + Double priceArr[] = { 12.0, 7.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, + 6.0, 6.0 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } else if (area > 0.1 && area <= 0.2) { + Double priceArr[] = { 11.0, 7.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, + 5.0, 5.0 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } else { + Double priceArr[] = { 8.0, 7.0, 6.0, 6.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, + 5.0, 5.0 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } + return list; + } +} diff --git a/src/main/java/lingtao/net/util/PaperCupPrice.java b/src/main/java/lingtao/net/util/PaperCupPrice.java new file mode 100644 index 0000000..7b34f36 --- /dev/null +++ b/src/main/java/lingtao/net/util/PaperCupPrice.java @@ -0,0 +1,24 @@ +package lingtao.net.util; + +import java.util.List; + +import lingtao.net.bean.Product; + +public class PaperCupPrice { + public List getPrice(int count, List list) { + int[] countArr = {1000, 2000, 3000, 5000, 10000, 20000, 30000, 50000}; + for(int i = 0;i 4) { + continue; + } + Product pro = new Product(); + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(countArr[i] * 0.108); + list.add(pro); + } + + + return list; + } +} diff --git a/src/main/java/lingtao/net/util/PictureAlbumPrice.java b/src/main/java/lingtao/net/util/PictureAlbumPrice.java new file mode 100644 index 0000000..96612dd --- /dev/null +++ b/src/main/java/lingtao/net/util/PictureAlbumPrice.java @@ -0,0 +1,303 @@ +package lingtao.net.util; + +import java.util.ArrayList; +import java.util.List; + +import lingtao.net.bean.Product; + +/** + * 画册价格 + */ +public class PictureAlbumPrice { + + int countArr[] = { 500, 1000, 2000, 3000, 5000, 10000, }; + + /** + * 不干胶大数量遍历添加价格 + */ + private List acountPrice(int count, List list, double[] priceArr) { + Product pro = new Product(); + if (count > countArr[countArr.length - 1]) { + pro.setCount(count); + pro.setPrice(Math.ceil(count * priceArr[countArr.length - 1] / countArr[countArr.length - 1])); + list.add(pro); + } + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(priceArr[i]); + list.add(pro); + } + return list; + } + + /** + * + * @param count + * @param pcount 内页P数(含封面4P) + * @return + */ + public List getPrice00(int count, int pcount) { + List list = new ArrayList(); + if (8 == pcount) { + double priceArr[] = { 403, 551, 864, 1206, 1998, 3873 }; + list = acountPrice(count, list, priceArr); + } else if (12 == pcount) { + double priceArr[] = { 490, 673, 1082, 1523, 2505, 4827 }; + list = acountPrice(count, list, priceArr); + } else if (16 == pcount) { + double priceArr[] = { 579, 794, 1311, 1839, 3012, 5783 }; + list = acountPrice(count, list, priceArr); + } else if (20 == pcount) { + double priceArr[] = { 665, 917, 1542, 2156, 3519, 6737 }; + list = acountPrice(count, list, priceArr); + } else if (24 == pcount) { + double priceArr[] = { 752, 1053, 1772, 2472, 4026, 7691 }; + list = acountPrice(count, list, priceArr); + } else if (28 == pcount) { + double priceArr[] = { 842, 1188, 2001, 2787, 4533, 8648 }; + list = acountPrice(count, list, priceArr); + } else if (32 == pcount) { + double priceArr[] = { 929, 1323, 2232, 3104, 5040, 9602 }; + list = acountPrice(count, list, priceArr); + } else if (36 == pcount) { + double priceArr[] = { 1016, 1460, 2462, 3419, 5549, 10556 }; + list = acountPrice(count, list, priceArr); + } else if (40 == pcount) { + double priceArr[] = { 1106, 1596, 2691, 3735, 6056, 11510 }; + list = acountPrice(count, list, priceArr); + } else if (44 == pcount) { + double priceArr[] = { 1200, 1724, 2922, 4053, 6563, 12464 }; + list = acountPrice(count, list, priceArr); + } else if (48 == pcount) { + double priceArr[] = { 1295, 1866, 3152, 4368, 7070, 13419 }; + list = acountPrice(count, list, priceArr); + } else if (52 == pcount) { + double priceArr[] = { 1391, 2005, 3383, 4685, 7577, 14373 }; + list = acountPrice(count, list, priceArr); + } + return list; + } + + public List getPrice01(int count, int pcount) { + List list = new ArrayList(); + if (8 == pcount) { + double priceArr[] = { 436, 589, 927, 1296, 2135, 4146 }; + list = acountPrice(count, list, priceArr); + } else if (12 == pcount) { + double priceArr[] = { 558, 747, 1209, 1701, 2778, 5376 }; + list = acountPrice(count, list, priceArr); + } else if (16 == pcount) { + double priceArr[] = { 678, 906, 1505, 2103, 2420, 6605 }; + list = acountPrice(count, list, priceArr); + } else if (20 == pcount) { + double priceArr[] = { 802, 1066, 1799, 2508, 4064, 7832 }; + list = acountPrice(count, list, priceArr); + } else if (24 == pcount) { + double priceArr[] = { 922, 1239, 2094, 2913, 4707, 9062 }; + list = acountPrice(count, list, priceArr); + } else if (28 == pcount) { + double priceArr[] = { 1043, 1412, 2390, 3318, 5351, 10290 }; + list = acountPrice(count, list, priceArr); + } else if (32 == pcount) { + double priceArr[] = { 1165, 1586, 2684, 3722, 5994, 11517 }; + list = acountPrice(count, list, priceArr); + } else if (36 == pcount) { + double priceArr[] = { 1285, 1761, 2979, 4127, 6636, 12746 }; + list = acountPrice(count, list, priceArr); + } else if (40 == pcount) { + double priceArr[] = { 1409, 1932, 3273, 4532, 7280, 13976 }; + list = acountPrice(count, list, priceArr); + } else if (44 == pcount) { + double priceArr[] = { 1538, 2105, 3567, 4937, 7923, 15203 }; + list = acountPrice(count, list, priceArr); + } else if (48 == pcount) { + double priceArr[] = { 1665, 2279, 3861, 5340, 8567, 16431 }; + list = acountPrice(count, list, priceArr); + } else if (52 == pcount) { + double priceArr[] = { 1663, 2454, 4157, 5745, 9209, 17661 }; + list = acountPrice(count, list, priceArr); + } + return list; + } + + public List getPrice02(int count, int pcount) { + List list = new ArrayList(); + if (8 == pcount) { + double priceArr[] = { 455, 635, 975, 1382, 2274, 4409 }; + list = acountPrice(count, list, priceArr); + } else if (12 == pcount) { + double priceArr[] = { 597, 842, 1302, 1874, 3056, 5900 }; + list = acountPrice(count, list, priceArr); + } else if (16 == pcount) { + double priceArr[] = { 741, 1048, 1643, 2364, 3839, 7389 }; + list = acountPrice(count, list, priceArr); + } else if (20 == pcount) { + double priceArr[] = { 883, 1254, 1982, 2856, 4622, 8880 }; + list = acountPrice(count, list, priceArr); + } else if (24 == pcount) { + double priceArr[] = { 1026, 1473, 2324, 3348, 5403, 10371 }; + list = acountPrice(count, list, priceArr); + } else if (28 == pcount) { + double priceArr[] = { 1167, 1695, 2664, 3839, 6188, 11861 }; + list = acountPrice(count, list, priceArr); + } else if (32 == pcount) { + double priceArr[] = { 1308, 1912, 3005, 4329, 6971, 13352 }; + list = acountPrice(count, list, priceArr); + } else if (36 == pcount) { + double priceArr[] = { 1452, 2133, 3347, 4821, 7752, 14841 }; + list = acountPrice(count, list, priceArr); + } + return list; + } + + /** + * ========285*210=========== + */ + + public List getPrice10(int count, int pcount) { + List list = new ArrayList(); + if (8 == pcount) { + double priceArr[] = { 726, 1104, 1551, 2243, 3656, 7062 }; + list = acountPrice(count, list, priceArr); + } else if (12 == pcount) { + double priceArr[] = { 904, 1385, 1953, 2849, 4605, 8841 }; + list = acountPrice(count, list, priceArr); + } else if (16 == pcount) { + double priceArr[] = { 1084, 1666, 2373, 3453, 5555, 10622 }; + list = acountPrice(count, list, priceArr); + } else if (20 == pcount) { + double priceArr[] = { 1263, 1949, 2795, 4059, 6504, 12402 }; + list = acountPrice(count, list, priceArr); + } else if (24 == pcount) { + double priceArr[] = { 1443, 2252, 3215, 4664, 7454, 14181 }; + list = acountPrice(count, list, priceArr); + } else if (28 == pcount) { + double priceArr[] = { 1621, 2557, 3635, 5270, 8402, 15960 }; + list = acountPrice(count, list, priceArr); + } else if (32 == pcount) { + double priceArr[] = { 1800, 2860, 4055, 5874, 9351, 17741 }; + list = acountPrice(count, list, priceArr); + } else if (36 == pcount) { + double priceArr[] = { 2078, 2984, 4604, 6363, 10301, 19521 }; + list = acountPrice(count, list, priceArr); + } else if (40 == pcount) { + double priceArr[] = { 2271, 3301, 5037, 6956, 11250, 21299 }; + list = acountPrice(count, list, priceArr); + } else if (44 == pcount) { + double priceArr[] = { 2472, 3586, 5472, 7548, 12200, 23078 }; + list = acountPrice(count, list, priceArr); + } else if (48 == pcount) { + double priceArr[] = { 2675, 3868, 5906, 8144, 13149, 24858 }; + list = acountPrice(count, list, priceArr); + } else if (52 == pcount) { + double priceArr[] = { 2875, 4153, 5341, 8736, 14099, 26639 }; + list = acountPrice(count, list, priceArr); + } + return list; + } + + public List getPrice11(int count, int pcount) { + List list = new ArrayList(); + if (8 == pcount) { + double priceArr[] = { 723, 1076, 1665, 2372, 3929, 7610 }; + list = acountPrice(count, list, priceArr); + } else if (12 == pcount) { + double priceArr[] = { 947, 1404, 2180, 3107, 5150, 9938 }; + list = acountPrice(count, list, priceArr); + } else if (16 == pcount) { + double priceArr[] = { 1173, 1734, 2714, 3842, 6371, 12264 }; + list = acountPrice(count, list, priceArr); + } else if (20 == pcount) { + double priceArr[] = { 1398, 2063, 3248, 4575, 7592, 14592 }; + list = acountPrice(count, list, priceArr); + } else if (24 == pcount) { + double priceArr[] = { 1624, 2412, 3782, 5175, 8814, 16919 }; + list = acountPrice(count, list, priceArr); + } else if (28 == pcount) { + double priceArr[] = { 1848, 2760, 4316, 6044, 10035, 19247 }; + list = acountPrice(count, list, priceArr); + } else if (32 == pcount) { + double priceArr[] = { 2074, 3110, 4848, 6779, 11256, 21575 }; + list = acountPrice(count, list, priceArr); + } else if (36 == pcount) { + double priceArr[] = { 2429, 3345, 5639, 7778, 12479, 23901 }; + list = acountPrice(count, list, priceArr); + } else if (40 == pcount) { + double priceArr[] = { 2673, 3676, 6203, 8549, 13700, 26229 }; + list = acountPrice(count, list, priceArr); + } else if (44 == pcount) { + double priceArr[] = { 2922, 4010, 6765, 9318, 14921, 28557 }; + list = acountPrice(count, list, priceArr); + } else if (48 == pcount) { + double priceArr[] = { 3171, 4340, 7328, 10089, 16143, 30884 }; + list = acountPrice(count, list, priceArr); + } else if (52 == pcount) { + double priceArr[] = { 3422, 4673, 7892, 10859, 17364, 33212 }; + list = acountPrice(count, list, priceArr); + } + return list; + } + + public List getPrice12(int count, int pcount) { + List list = new ArrayList(); + if (8 == pcount) { + double priceArr[] = { 723, 1092, 1718, 2489, 4206, 8135 }; + list = acountPrice(count, list, priceArr); + } else if (12 == pcount) { + double priceArr[] = { 947, 1439, 2288, 3339, 5706, 10986 }; + list = acountPrice(count, list, priceArr); + } else if (16 == pcount) { + double priceArr[] = { 1173, 1785, 2874, 4191, 7206, 13838 }; + list = acountPrice(count, list, priceArr); + } else if (20 == pcount) { + double priceArr[] = { 1398, 2132, 3462, 5042, 8708, 16689 }; + list = acountPrice(count, list, priceArr); + } else if (24 == pcount) { + double priceArr[] = { 1624, 2498, 4049, 5892, 10209, 19539 }; + list = acountPrice(count, list, priceArr); + } else if (28 == pcount) { + double priceArr[] = { 1848, 2864, 4637, 6744, 11709, 22391 }; + list = acountPrice(count, list, priceArr); + } else if (32 == pcount) { + double priceArr[] = { 2074, 3231, 5223, 7595, 13209, 25242 }; + list = acountPrice(count, list, priceArr); + } else if (36 == pcount) { + double priceArr[] = { 2757, 4092, 6372, 9165, 14709, 28094 }; + list = acountPrice(count, list, priceArr); + } + return list; + } + + /* ===============少数量相册================ */ + /** + * + * @param count + * @param pcount 内页P数(含封面4P) + * @return + */ + public List getLessPrice(int count, int pcount) { + List list = new ArrayList(); + Product pro = new Product(); + double price = 0; + if (count <= 10) { + price = pcount * count * 2; + } else if (count <= 50) { + price = pcount * count * 1.5; + } else if (count <= 100) { + price = pcount * count * 1; + } else { + price = pcount * count * 0.8; + } + price += count * 4; + ; + pro.setCount(count); + pro.setPrice(Math.ceil(price = price > 120 ? price : 120)); + list.add(pro); + return list; + } + +} diff --git a/src/main/java/lingtao/net/util/PosterPrice.java b/src/main/java/lingtao/net/util/PosterPrice.java new file mode 100644 index 0000000..89cc7e7 --- /dev/null +++ b/src/main/java/lingtao/net/util/PosterPrice.java @@ -0,0 +1,754 @@ +package lingtao.net.util; + +import lingtao.net.bean.Product; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.List; + +/** + * 海报价格 + */ +public class PosterPrice { + + /** + * 裱板 + * + * @param kind2 + * @param area + * @param count + * @param number + * @return + */ + public List acountPrice00(String kind2, Double area, int count, Integer number) { + double danjia = 0.0; + // 最低收费 + double price = 0.0; + String weight = "0"; + DecimalFormat DecimalFormat = new DecimalFormat("#.#####"); + switch (kind2) { + // 室内写真裱冷板 + case "0": + // 根据面积得到单价 + if (area > 0 && area <= 5) { + danjia = 64; + } else if (area > 5 && area <= 10) { + danjia = 60; + } else { + danjia = 52; + } + price = area * danjia > 72 ? area * danjia : 72; + + break; + // 室内写真对裱冷板 + case "1": + // 根据面积得到单价 + if (area > 0 && area <= 5) { + danjia = 90; + } else if (area > 5 && area <= 10) { + danjia = 85; + } else { + danjia = 80; + } + price = area * danjia > 95 ? area * danjia : 95; + break; + // 室内写真裱冷板装小C边 + case "3": + // 根据面积得到单价 + if (area > 0 && area <= 5) { + danjia = 85; + } else if (area > 5 && area <= 10) { + danjia = 80; + } else { + danjia = 75; + } + price = area * danjia > 90 ? area * danjia : 90; + break; + // 户外写真裱冷板 + case "6": + // 根据面积得到单价 + if (area > 0 && area <= 5) { + danjia = 85; + } else if (area > 5 && area <= 10) { + danjia = 80; + } else { + danjia = 75; + } + price = area * danjia > 90 ? area * danjia : 90; + break; + // 户外写真对裱冷板 + case "7": + // 根据面积得到单价 + if (area > 0 && area <= 5) { + danjia = 95; + } else if (area > 5 && area <= 10) { + danjia = 90; + } else { + danjia = 85; + } + price = area * danjia > 90 ? area * danjia : 90; + break; + // 户外写真裱冷板装小C边 + case "8": + // 根据面积得到单价 + if (area > 0 && area <= 5) { + danjia = 100; + } else if (area > 5 && area <= 10) { + danjia = 95; + } else { + danjia = 90; + } + price = area * danjia > 90 ? area * danjia : 90; + break; + // 背胶单裱3mmPVC(户内高清) + case "12": + // 根据面积得到单价 + if (area > 0 && area <= 5) { + danjia = 105; + } else if (area > 5 && area <= 10) { + danjia = 100; + } else { + danjia = 95; + } + price = area * danjia > 105 ? area * danjia : 105; + break; + } + Product pro = new Product(); + List list = new ArrayList(); + weight = String.valueOf(DecimalFormat.format(area * 0.2 * number)); + pro.setWeight(weight); + pro.setCount(count); + // 价格 = 面积 * 单价 + (款数-1) * 40 + pro.setPrice(Math.ceil(price * number)); + list.add(pro); + return list; + } + + /** + * 室内写真 + * + * @param kind2 + * @param area + * @param count + * @param number + * @return + */ + public List acountPrice01(String kind2, Double area, int count, Integer number) { + // 最低收费 + double price = 0.0; + // 单价 + double danjia = 0.0; + String weight = "0"; + DecimalFormat DecimalFormat = new DecimalFormat("#.#####"); + switch (kind2) { + // 高精室内写真 + case "2": + // 根据面积得到单价 + if (area > 0 && area <= 2) { + danjia = 50; + } else if (area > 2 && area <= 5) { + danjia = 45; + } else if (area > 5 && area <= 10) { + danjia = 32; + } else if (area > 10 && area <= 20) { + danjia = 28; + } else if (area > 20 && area <= 50) { + danjia = 25; + } else { + danjia = 23; + } + price = area * danjia > 50 ? area * danjia : 50; + break; + // pp纸(室内) + case "3": + // 根据面积得到单价 + if (area > 0 && area <= 2) { + danjia = 62; + } else if (area > 2 && area <= 5) { + danjia = 45; + } else if (area > 5 && area <= 10) { + danjia = 35; + } else { + danjia = 28; + } + price = area * danjia > 70 ? area * danjia : 70; + weight = String.valueOf(DecimalFormat.format(area * 0.113 * number)); + break; + // 直喷PVC + case "5": + // 根据面积得到单价 + if (area > 0 && area <= 2) { + danjia = 70; + } else if (area > 2 && area <= 5) { + danjia = 55; + } else if (area > 5 && area <= 10) { + danjia = 45; + } else { + danjia = 40; + } + price = area * danjia > 100 ? area * danjia : 100; + weight = String.valueOf(DecimalFormat.format(area * 0.113 * number)); + break; + // 高精室内相纸 + case "6": + // 根据面积得到单价 + if (area > 0 && area <= 2) { + danjia = 70; + } else if (area > 2 && area <= 5) { + danjia = 60; + } else if (area > 5 && area <= 10) { + danjia = 45; + } else { + danjia = 40; + } + price = area * danjia > 90 ? area * danjia : 90; + break; + // 单透 + case "7": + // 根据面积得到单价 + if (area > 0 && area <= 2) { + danjia = 75; + } else if (area > 2 && area <= 5) { + danjia = 65; + } else if (area > 5 && area <= 10) { + danjia = 55; + } else { + danjia = 45; + } + price = area * danjia > 100 ? area * danjia : 100; + break; + // 静电贴 + case "8": + // 根据面积得到单价 + if (area > 0 && area <= 2) { + danjia = 80; + } else if (area > 2 && area <= 5) { + danjia = 70; + } else if (area > 5 && area <= 10) { + danjia = 60; + } else { + danjia = 45; + } + price = area * danjia > 105 ? area * danjia : 105; + break; + // 软膜 + case "14": + // 根据面积得到单价 + if (area > 0 && area <= 5) { + danjia = 70; + } else if (area > 5 && area <= 10) { + danjia = 65; + } else { + danjia = 60; + } + price = area * danjia > 100 ? area * danjia : 100; + weight = String.valueOf(DecimalFormat.format(area * 0.113 * number)); + break; + // 地贴(复防滑膜) + case "15": + // 根据面积得到单价 + if (area > 0 && area <= 5) { + danjia = 75; + } else if (area > 5 && area <= 10) { + danjia = 65; + } else { + danjia = 55; + } + price = area * danjia > 100 ? area * danjia : 100; + weight = String.valueOf(DecimalFormat.format(area * 0.113 * number)); + break; + // UV高透车贴(含白墨) + case "16": + // 根据面积得到单价 + if (area > 0 && area <= 5) { + danjia = 160; + } else if (area > 5 && area <= 10) { + danjia = 150; + } else { + danjia = 140; + } + price = area * danjia > 160 ? area * danjia : 160; + break; + // UV高透车贴(不含白墨) + case "17": + // 根据面积得到单价 + if (area > 0 && area <= 5) { + danjia = 150; + } else if (area > 5 && area <= 10) { + danjia = 140; + } else { + danjia = 130; + } + price = area * danjia > 160 ? area * danjia : 160; + break; + // 高透贴 + case "18": + // 根据面积得到单价 + if (area > 0 && area <= 5) { + danjia = 110; + } else if (area > 5 && area <= 10) { + danjia = 100; + } else { + danjia = 90; + } + price = area * danjia > 130 ? area * danjia : 130; + break; + // 防撞条腰线UV透明喷膜(含白墨) + case "19": + // 根据面积得到单价 + if (area > 0 && area <= 5) { + danjia = 130; + } else if (area > 5 && area <= 10) { + danjia = 130; + } else { + danjia = 110; + } + price = area * danjia > 80 ? area * danjia : 80; + break; + // 防撞条腰线UV磨砂贴(含白墨) + case "20": + // 根据面积得到单价 + if (area > 0 && area <= 5) { + danjia = 140; + } else if (area > 5 && area <= 10) { + danjia = 130; + } else { + danjia = 120; + } + price = area * danjia > 80 ? area * danjia : 80; + break; + // 防撞条腰线粗哑膜磨砂贴(不含白墨) + case "21": + // 根据面积得到单价 + if (area > 0 && area <= 5) { + danjia = 115; + } else if (area > 5 && area <= 10) { + danjia = 105; + } else { + danjia = 100; + } + price = area * danjia > 80 ? area * danjia : 80; + break; + // 防撞条腰线磨砂镂空(粗哑膜刻字) + case "22": + // 根据面积得到单价 + if (area > 0 && area <= 5) { + danjia = 150; + } else if (area > 5 && area <= 10) { + danjia = 140; + } else { + danjia = 130; + } + price = area * danjia > 100 ? area * danjia : 100; + break; + // 防撞条腰线即时贴刻字 + case "23": + // 根据面积得到单价 + if (area > 0 && area <= 5) { + danjia = 120; + } else if (area > 5 && area <= 10) { + danjia = 110; + } else { + danjia = 100; + } + price = area * danjia > 70 ? area * danjia : 70; + break; + case "24": + price = area * 380 > 380 ? area * 380 : 380; + break; + } + + Product pro = new Product(); + List list = new ArrayList(); + pro.setCount(count); + // 价格 = 面积 * 单价 + (款数-1) * 40 + if (number > 1) { + pro.setPrice(Math.ceil(price * number)); + } else { + pro.setPrice(Math.ceil(price)); + } + pro.setWeight(weight); + list.add(pro); + return list; + } + + /** + * 户外写真 + * + * @param kind2 + * @param area + * @param count + * @param number + * @return + */ + public List acountPrice02(String kind2, Double area, int count, Integer number) { + double price = 0.0; + double danjia = 0.0; + String weight = "0"; + DecimalFormat DecimalFormat = new DecimalFormat("#.#####"); + switch (kind2) { + // 户外写真白胶(国产) + case "0": + // 根据面积得到单价 + if (area <= 2) { + danjia = 55; + } else if (area <= 5) { + danjia = 45; + } else if (area <= 7) { + danjia = 40; + } else if (area <= 8) { + danjia = 37; + } else if (area <= 10) { + danjia = 31; + } else if (area <= 20) { + danjia = 29; + } else if (area <= 50) { + danjia = 27; + } else { + danjia = 26; + } + price = area * danjia > 50 ? area * danjia : 50; + weight = String.valueOf(DecimalFormat.format(area * 0.24 * number)); + break; + // 户外写真黑胶(国产) + case "1": + // 根据面积得到单价 + if (area > 0 && area <= 2) { + danjia = 56; + } else if (area > 2 && area <= 5) { + danjia = 45; + } else if (area > 5 && area <= 10) { + danjia = 36; + } else { + danjia = 30; + } + price = area * danjia > 50 ? area * danjia : 50; + weight = String.valueOf(DecimalFormat.format(area * 0.25 * number)); + break; + // 户外写真可移白胶、黑胶 + case "2": + // 根据面积得到单价 + if (area > 0 && area <= 2) { + danjia = 60; + } else if (area > 2 && area <= 5) { + danjia = 55; + } else if (area > 5 && area <= 10) { + danjia = 50; + } else { + danjia = 35; + } + price = area * danjia > 85 ? area * danjia : 85; + weight = String.valueOf(DecimalFormat.format(area * 0.14 * number)); + break; + // 户外写真喷膜 + case "3": + // 根据面积得到单价 + if (area > 0 && area <= 2) { + danjia = 65; + } else if (area > 2 && area <= 5) { + danjia = 50; + } else if (area > 5 && area <= 10) { + danjia = 45; + } else { + danjia = 35; + } + price = area * danjia > 80 ? area * danjia : 80; + break; + // 户外写真灯片 + case "5": + // 根据面积得到单价 + if (area > 0 && area <= 2) { + danjia = 68; + } else if (area > 2 && area <= 5) { + danjia = 50; + } else if (area > 5 && area <= 10) { + danjia = 40; + } else { + danjia = 30; + } + price = area * danjia > 90 ? area * danjia : 90; + break; + // 车贴(白胶) + case "6": + // 根据面积得到单价 + if (area > 0 && area <= 2) { + danjia = 50; + } else if (area > 2 && area <= 5) { + danjia = 40; + } else if (area > 5 && area <= 10) { + danjia = 30; + } else { + danjia = 25; + } + price = area * danjia > 80 ? area * danjia : 80; + weight = String.valueOf(DecimalFormat.format(area * 0.24 * number)); + break; + } + + Product pro = new Product(); + List list = new ArrayList(); + pro.setCount(count); + // 价格 = 面积 * 单价 + (款数-1) * 40 + pro.setPrice(Math.ceil(price * number)); + pro.setWeight(weight); + list.add(pro); + return list; + } + + /** + * 布 + * + * @param kind2 + * @param area + * @param length + * @param width + * @param count + * @param number + * @param craftBu + * @return + */ + public List acountPrice03(String kind2, Double length, Double width, Double area, int count, + Integer number, String craftBu) { + double price = 0.0; + double danjia = 0.0; + switch (kind2) { + // 550灯布 + case "1": + // 根据面积得到单价 + if (area > 0 && area <= 5) { + danjia = 30; + } else if (area > 5 && area <= 10) { + danjia = 28; + } else { + danjia = 25; + } + price = area * danjia > 60 ? area * danjia : 60; + break; + // 黑底布 + case "2": + // 根据面积得到单价 + if (area > 0 && area <= 5) { + danjia = 40; + } else if (area > 5 && area <= 10) { + danjia = 34; + } else { + danjia = 30; + } + price = area * danjia > 70 ? area * danjia : 70; + break; + + // 写真布 + case "6": + // 根据面积得到单价 + if (area > 0 && area <= 2) { + danjia = 30; + } else if (area > 2 && area <= 5) { + danjia = 28; + } else if (area > 5 && area <= 10) { + danjia = 25; + } else { + danjia = 23; + } + price = area * danjia > 50 ? area * danjia : 50; + break; + // 双喷布 + case "7": + Product pro = new Product(); + List list = new ArrayList(); + double minSize = Math.min(length, width); + double maxSize = Math.max(length, width); + area = length * width * count * number; + /*if (count == 1) { + if (minSize < 1.52) { + minSize = 1.52; + area = maxSize * minSize * count * number; + } + }*/ + + // 根据宽得到单价 + if (minSize <= 1.52) { + danjia = 50; + } else { + danjia = 65; + } + price = area * danjia > 50 ? area * danjia : 50; + + // 挂轴 每米12元 + if ("挂轴".equals(craftBu)) { + price = price + (maxSize * 12 > 12 ? maxSize * 12 : 12); + } + + pro.setCount(count); + // 价格 = 面积 * 单价 + 款数 * 20 + pro.setPrice(Math.ceil(price + number * 20)); + list.add(pro); + return list; + // 油画布 + case "8": + // 根据面积得到单价 + if (area > 0 && area <= 2) { + danjia = 80; + } else if (area > 2 && area <= 5) { + danjia = 75; + } else if (area > 5 && area <= 10) { + danjia = 60; + } else { + danjia = 35; + } + price = area * danjia > 130 ? area * danjia : 130; + break; + // 墙纸 + case "9": + // 根据面积得到单价 + if (area > 0 && area <= 2) { + danjia = 70; + } else if (area > 2 && area <= 5) { + danjia = 60; + } else if (area > 5 && area <= 10) { + danjia = 50; + } else { + danjia = 35; + } + price = area * danjia > 105 ? area * danjia : 105; + break; + // 旗帜布 + case "10": + // 根据面积得到单价 + if ("双喷".equals(craftBu)) { + if ((width == 50 && length == 300 || length == 50 && width == 300) && count == 1) { + price = 53; + } else if (area <= 1) { + price = 53; + } else if (area <= 2) { + price = 43 * area; + } else if (area <= 3) { + price = 38 * area; + } else if (area <= 4) { + price = 33 * area; + } else if (area <= 5) { + price = 31 * area; + } else if (area <= 10) { + price = 28 * area; + } else { + price = 25 * area; + } + } else { + if ((width == 50 && length == 300) && (length == 50 && width == 300) && count == 1) { + price = 50; + } else if (area <= 1) { + price = 50; + } else if (area <= 2) { + price = 40 * area; + } else if (area <= 3) { + price = 35 * area; + } else if (area <= 4) { + price = 33 * area; + } else if (area <= 5) { + price = 28 * area; + } else if (area <= 10) { + price = 25 * area; + } else { + price = 23 * area; + } + } + + /*if (area > 0 && area <= 3) { + danjia = 20; + } else if (area > 3 && area <= 5) { + danjia = 19; + } else if (area > 5 && area <= 10) { + danjia = 18; + } else { + danjia = 17; + } + if(area < 1.5) { + price = area * danjia + (count * 10) > 35 ? area * danjia + (count * 10) : 35; + }else { + price = area * danjia * count > 35 ? area * danjia * count : 35; + }*/ + + break; + } + Product pro = new Product(); + List list = new ArrayList(); + pro.setCount(count); + pro.setPrice(Math.ceil(price * number)); + list.add(pro); + return list; + } + + /** + * 展架 + * + * @param kind2 + * @param count + * @param number + * @return + */ + public List acountPrice04(String kind2, int count, Integer number) { + double price = 0.0; + String weight = "0"; + DecimalFormat DecimalFormat = new DecimalFormat("#.#####"); + switch (kind2) { + // 直喷PVC装美式展架180*80 + case "0": + price = 120; + break; + // 直喷PVC装美式展架160*60 + case "1": + price = 115; + break; + // PP纸装美式展架180*80 + case "2": + price = 115; + break; + // PP纸装美式展架160*60 + case "3": + price = 110; + break; + // 直喷PVC装门型展架180*80 + case "4": + price = 158; + break; + // PP纸装门型展架180*80 + case "6": + price = 140; + break; + // PP纸装门型展架160*60 + case "7": + price = 135; + break; + // X展架180*80(不含画面) + case "8": + price = 55; + break; + // X展架160*60(不含画面) + case "9": + price = 50; + break; + // 门型展架180*80(不含画面) + case "10": + price = 75; + break; + // 门型展架160*60(不含画面) + case "11": + price = 70; + break; + // 直喷pvc铝合金易拉宝 + case "12": + price = 108; + break; + // 直喷pvc塑钢易拉宝 + case "13": + price = 118; + break; + } + Product pro = new Product(); + List list = new ArrayList(); + pro.setCount(count); + // 价格 = 个数 * 款数 * 单价 ===================+ (款数-1) * 40 + pro.setPrice(Math.ceil(count * number * price));// + (number - 1) * 40 + list.add(pro); + return list; + } +} diff --git a/src/main/java/lingtao/net/util/PriceUtils.java b/src/main/java/lingtao/net/util/PriceUtils.java new file mode 100644 index 0000000..3470cf1 --- /dev/null +++ b/src/main/java/lingtao/net/util/PriceUtils.java @@ -0,0 +1,3324 @@ +package lingtao.net.util; + +import lingtao.net.bean.Product; +import org.springframework.util.StringUtils; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class PriceUtils { + + DecimalFormat df = new DecimalFormat("0.00"); + + int countArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000}; + + /** + * 卷标标签价格 + * + * @param kind + * @param area + * @param count + * @param craft + * @param yinbai + * @return + */ + public List rollLabelPrice(String kind, Double area, int count, String[] craft, String yinbai) { + List list = new ArrayList(); + Product pro = new Product(); + // 最低收费 + double lowerPrice = 0.0; + // 印工价格 + double yinrPrice = 0.0; + // 平方单价 + double danjia = 0.0; + // 总价 + double price = 0.0; + // 根据报的尺寸、数量算面积(保留2位小数) + area = Double.valueOf(df.format(area * count)); + if (area <= 20) { + yinrPrice = 260; + lowerPrice = 550; + } else if (area <= 150) { + yinrPrice = 300; + lowerPrice = 600; + } + + switch (kind) { + /** + * 0:格底铜版纸卷标 1:格底PP合成纸 2:8丝光白PVC 3:5丝格底透明 4:格底哑金/哑银 5:格底银平光 6:单防热敏纸(底纸白色) + * 7:三防热敏纸(底纸蓝色) + */ + case "0": + // 根据面积得到单价 + if (area <= 20) { + danjia = 8; + } else if (area <= 150) { + danjia = 8; + } else if (area <= 200) { + danjia = 10.5; + } else { + danjia = 10.3; + } + break; + case "1": + // 根据面积得到单价 + if (area <= 20) { + danjia = 10; + } else if (area <= 150) { + danjia = 10; + } else if (area <= 200) { + danjia = 12.5; + } else { + danjia = 12.3; + } + break; + case "2": + // 根据面积得到单价 + if (area <= 20) { + danjia = 10; + } else if (area <= 150) { + danjia = 10; + } else if (area <= 200) { + danjia = 12.5; + } else { + danjia = 12.3; + } + break; + case "3": + // 根据面积得到单价 + if (area <= 20) { + danjia = 10; + } else if (area <= 150) { + danjia = 10; + } else if (area <= 200) { + danjia = 12.5; + } else { + danjia = 12.3; + } + break; + case "4": + // 根据面积得到单价 + if (area <= 20) { + danjia = 12; + } else if (area <= 150) { + danjia = 12; + } else if (area <= 200) { + danjia = 15; + } else { + danjia = 14.8; + } + break; + case "5": + // 根据面积得到单价 + if (area <= 20) { + danjia = 12; + } else if (area <= 150) { + danjia = 12; + } else if (area <= 200) { + danjia = 15; + } else { + danjia = 14.8; + } + break; + case "6": + // 根据面积得到单价 + if (area <= 20) { + danjia = 9; + } else if (area <= 150) { + danjia = 9; + } else if (area <= 200) { + danjia = 11; + } else { + danjia = 10.8; + } + break; + case "7": + // 根据面积得到单价 + if (area <= 20) { + danjia = 9.5; + } else if (area <= 150) { + danjia = 9.5; + } else if (area <= 200) { + danjia = 11.5; + } else { + danjia = 11.3; + } + break; + } + // 加上覆膜的价格 (覆哑膜/亮膜 0.6元/平方, 镭射膜1元/平方) + if (!StringUtils.isEmpty(craft)) { + if ("大雪花镭射膜".equals(craft[0])) { + danjia = danjia + 1; + } else { + danjia = danjia + 0.6; + } + } + price = Math + .ceil(area * danjia + yinrPrice + count * 0.01 > lowerPrice ? area * danjia + yinrPrice + count * 0.01 + : lowerPrice); + // 如果有印白工艺:2元一平方,最低收费200元 + if (!StringUtils.isEmpty(yinbai)) { + price = price + (area * 2 > 200 ? area * 2 : 200); + } + pro.setCount(count); + pro.setPrice(price); + list.add(pro); + + /* + * for (int i = 0; i < countArr.length; i++) { if (countArr[i] < count) { + * continue; } if (countArr[i] * area <= 150) { danjia = 15; } else if + * (countArr[i] * area <= 200) { danjia = 14.5; } else { danjia = 14; } if + * (!StringUtils.isEmpty(craft)) { if (!"大雪花镭射膜".equals(craft[0])) { danjia = + * danjia + 1; } else { danjia = danjia + 0.6; } } pro = new Product(); + * pro.setCount(countArr[i]); pro.setPrice(Math.ceil(countArr[i] * area * danjia + * > 550 ? countArr[i] * area * danjia : 550)); list.add(pro); } + */ + + return list; + } + + /** + * 合版封套自定义尺寸 + * + * @param kind + * @param count + * @param min + * @param priceArr + * @return + */ + public List getEnvelope(String kind, int count, int min, int[] priceArr) { + int countArr[] = {200, 500, 1000, 2000, 5000, 10000}; + List list = new ArrayList(); + Product pro = new Product(); + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count || list.size() > 3) { + continue; + } + + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(Math.ceil(min * priceArr[i] + 80 + 0.05 * countArr[i] + 30 + 0.06 * countArr[i])); + + list.add(pro); + } + return list; + } + + /** + * 房卡套特殊尺寸 + * + * @param count + * @param min + * @return + */ + public List getRoomCard(int count, int min) { + int countArr[] = {200, 500, 1000, 2000, 5000, 10000}; + int priceArr[] = {40, 50, 70, 90, 160, 300}; + List list = new ArrayList(); + Product pro = new Product(); + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + + pro = new Product(); + pro.setCount(countArr[i]); + + pro.setPrice(Math.ceil(min * priceArr[i] + 0.05 * countArr[i] + 60 + 30 + 0.06 * countArr[i])); + list.add(pro); + } + return list; + } + + /** + * 打印不干胶带纯烫金价格 + * + * @param kind + * @param addPrice + * @param yinbai + */ + public Product getA(String kind, Double width, Double length, int count, double price, double addPrice, + Integer number, String craftTang, String yinbai) { + //List list = new ArrayList(); + + if ("印白墨".equals(yinbai)) { + price = 50; + addPrice = 30; + } else if ("黑白".equals(yinbai)) { + price = 40; + } + + double l = 425; + double w = 285; + if ("0".equals(kind) || "4".equals(kind)) { + l = 430; + w = 290; + } + // 哑金不干胶 + if ("5".equals(kind)) { + l = 390; + w = 270; + } + Product pro = new Product(); + // 数量*款数就是张数 + count = count * number; + // 换成毫米每边+2 + length = length * 10 + 4; + width = width * 10 + 4; + if ((length > l || width > w) && (length > w || width > l)) + return null; + // 一张大纸能做多少个此类尺寸的不干胶 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + + // 报的数量需要多少张大纸 + int num = (int) Math.ceil(count / max); + price = price + (num - 1) * addPrice; + + if ("纯烫金".equals(craftTang) || "彩色印刷+烫金/银".equals(craftTang)) { + // 一张纸张价格+大纸张数*addPrice + 每张烫金+20块(1张起收)(5*5cm内30元一张) + if (width < 54 && length < 54) { + price += num * 60; + } else { + price += num * 40; + } + } + + if ("彩色印刷+烫金/银".equals(craftTang)) { + price = price > 80 ? price : 80; + } +// if ("印白墨".equals(yinbai)) { +// // 透明不干胶,印白墨工艺,每张大纸+20(1张起收) +// price = price + num * 20; +// } + +// if(number > 1) { +// price = price + (number - 1) * 15; +// } + pro.setCount(count / number); + pro.setPrice(Math.ceil(price)); + + return pro; + } + + /** + * 哑银不干胶价格 + * + * @param kind + * @param addPrice + * @param yinbai + */ + public List getYy(String kind, Double width, Double length, int count, double price, double addPrice, + Integer number, String craftTang, String yinbai) { + List list = new ArrayList(); + double l = 420; + double w = 285; + // 换成毫米每边+2 + length = length * 10 + 4; + width = width * 10 + 4; + if ((length > l || width > w) && (length > w || width > l)) + return null; + // 一张大纸能做多少个此类尺寸的不干胶 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + + if ("印白墨".equals(yinbai)) { + price = 50; + addPrice = 30; + } + + Product pro = new Product(); + // 数量*款数就是张数 + count = countArr[i] * number; + + // 报的数量需要多少张大纸 + int num = (int) Math.ceil(count / max); + if ("纯烫金".equals(craftTang)) { + // 一张纸张价格+大纸张数*addPrice + 每张烫金+20块(1张起收)(5*5cm内30元一张) + if (width < 54 && length < 54) { + price = price + (num - 1) * addPrice + num * 30; + } else { + price = price + (num - 1) * addPrice + num * 20; + } + } else if ("彩色印刷+烫金/银".equals(craftTang)) { + if (width <= 154 && length <= 154) { + price = price + (count * 0.15 + 200 > 200 ? count * 0.15 + 200 : 200); + } else if (width > 154 || length > 154) { + price = price + (count * 0.13 + 180 > 210 ? count * 0.13 + 180 : 210); + } + } else { + price = price + (num - 1) * addPrice; + } + if (number > 1) { + price = price + (number - 1) * 5; + } +// if ("印白墨".equals(yinbai)) { +// // 透明不干胶,印白墨工艺,每张大纸+20(1张起收) +// price = price + num * 20; +// } + pro.setCount(count / number); + /*if (length == 14.0 && width == 14.0) { + price = price * 2; + }*/ + pro.setPrice(Math.ceil(price)); + list.add(pro); + } + + return list; + } + + // 不干胶常规数量美纹纸价格计算 + public List getMeiWenZhiPrice(Double length, Double width, int count, Integer number, String craftMo) { + double l = 420; + double w = 285; + Product pro = new Product(); + List list = new ArrayList(); + // 成本价 元/张 + double danjia = 1.8; + if ("模切".equals(craftMo)) { + danjia = 2.2; + } + // 换成毫米每边+2 + length = length * 10 + 4; + width = width * 10 + 4; + if ((length > l || width > w) && (length > w || width > l)) + return null; + // 一张大纸能做多少个此类尺寸的不干胶 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count || list.size() > 3) { + continue; + } + pro = new Product(); + // 报的数量需要多少张大纸 + int num = (int) Math.ceil(countArr[i] / max); + pro.setCount(countArr[i]); + pro.setPrice(Math.ceil(num * danjia * 2.5 > 83 ? num * danjia * 2.5 : 83)); + list.add(pro); + } + + /*if(number > 1) { + for (Product product : list) { + product.setPrice(Math.ceil(product.getPrice() * number)); + } + }*/ + + return list; + } + + /** + * 插卡遍历添加价格 + */ + private List acountInsertCardPrice(int count, List list, Double[] priceArr) { + int countArr[] = {200, 500, 1000, 2000, 3000, 5000, 10000}; + Product pro; + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(priceArr[i]); + list.add(pro); + } + return list; + } + + /** + * 菱形单面直角插排 + */ + public List getInsertCard(String size, int count) { + List list = new ArrayList<>(); + + if ("4.5*4.5".equals(size)) { + Double priceArr[] = {40.0, 50.0, 80.0, 120.0, 160.0, 270.0, 480.0}; + list = acountInsertCardPrice(count, list, priceArr); + } else if ("5*5".equals(size)) { + Double priceArr[] = {50.0, 60.0, 80.0, 130.0, 140.0, 300.0, 520.0}; + list = acountInsertCardPrice(count, list, priceArr); + } else { + Double priceArr[] = {40.0, 50.0, 70.0, 110.0, 160.0, 260.0, 480.0}; + list = acountInsertCardPrice(count, list, priceArr); + } + return list; + } + + // 9*5.4cm(一个名片位)以内价格 + public List oneCradPrice(int count) { + List list = new ArrayList(); + Product pro = new Product(); + int countArr[] = {1000, 2000, 5000, 10000, 20000}; + int priceArr[] = {70, 110, 250, 500, 900}; + if (count <= 20000) { + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count || list.size() > 3) { + continue; + } + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(Math.ceil(priceArr[i])); + list.add(pro); + } + } else { + pro = new Product(); + pro.setCount(count); + pro.setPrice(Math.ceil(count * 0.045)); + list.add(pro); + } + return list; + } + + /** + * 普通吊牌/服装吊牌 300/350克直角打孔吊牌价格 + * + * @param dto + * @param width + * @param length + * @param count + * @param priceList + * @return + */ + public List tags300PriceCraftZhi(Product dto, Double width, Double length, int count, + List priceList) { + double l1; + double w1; + double l2; + double w2; + int min; + l1 = Math.ceil(length / 9); + w1 = Math.ceil(width / 5.4); + l2 = Math.ceil(width / 9); + w2 = Math.ceil(length / 5.4); + // 产品位数 + min = (int) Math.min(l1 * w1, l2 * w2); + + if (min == 1) { + double priceArr[] = {43, 52, 70, 110, 186, 242, 250, 500}; + priceList = new PriceUtils().acountTags300PriceCraftZhi(count, priceArr); + } else if (min == 2) { + double priceArr[] = {48, 70, 75, 110, 180, 230, 270, 520}; + priceList = new PriceUtils().acountTags300PriceCraftZhi(count, priceArr); + } else if (min == 3) { + double priceArr[] = {68, 93, 155, 276, 369, 484, 578, 1111}; + priceList = new PriceUtils().acountTags300PriceCraftZhi(count, priceArr); + } else if (min == 4) { + double priceArr[] = {80, 100, 186, 333, 496, 617, 736, 1417}; + priceList = new PriceUtils().acountTags300PriceCraftZhi(count, priceArr); + } + if (min > 1) { + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * 0.98)); + } + } + if ("不覆膜".equals(dto.getCraftMo())) { + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * 0.98)); + } + } + + // 300克的模切材质才有第二尺寸 + // 第二尺寸不为空 + if (!StringUtils.isEmpty(dto.getSize1())) { + String size1 = dto.getSize1(); + Double length1 = null; + Double width1 = null; + List priceListSecond = new ArrayList(); + length1 = Double.valueOf(size1.substring(0, size1.indexOf("*"))); + if (size1.indexOf(("*"), size1.indexOf("*") + 1) == -1) { + width1 = Double.valueOf(size1.substring(size1.indexOf("*") + 1)); + } else { + width1 = Double + .valueOf(size1.substring(size1.indexOf("*") + 1, size1.indexOf(("*"), size1.indexOf("*") + 1))); + } + length1 = Math.abs(length1); + width1 = Math.abs(width1); + + l1 = Math.ceil(length1 / 9); + w1 = Math.ceil(width1 / 5.4); + l2 = Math.ceil(width1 / 9); + w2 = Math.ceil(length1 / 5.4); + // 产品位数 + min = (int) Math.min(l1 * w1, l2 * w2); + + if (min == 1) { + double priceArr[] = {43, 52, 72, 128, 186, 242, 276, 526}; + priceListSecond = new PriceUtils().acountTags300PriceCraftZhi(count, priceArr); + } else if (min == 2) { + double priceArr[] = {48, 78, 110, 202, 283, 351, 419, 805}; + priceListSecond = new PriceUtils().acountTags300PriceCraftZhi(count, priceArr); + } else if (min == 3) { + double priceArr[] = {68, 93, 155, 276, 369, 484, 578, 1111}; + priceListSecond = new PriceUtils().acountTags300PriceCraftZhi(count, priceArr); + } else if (min == 4) { + double priceArr[] = {80, 100, 186, 333, 496, 617, 736, 1417}; + priceListSecond = new PriceUtils().acountTags300PriceCraftZhi(count, priceArr); + } + + if (min > 1) { + for (Product product : priceListSecond) { + product.setPrice(Math.floor(product.getPrice() * 0.98)); + } + } + + if ("不覆膜".equals(dto.getCraftMo())) { + for (Product product : priceListSecond) { + product.setPrice(Math.floor(product.getPrice() * 0.98)); + } + } + + // 如果俩个价格一样,后一位价格+10 + for (int i = 0; i < priceListSecond.size() - 1; i++) { + if (priceListSecond.get(i).getPrice().equals(priceListSecond.get(i + 1).getPrice())) { + priceListSecond.get(i + 1).setPrice(priceListSecond.get(i + 1).getPrice() + 10); + } + } + + // 俩个尺寸的价格相加 再*0.96 + for (int i = 0; i < priceList.size(); i++) { + priceList.get(i).setPrice((priceList.get(i).getPrice() + priceListSecond.get(i).getPrice()) * 0.95); + } + } + return priceList; + } + + /** + * 吊牌300克直角打孔价格计算 + */ + public List acountTags300PriceCraftZhi(int count, double[] priceArr) { + int countArr[] = {200, 500, 1000, 2000, 3000, 4000, 5000, 10000}; + List list = new ArrayList<>(); + Product pro = new Product(); + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count || list.size() > 3) { + continue; + } + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(priceArr[i]); + list.add(pro); + } + return list; + } + + /** + * 其他吊牌300克 异形模切价格 + * + * @param dto + * @param number + * @param width + * @param length + * @param area + * @param count + * @param priceList + * @return + */ + public List tags300PriceCraftMo(Product dto, Integer number, Double width, Double length, Double area, + int count, List priceList) { + if (((length <= 9 && width <= 5.4) || (length <= 5.4 && width <= 9))) { + length = 9.0; + width = 5.4; + area = length * width / 10000; + } + + List priceList2 = new ArrayList(); + // 有工艺(覆膜) + if ("双面覆哑膜".equals(dto.getCraftMo())) { + double priceArr[] = {27, 18, 15, 14, 14, 14}; + priceList = new PriceUtils().acountTags300PriceCraftMo(area, count, number, priceArr); + priceList2 = new PriceUtils().acountTags300PriceCraftMo(0.00486, count, number, priceArr); + } else if ("不覆膜".equals(dto.getCraftMo())) { + double priceArr[] = {26, 17, 14, 13, 13, 13}; + priceList = new PriceUtils().acountTags300PriceCraftMo(area, count, number, priceArr); + priceList2 = new PriceUtils().acountTags300PriceCraftMo(0.00486, count, number, priceArr); + } + // 自定义尺寸和固定尺寸对比价格。 + for (int i = 0; i < priceList.size(); i++) { + for (int j = 0; j < priceList2.size(); j++) { + if (priceList.get(j).getPrice() < priceList2.get(j).getPrice()) { + priceList.get(j).setPrice(priceList2.get(j).getPrice() + 5); + } + } + } + + // 第二尺寸不为空 + if (!StringUtils.isEmpty(dto.getSize1())) { + String size1 = dto.getSize1(); + Double length1 = null; + Double width1 = null; + Double area1 = null; + List priceListSecond = new ArrayList(); + length1 = Double.valueOf(size1.substring(0, size1.indexOf("*"))); + if (size1.indexOf(("*"), size1.indexOf("*") + 1) == -1) { + width1 = Double.valueOf(size1.substring(size1.indexOf("*") + 1)); + } else { + width1 = Double + .valueOf(size1.substring(size1.indexOf("*") + 1, size1.indexOf(("*"), size1.indexOf("*") + 1))); + } + length1 = Math.abs(length1); + width1 = Math.abs(width1); + if (((length1 <= 9 && width1 <= 5.4) || (length1 <= 5.4 && width1 <= 9))) { + length1 = 9.0; + width1 = 5.4; + area1 = length1 * width1 / 10000; + } + List priceList3 = new ArrayList(); + // 有工艺(覆膜) + if ("双面覆哑膜".equals(dto.getCraftMo())) { + double priceArr[] = {27, 18, 15, 14, 14, 14}; + priceListSecond = new PriceUtils().acountTags300PriceCraftMo(area1, count, number, priceArr); + priceList3 = new PriceUtils().acountTags300PriceCraftMo(0.00486, count, number, priceArr); + } else if ("不覆膜".equals(dto.getCraftMo())) { + double priceArr[] = {26, 17, 14, 13, 13, 13}; + priceListSecond = new PriceUtils().acountTags300PriceCraftMo(area1, count, number, priceArr); + priceList3 = new PriceUtils().acountTags300PriceCraftMo(0.00486, count, number, priceArr); + } + // 自定义尺寸和固定尺寸对比价格。 + for (int i = 0; i < priceListSecond.size(); i++) { + for (int j = 0; j < priceList3.size(); j++) { + if (priceListSecond.get(j).getPrice() < priceList3.get(j).getPrice()) { + priceListSecond.get(j).setPrice(priceList3.get(j).getPrice() + 5); + } + } + } + + // 俩个尺寸的价格相加 再*0.96 + for (int i = 0; i < priceList.size(); i++) { + priceList.get(i).setPrice((priceList.get(i).getPrice() + priceListSecond.get(i).getPrice()) * 0.95); + } + } + return priceList; + } + + /** + * 其他吊牌300克异形模切价格计算===》 不复膜的 计算方法:长*宽*数量500张*22+每款设计费7元+绳子10元 + * + * @param area + * @param count + * @param number + * @param priceArr + * @return + */ + public List acountTags300PriceCraftMo(Double area, int count, Integer number, double[] priceArr) { + int countArr[] = {500, 1000, 2000, 3000, 5000, 10000}; + // 数量大于1万,单独报价; + List list = new ArrayList<>(); + Product pro = new Product(); + // 设计费 7元/款 + double designFee = 7; + // 绳子 1分5一条 + double shengzi = 0.015; + if (count > 10000) { + pro.setCount(count); + pro.setPrice(Math.ceil(area * count * priceArr[priceArr.length - 1] + designFee + count * shengzi)); + list.add(pro); + } else { + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count || list.size() > 3) { + continue; + } + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(Math.ceil(area * countArr[i] * priceArr[i] + designFee + countArr[i] * shengzi)); + list.add(pro); + } + } + return list; + } + + /** + * 服装吊牌 300克异形模切价格 + * + * @param dto + * @param number + * @param width + * @param length + * @param area + * @param count + * @param priceList + * @return + */ + public List tagClothes300PriceCraftMo(Product dto, Integer number, Double width, Double length, Double area, int count, List priceList) { + if (((length <= 9 && width <= 5.4) || (length <= 5.4 && width <= 9))) { + priceList = new PriceUtils().oneCradPrice(count); + if ("不覆膜".equals(dto.getCraftMo())) { + for (Product product : priceList) { + product.setPrice(Math.floor(product.getPrice() * 0.98)); + } + } + } else { + // 有工艺(覆膜) + if ("双面覆哑膜".equals(dto.getCraftMo())) { + double priceArr[] = {18, 15, 14, 14}; + // double priceArr[] = { 13, 12, 11.5, 10 }; + priceList = new PriceUtils().acountTagClothes300PriceCraftMo(area, count, number, priceArr); + } else if ("不覆膜".equals(dto.getCraftMo())) { + double priceArr[] = {17, 14, 13, 13}; + // double priceArr[] = { 12, 11, 10.5, 9 }; + priceList = new PriceUtils().acountTagClothes300PriceCraftMo(area, count, number, priceArr); + } + + // 对比固定价格 + /*List priceList2 = new PriceUtils().oneCradPrice(count); + if ("不覆膜".equals(dto.getCraftMo())) { + for (Product product : priceList2) { + product.setPrice(Math.floor(product.getPrice() * 0.98)); + } + }*/ + /*for (int i = 0; i < priceList.size(); i++) { + for (int j = 0; j < priceList2.size(); j++) { + if (priceList.get(j).getPrice() < priceList2.get(j).getPrice()) { + priceList.get(j).setPrice(priceList2.get(j).getPrice() + 10); + } + } + }*/ + // 末尾变成0 + /*for (Product product : priceList) { + product.setPrice(product.getPrice() - product.getPrice() % 10); + }*/ + // 如果俩个价格一样,后一位价格+10 + for (int i = 0; i < priceList.size() - 1; i++) { + if (priceList.get(i).getPrice().equals(priceList.get(i + 1).getPrice())) { + priceList.get(i + 1).setPrice(priceList.get(i + 1).getPrice() + 10); + } + if (width == 6 && length == 6 && priceList.get(i).getCount() == 1000) { + priceList.get(i).setPrice(priceList.get(i).getPrice() + 8); + } + } + } + + // 300克的材质才有第二尺寸 + // 第二尺寸不为空 + if (!StringUtils.isEmpty(dto.getSize1())) { + String size1 = dto.getSize1(); + Double length1 = null; + Double width1 = null; + List priceListSecond = new ArrayList(); + length1 = Double.valueOf(size1.substring(0, size1.indexOf("*"))); + if (size1.indexOf(("*"), size1.indexOf("*") + 1) == -1) { + width1 = Double.valueOf(size1.substring(size1.indexOf("*") + 1)); + } else { + width1 = Double + .valueOf(size1.substring(size1.indexOf("*") + 1, size1.indexOf(("*"), size1.indexOf("*") + 1))); + } + length1 = Math.abs(length1); + width1 = Math.abs(width1); + double area1 = length1 * width1 / 10000; + if (((length1 <= 10.5 && width1 <= 5.5) || (length1 <= 5.5 && width1 <= 10.5))) { + priceListSecond = new PriceUtils().oneCradPrice(count); + if ("不覆膜".equals(dto.getCraftMo())) { + for (Product product : priceListSecond) { + product.setPrice(Math.floor(product.getPrice() * 0.98)); + } + } + } else { + // 有工艺(覆膜) + if ("双面覆哑膜".equals(dto.getCraftMo())) { + double priceArr[] = {18, 15, 14, 14}; + // double priceArr[] = { 13, 12, 11.5, 10 }; + priceListSecond = new PriceUtils().acountTagClothes300PriceCraftMo(area1, count, number, priceArr); + } else if ("不覆膜".equals(dto.getCraftMo())) { + double priceArr[] = {17, 14, 13, 13}; + priceListSecond = new PriceUtils().acountTagClothes300PriceCraftMo(area, count, number, priceArr); + } + + // 对比固定价格 + List priceList2 = new PriceUtils().oneCradPrice(count); + if ("不覆膜".equals(dto.getCraftMo())) { + for (Product product : priceList2) { + product.setPrice(Math.floor(product.getPrice() * 0.98)); + } + } + for (int i = 0; i < priceListSecond.size(); i++) { + for (int j = 0; j < priceList2.size(); j++) { + if (priceListSecond.get(j).getPrice() < priceList2.get(j).getPrice()) { + priceListSecond.get(j).setPrice(priceList2.get(j).getPrice() + 10); + } + } + } + // 末尾变成0 + for (Product product : priceListSecond) { + product.setPrice(product.getPrice() - product.getPrice() % 10); + } + // 如果俩个价格一样,后一位价格+10 + for (int i = 0; i < priceListSecond.size() - 1; i++) { + if (priceListSecond.get(i).getPrice().equals(priceListSecond.get(i + 1).getPrice())) { + priceListSecond.get(i + 1).setPrice(priceListSecond.get(i + 1).getPrice() + 10); + } + } + } + // 俩个尺寸的价格相加 再*0.96 + for (int i = 0; i < priceList.size(); i++) { + priceList.get(i).setPrice((priceList.get(i).getPrice() + priceListSecond.get(i).getPrice()) * 0.95); + } + } + return priceList; + } + + /** + * 服装吊牌300克异形模切价格计算===》 不复膜的 计算方法:长*宽*数量500张*22+每款设计费7元+绳子10元 + * + * @param area + * @param count + * @param number + * @param priceArr + * @return + */ + public List acountTagClothes300PriceCraftMo(Double area, int count, Integer number, double[] priceArr) { + int countArr[] = {1000, 2000, 5000, 10000}; + // 数量大于1万,单独报价; + List list = new ArrayList<>(); + Product pro = new Product(); + // 设计费 7元/款 + double designFee = 7; + // 绳子 1分5一条 + double shengzi = 0.015; + if (count > 10000) { + pro.setCount(count); + pro.setPrice(Math.ceil(area * count * priceArr[priceArr.length - 1] + number * designFee)); + list.add(pro); + } else { + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count || list.size() > 3) { + continue; + } + pro = new Product(); + pro.setCount(countArr[i]); + /* pro.setPrice(Math.ceil(area * countArr[i] * priceArr[i] + number * designFee + + countArr[i] * shengzi));*/ + pro.setPrice(Math.ceil(area * countArr[i] * priceArr[i] + designFee)); + list.add(pro); + } + } + return list; + } + + /** + * 600克 吊牌 + * + * @param dto + * @param kind + * @param kind2 + * @param area + * @param count + * @return + */ + public List tags600Price(Product dto, String kind, String kind2, Double area, int count) { + List priceList; + priceList = new PriceUtils().getTag600PriceFirst(kind, kind2, area, count, true); + + // 600克的材质才有第二尺寸 + // 第二尺寸不为空 + if (!StringUtils.isEmpty(dto.getSize1())) { + String size1 = dto.getSize1(); + Double length1 = null; + Double width1 = null; + List priceList2 = new ArrayList(); + length1 = Double.valueOf(size1.substring(0, size1.indexOf("*"))); + if (size1.indexOf(("*"), size1.indexOf("*") + 1) == -1) { + width1 = Double.valueOf(size1.substring(size1.indexOf("*") + 1)); + } else { + width1 = Double + .valueOf(size1.substring(size1.indexOf("*") + 1, size1.indexOf(("*"), size1.indexOf("*") + 1))); + } + length1 = Math.abs(length1); + width1 = Math.abs(width1); + double area1 = length1 * width1 / 10000; + priceList2 = new PriceUtils().getTag600PriceFirst(kind, kind2, area1, count, false); + // 俩个尺寸的价格相加 + for (int i = 0; i < priceList.size(); i++) { + priceList.get(i).setPrice((priceList.get(i).getPrice() + priceList2.get(i).getPrice()) * 0.95); + } + } + return priceList; + } + + /** + * 吊牌600/800克自定义尺寸价格 + * + * @param kind 600克/800克 + * @param kind2 种类 + * @param area 单个产品的面积 + * @param count 报的数量 + * @param flag 是否要加绳子费用 + * @return + */ + public List getTag600PriceFirst(String kind, String kind2, double area, int count, boolean flag) { + // 数量大于1万,单独报价; + if (count > 10000) { + return null; + } + List list = new ArrayList<>(); + double shengzi = 0; + if ("4".equals(kind)) { + if ("无".equals(kind2)) { + double priceArr[] = {50, 34, 27, 27, 26, 25}; + list = acountTag600Price(area, count, priceArr, shengzi, flag, list); + } else if ("单面烫黄金".equals(kind2)) { + double priceArr[] = {68, 48, 37, 36, 35, 34}; + list = acountTag600Price(area, count, priceArr, shengzi, flag, list); + } else if ("单面凹凸".equals(kind2)) { + double priceArr[] = {75, 50, 40, 40, 39, 38}; + list = acountTag600Price(area, count, priceArr, shengzi, flag, list); + } else if ("单面烫黄金+凹凸".equals(kind2)) { + double priceArr[] = {93, 63, 48, 48, 47, 46}; + list = acountTag600Price(area, count, priceArr, shengzi, flag, list); + } + } + if ("6".equals(kind)) { + if ("无".equals(kind2)) { + double priceArr[] = {50, 34, 27, 27, 26, 25}; + list = acountTag600Price(area, count, priceArr, shengzi, flag, list); + } else if ("单面烫黄金".equals(kind2)) { + double priceArr[] = {68, 48, 37, 36, 35, 34}; + list = acountTag600Price(area, count, priceArr, shengzi, flag, list); + } else if ("单面凹凸".equals(kind2)) { + double priceArr[] = {75, 50, 40, 40, 39, 38}; + list = acountTag600Price(area, count, priceArr, shengzi, flag, list); + } else if ("单面烫黄金+凹凸".equals(kind2)) { + double priceArr[] = {93, 63, 48, 48, 47, 46}; + list = acountTag600Price(area, count, priceArr, shengzi, flag, list); + } + } + return list; + } + + /** + * 吊牌600/800克价格计算 + * + * @param area + * @param count + * @param priceArr + * @param shengzi + * @param flag + * @return + */ + private List acountTag600Price(double area, int count, double[] priceArr, double shengzi, boolean flag, + List list) { + int countArr[] = {500, 1000, 2000, 3000, 5000, 10000}; + Product pro = new Product(); + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count || list.size() > 3) { + continue; + } + if (countArr[i] == 500) { + continue; + } + pro = new Product(); + if (countArr[i] == 500) { + shengzi = 20; + } else if (countArr[i] == 1000) { + shengzi = 30; + } else if (countArr[i] == 2000) { + shengzi = 50; + } else { + shengzi = 0.03; + } + pro.setCount(countArr[i]); + if (flag) { + pro.setPrice( + Math.ceil(area * countArr[i] * priceArr[i] + (shengzi > 1 ? shengzi : shengzi * countArr[i]))); + } else { + pro.setPrice(Math.ceil(area * countArr[i] * priceArr[i])); + } + list.add(pro); + } + return list; + } + + /** + * 异形杯套价格计算 + * + * @param count + * @return + */ + public List getCupSetPrice(int count) { + List list = new ArrayList<>(); + Product pro = new Product(); + int countArr[] = {500, 1000, 2000, 3000, 5000, 10000}; + double priceArr[] = {700, 780, 820, 900, 1300, 1800}; + if (count <= 10000) { + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(priceArr[i]); + list.add(pro); + } + } else { + pro = new Product(); + pro.setCount(count); + pro.setPrice(Math.ceil(count * 0.25)); + list.add(pro); + } + + return list; + } + + /** + * 手提袋价格计算 + * + * @param + * @param kai 产品开数 + * @return 报价:〔数量除以开数+*纸张《正度或者大度》+印工〔1千印X内150元,每超出1千印另加50元计算》+固定刀版收费200元+粘成品工钱.3*数量(小于200元按2⑾0元算〉〉*.5备注:以上报价展开尺寸最大为1000*700KM超出这个尺寸按以上报价*2倍计算 + */ + public List getPriceHanding(int count, int kai, double price, double m) { + List list = new ArrayList<>(); + int countArr[] = {500, 1000, 2000, 4000, 10000, 20000, 30000}; + Product pro = new Product(); + if (count >= 100) { + if (count < 670) { + pro.setCount(count); + pro.setPrice(Math.ceil((count / kai * price + 150 + 200 + 200) * m)); + list.add(pro); + } else { + pro.setCount(count); + pro.setPrice(Math.ceil( + (count / kai * price + (150 + Math.ceil((count - 1000) / 1000) * 50) + 200 + count * 0.3) * m)); + list.add(pro); + } + } + + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count || countArr[i] == list.get(0).getCount()) { + continue; + } + pro = new Product(); + pro.setCount(countArr[i]); + if (countArr[i] == 500) { + pro.setPrice(Math.ceil( + (countArr[i] / kai * price + (150 + Math.ceil((countArr[i] - 1000) / 1000) * 50) + 200 + 200) + * m)); + } else { + pro.setPrice(Math.ceil((countArr[i] / kai * price + (150 + Math.ceil((countArr[i] - 1000) / 1000) * 50) + + 200 + countArr[i] * 0.3) * m)); + } + list.add(pro); + } + return list; + } + + /** + * 计算手提袋大度开数 + * + * @param length + * @param width + * @return + */ + public static String getDa(double length, double width) { + double l1 = Math.floor(1194 / length); + double w1 = Math.floor(889 / width); + double l2 = Math.floor(1194 / width); + double w2 = Math.floor(889 / length); + int maxDa = (int) Math.max(l1 * w1, l2 * w2); + if (w1 != 2) { + return "" + maxDa; + } else { + double ll1 = Math.floor(length / length); + double ww1 = Math.floor(889 / width); + double ll2 = Math.floor(length / width); + double ww2 = Math.floor(889 / length); + int maxxa = (int) Math.max(ll1 * ww1, ll2 * ww2); + + double lll1 = Math.floor((1194 - length) / length); + double www1 = Math.floor(889 / width); + double lll2 = Math.floor(length / width); + double www2 = Math.floor(889 / length); + int maxxb = (int) Math.max(lll1 * www1, lll2 * www2); + maxDa = maxxb + maxxa; + return "" + maxDa; + } + } + + /** + * 正度开数 + * + * @param length + * @param width + * @return + */ + public static String getZheng(double length, double width) { + double l1 = Math.floor(1092 / length); + double w1 = Math.floor(787 / width); + double l2 = Math.floor(1092 / width); + double w2 = Math.floor(787 / length); + int maxZheng = (int) Math.max(l1 * w1, l2 * w2); + if (w1 != 2) { + return "+" + maxZheng; + } else { + double ll1 = Math.floor(length / length); + double ww1 = Math.floor(787 / width); + double ll2 = Math.floor(length / width); + double ww2 = Math.floor(787 / length); + int maxxa = (int) Math.max(ll1 * ww1, ll2 * ww2); + + double lll1 = Math.floor((1092 - length) / length); + double www1 = Math.floor(787 / width); + double lll2 = Math.floor(length / width); + double www2 = Math.floor(787 / length); + int maxxb = (int) Math.max(lll1 * www1, lll2 * www2); + maxZheng = maxxb + maxxa; + return "" + maxZheng; + } + } + + /** + * 金属标价格计算 ===>最大印刷面积290*190MM 成品尺寸一边加1.5MM 算大张要几张 起步价90元 + * 10张以内不含10张100+25*(数量-2) 20张以内 数量*24 30张以内 数量*22 超过30张*20 + * + * @param list + * @param width + * @param length + * @param count + * @param number + * @return + */ + public List getMetalPrice(List list, Double width, Double length, int count, Integer number) { + /*if (length == 1) { + length = 2.0; + } + if (width == 1) { + width = 2.0; + }*/ + // 最大尺寸29*19cm ,加出血一边5mm + double l = 295; + double w = 195; + Product pro = new Product(); + // 第一张大纸价格 + double price = 0; + // 换成毫米每边+3 + length = length * 10 + 2 * 1.5; + width = width * 10 + 2 * 1.5; + // 数量*款数就是张数 + // count = count * number; + if ((length > l || width > w) && (length > w || width > l)) + return null; + // 一张大纸29*19cm 能做多少个此类尺寸的金属标 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + // 报的数量需要多少张大纸 + int num = (int) Math.ceil((count * number) / max); + int numUnit = (int) Math.ceil((count) / max); + boolean isNumnber = false; + if (numUnit == 1) { + isNumnber = true; + } + double mulit = 1; + /* + * if (num > 2) { price = price + 25 * (num - 2); } + */ + double design = 0; + + if (!isNumnber) { + if (numUnit <= 2) { + price = 80; + } else if (numUnit < 6) { + price = 80 + 24 * (numUnit - 2); + } else if (numUnit < 10) { + price = 80 + 23 * (numUnit - 2); + } else if (numUnit < 16) { + price = 80 + 21 * (numUnit - 2); + } else if (numUnit < 30) { + price = 200 + 12 * (numUnit - 2); + } else if (numUnit < 51) { + price = 280 + 9 * (numUnit - 2); + } else if (numUnit < 100) { + price = Math.ceil((numUnit * 9) / 0.64); + } else if (numUnit < 300) { + price = Math.ceil((numUnit * 9) / 0.645); + } else { + price = Math.ceil((numUnit * 9) / 0.646); + } + mulit = number; + } else { + price = 80; + mulit = Math.ceil(num / numUnit); + } + + price = Math.ceil(price * mulit); + + + pro.setCount(count); + pro.setPrice(Math.ceil(price + design)); + float d = (float) num / (float) 30; + if (number > 1) { + d = d * number; + } + pro.setWeight(String.valueOf(df.format(d))); + list.add(pro); + return list; + } + + /** + * UV转印贴 + * + * @param area + * @param type + * @return + */ + private double f_getUvPrice(double area, int type) {//根据面积获取价格 + double price = 0, lastPrice = 0; + double areaArr[] = {0.1, 0.12, 0.15, 0.2, 0.3, 0.4, 0.5, 1, 3, 5, 7, 9, 10, 20, 50, 100, 200, 500, 1000, 5000}; + double priceArr[] = {450, 420, 400, 380, 360, 340, 300, 225, 200, 175, 170, 150, 145, 125, 120, 110, 100, 90, 80, 70}; + double lessPriceArr[] = {215, 215, 215, 215, 215, 215, 215, 200, 170, 160, 150, 140, 135, 115, 110, 100, 90, 80, 70, 60}; + double areaArrSmall[] = {0.03, 0.1}; + double priceArrSmall[] = {30, 50}; + for (int i = 0; i < areaArr.length; i++) { + if (areaArr[i] < area) { + continue; + } + if (i > 0) { + if (type == 2) { + lastPrice = Math.ceil(lessPriceArr[i - 1] * areaArr[i - 1]); + } else { + lastPrice = Math.ceil(priceArr[i - 1] * areaArr[i - 1]); + } + } + if (type == 2) { + price = Math.ceil(lessPriceArr[i] * area); + } else { + price = Math.ceil(priceArr[i] * area); + } + if (lastPrice > price) { + price = lastPrice; + } + break; + } + if (type == 3) { + for (int i = 0; i < areaArrSmall.length; i++) { + if (areaArrSmall[i] < area) { + continue; + } + if (i > 0) { + lastPrice = Math.ceil(priceArrSmall[i - 1]); + } + price = Math.ceil(priceArrSmall[i]); + if (lastPrice > price) { + price = lastPrice; + } + break; + } + } + //最低价65 + if (price == 0) { + price = 65 * area; + } + return price; + } + + public List UVStickerPrice(double length, double width, int count, int number, String yinse, String[] zhuan) { + List list = new ArrayList(); + int countArr[] = {10, 20, 30, 50, 100, 200, 300, 400, 500, 800, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000, 50000}; + Product pro; + int oldCount = count; + int isInArr = 0; + double price = 0, mqPrice = 0, lastPrice; + if (!StringUtils.isEmpty(zhuan) && ("专金".equals(zhuan[0]) || "专银".equals(zhuan[0]) || "印刷+烫金".equals(zhuan[0]) || "印刷+烫银".equals(zhuan[0])) + && count < 100) { +// if (!StringUtils.isEmpty(zhuan) && ("专金".equals(zhuan[0]) || "专银".equals(zhuan[0])) && count < 100) { + // 烫金100个起 + count = 100; + } + + double area = (length + 0.3 * 2) * (width + 0.3 * 2) * count / 10000 * number; + if (!StringUtils.isEmpty(zhuan)) { + //工艺价格另算 + area = (length + 0.3 * 2) * (width + 0.3 * 2) * count / 10000; + } + double lastArea = 0; + int index = Arrays.binarySearch(countArr, oldCount); + if (index >= 0) { + isInArr = 1; + } + + if (isInArr != 1) { + price = f_getUvPrice(area, 1); + price = price > 45 ? price : 45; + + if (area <= 0.2) { + mqPrice = count * 0.05; + mqPrice = mqPrice > 5 ? mqPrice : 5; + Math.ceil(price += mqPrice); + } + + if (!StringUtils.isEmpty(zhuan)) { + if ("烫金".equals(zhuan[0]) || "烫银".equals(zhuan[0]) || "烫蓝".equals(zhuan[0]) || "烫红".equals(zhuan[0]) || "烫黑".equals(zhuan[0]) || "镭射银".equals(zhuan[0]) || "镭射金".equals(zhuan[0]) || "玫瑰金".equals(zhuan[0])) { + // 起步价+58元 + price = price + (40 * area); + price = price > 80 ? price : 80; + } else if ("印刷+烫金".equals(zhuan[0]) || "印刷+烫银".equals(zhuan[0])) { + // 起步价+58元 + price = price + (45 * area); + price = price > 103 ? price : 103; + } else if ("双面贴".equals(zhuan[0])) { + price = price + (40 * area); + price = price > 80 ? price : 80; + } + } + + pro = new Product(); + pro.setPrice(Math.ceil(price)); + pro.setWeight(String.valueOf(df.format(area))); + pro.setCount(oldCount); + list.add(pro); + } + + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + if (list.size() > 2) { + break; + } else { + area = (length + 0.3 * 2) * (width + 0.3 * 2) * countArr[i] / 10000 * number; + if (i > 0) { + lastArea = (length + 0.3 * 2) * (width + 0.3 * 2) * countArr[i - 1] / 10000 * number; + } + if (!StringUtils.isEmpty(zhuan)) { + //工艺价格另算 + area = (length + 0.3 * 2) * (width + 0.3 * 2) * countArr[i] / 10000; + if (i > 0) { + lastArea = (length + 0.3 * 2) * (width + 0.3 * 2) * countArr[i - 1] / 10000; + } + } + // 报价面积,平方米(加一边3mm出血) + price = f_getUvPrice(area, 1); + price = price > 45 ? price : 45; + lastPrice = f_getUvPrice(lastArea, 1); + + + if (area <= 0.2) { + mqPrice = countArr[i] * 0.05; + mqPrice = mqPrice > 5 ? mqPrice : 5; + Math.ceil(price += mqPrice); + } + if (lastArea <= 0.2 && i > 0) { + mqPrice = countArr[i - 1] * 0.05; + mqPrice = mqPrice > 5 ? mqPrice : 5; + Math.ceil(lastPrice += mqPrice); + } + if (area > 0.1) { + if (lastPrice >= price) {//判断上一个尺寸 + price = Math.ceil(lastPrice * 1.1); + } + } + + if (!StringUtils.isEmpty(zhuan)) { + if ("烫金".equals(zhuan[0]) || "烫银".equals(zhuan[0]) || "烫蓝".equals(zhuan[0]) || "烫红".equals(zhuan[0]) || "烫黑".equals(zhuan[0]) || "镭射银".equals(zhuan[0]) || "镭射金".equals(zhuan[0]) || "玫瑰金".equals(zhuan[0])) { + // 起步价+58元 + price = price + (40 * area); + price = price > 80 ? price : 80; +// lastPrice = lastPrice + (45 * area); +// lastPrice = lastPrice > 103 ? lastPrice : 103; + } else if ("印刷+烫金".equals(zhuan[0]) || "印刷+烫银".equals(zhuan[0])) { + // 起步价+58元 + price = price + (45 * area); + price = price > 103 ? price : 103; +// lastPrice = lastPrice + (45 * area); +// lastPrice = lastPrice > 103 ? lastPrice : 103; + } else if ("双面贴".equals(zhuan[0])) { + price = price + (40 * area); + price = price > 80 ? price : 80; + } + } + + + pro = new Product(); + pro.setPrice(Math.ceil(price)); + pro.setWeight(String.valueOf(df.format(area))); + pro.setCount(countArr[i]); + list.add(pro); + } + } + +// if (!StringUtils.isEmpty(zhuan) && ("烫金".equals(zhuan[0]) || "烫银".equals(zhuan[0]) || "印刷+烫金".equals(zhuan[0]) || "印刷+烫银".equals(zhuan[0]))) { +// for (Product product : list) { +// product.setPrice(Math.ceil(product.getPrice() + 60)); +// } +// } + if (!StringUtils.isEmpty(zhuan) && ("专金".equals(zhuan[0]) || "专银".equals(zhuan[0]))) { + for (Product product : list) { + product.setPrice(Math.ceil(product.getPrice() + 80)); + } + } + + if (length >= 44 || width >= 44) { + if (width > length) { + length = width; + } + for (Product product : list) { + product.setPrice(Math.ceil(product.getPrice() + length * 0.6)); + } + } + + return list; + } + + /** + * 小面积UV转印贴报价: + * + * @param length + * @param width + * @param count + * @param zhuan + * @param yinse 印色 + * @return + */ + public List UVStickerSmallPrice(double length, double width, int count, int number, String yinse, String[] zhuan) { + List list = new ArrayList(); + int countArr[] = {10, 20, 30, 50, 100, 200, 300, 400, 500, 800, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000, 50000}; + Product pro; + int isInArr = 0; + int oldCount = count; + double price = 0, mqPrice = 0, lastPrice, list_lastPrice = 0; + if (!StringUtils.isEmpty(zhuan) && ("专金".equals(zhuan[0]) || "专银".equals(zhuan[0]) || "印刷+烫金".equals(zhuan[0]) || "印刷+烫银".equals(zhuan[0])) + && count < 100) { +// if (!StringUtils.isEmpty(zhuan) && ("专金".equals(zhuan[0]) || "专银".equals(zhuan[0])) && count < 100) { + // 烫金100个起 + count = 100; + } + double area = (length + 0.3 * 2) * (width + 0.3 * 2) * count / 10000 * number; + if (!StringUtils.isEmpty(zhuan)) { + //工艺价格另算 + area = (length + 0.3 * 2) * (width + 0.3 * 2) * count / 10000; + } + double lastArea = 0; + int index = Arrays.binarySearch(countArr, oldCount); + if (index >= 0) { + isInArr = 1; + } + + if (isInArr != 1) { + price = f_getUvPrice(area, 1); + price = price > 45 ? price : 45; + if (area < 0.1 && area > 0) { + price = f_getUvPrice(area, 3); + } + + if (area <= 0.2 && area >= 0.1) { + mqPrice = count * 0.05; + mqPrice = mqPrice > 5 ? mqPrice : 5; + Math.ceil(price += mqPrice); + } + + if (!StringUtils.isEmpty(zhuan)) { + if ("烫金".equals(zhuan[0]) || "烫银".equals(zhuan[0]) || "烫蓝".equals(zhuan[0]) || "烫红".equals(zhuan[0]) || "烫黑".equals(zhuan[0]) || "镭射银".equals(zhuan[0]) || "镭射金".equals(zhuan[0]) || "玫瑰金".equals(zhuan[0])) { + // 起步价+58元 + price = price + (40 * area); + price = price > 80 ? price : 80; + } else if ("印刷+烫金".equals(zhuan[0]) || "印刷+烫银".equals(zhuan[0])) { + // 起步价+58元 + price = price + (45 * area); + price = price > 103 ? price : 103; + } else if ("双面贴".equals(zhuan[0])) { + price = price + (40 * area); + price = price > 80 ? price : 80; + } + } + + pro = new Product(); + list_lastPrice = Math.max(Math.ceil(price), list_lastPrice); + pro.setPrice(list_lastPrice); + pro.setWeight(String.valueOf(df.format(area))); + pro.setCount(oldCount); + list.add(pro); + } + + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + if (list.size() > 2) { + break; + } else { + area = (length + 0.3 * 2) * (width + 0.3 * 2) * countArr[i] / 10000 * number; + if (i > 0) { + lastArea = (length + 0.3 * 2) * (width + 0.3 * 2) * countArr[i - 1] / 10000 * number; + } + if (!StringUtils.isEmpty(zhuan)) { + //工艺价格另算 + area = (length + 0.3 * 2) * (width + 0.3 * 2) * countArr[i] / 10000; + if (i > 0) { + lastArea = (length + 0.3 * 2) * (width + 0.3 * 2) * countArr[i - 1] / 10000; + } + } + // 报价面积,平方米(加一边3mm出血) + price = f_getUvPrice(area, 1); + price = price > 45 ? price : 45; + lastPrice = f_getUvPrice(lastArea, 1); + if (area < 0.1 && area > 0) { + price = f_getUvPrice(area, 3); + lastPrice = f_getUvPrice(lastArea, 3); + } + + + if (area <= 0.2 && area >= 0.1) { + mqPrice = countArr[i] * 0.05; + mqPrice = mqPrice > 5 ? mqPrice : 5; + Math.ceil(price += mqPrice); + } + if (lastArea <= 0.2 && area >= 0.1 && i > 0) { + mqPrice = countArr[i - 1] * 0.05; + mqPrice = mqPrice > 5 ? mqPrice : 5; + Math.ceil(lastPrice += mqPrice); + } + if (area > 0.1) { + if (lastPrice >= price) {//判断上一个尺寸 + price = Math.ceil(lastPrice * 1.1); + } + } + + if (!StringUtils.isEmpty(zhuan)) { + if ("烫金".equals(zhuan[0]) || "烫银".equals(zhuan[0]) || "烫蓝".equals(zhuan[0]) || "烫红".equals(zhuan[0]) || "烫黑".equals(zhuan[0]) || "镭射银".equals(zhuan[0]) || "镭射金".equals(zhuan[0]) || "玫瑰金".equals(zhuan[0])) { + // 起步价+58元 + price = price + (40 * area); + price = price > 80 ? price : 80; +// lastPrice = lastPrice + (45 * area); +// lastPrice = lastPrice > 103 ? lastPrice : 103; + } else if ("印刷+烫金".equals(zhuan[0]) || "印刷+烫银".equals(zhuan[0])) { + // 起步价+58元 + price = price + (45 * area); + price = price > 103 ? price : 103; +// lastPrice = lastPrice + (45 * area); +// lastPrice = lastPrice > 103 ? lastPrice : 103; + } else if ("双面贴".equals(zhuan[0])) { + price = price + (40 * area); + price = price > 80 ? price : 80; + } + } + + pro = new Product(); + list_lastPrice = Math.max(Math.ceil(price), list_lastPrice); + pro.setPrice(list_lastPrice); + pro.setWeight(String.valueOf(df.format(area))); + pro.setCount(countArr[i]); + list.add(pro); + } + } + +// if (!StringUtils.isEmpty(zhuan) && ("烫金".equals(zhuan[0]) || "烫银".equals(zhuan[0]) || "印刷+烫金".equals(zhuan[0]) || "印刷+烫银".equals(zhuan[0]))) { +// for (Product product : list) { +// product.setPrice(Math.ceil(product.getPrice() + 60)); +// } +// } + if (!StringUtils.isEmpty(zhuan) && ("专金".equals(zhuan[0]) || "专银".equals(zhuan[0]))) { + for (Product product : list) { + product.setPrice(Math.ceil(product.getPrice() + 60)); + } + } + + if (length >= 44 || width >= 44) { + if (width > length) { + length = width; + } + for (Product product : list) { + product.setPrice(Math.ceil(product.getPrice() + length * 0.6)); + } + } + + return list; + } + + /** + * 少数量(小于10)UV转印贴报价: + * + * @param length + * @param width + * @param count + * @param zhuan + * @param number 印色 + * @return + */ + public List UVStickerLessPrice(double length, double width, int count, int number, String[] zhuan) { + List list = new ArrayList(); + Product pro = new Product(); + double area = (length + 0.3 * 2) * (width + 0.3 * 2) * count / 10000; + if (!StringUtils.isEmpty(zhuan) && count < 25) { + return list; + } + double price = f_getUvPrice(area, 2); + pro.setPrice(price > 80 ? price : 80); + pro.setCount(count); + list.add(pro); + + if (!StringUtils.isEmpty(zhuan)) { + for (Product product : list) { + product.setPrice(Math.floor(product.getPrice() + 60 + (30 * area > 15 ? 30 * area : 15))); + } + } + + return list; + } + + /** + * 条幅 + * + * @param kind2 + * @param number + */ + public static List bannerPrice(String kind2, double length, double width, int count, Integer number, String role) { + List list = new ArrayList(); + Product pro = new Product(); + // 一条条幅的长度 + length = length / 100.0; + width = width / 100.0; + double area = length * width * count; + double price = 0; + if ("彩色条幅".equals(kind2)) { + //拼多多价格 + if (role.indexOf("1045") > -1) { + if (width == 0.5 || length == 0.5) { + double widthArr[] = {3, 4, 5, 6, 7, 8}; + double unitArr[] = {19, 17.5, 17, 17, 17, 17}; + double baseArr[] = {40, 50, 60, 75, 85, 96}; + for (int i = 0; i < widthArr.length; i++) { + if (widthArr[i] < width || widthArr[i] < length) { + continue; + } + price = unitArr[i] * area; + price = price > baseArr[i] ? price : baseArr[i]; + break; + } + } else { + if (area <= 1) { + price = 45; + } else if (area <= 2) { + price = 35 * area; + } else if (area <= 3) { + price = 33 * area; + } else if (area <= 4) { + price = 32 * area; + } else if (area <= 5) { + price = 30 * area; + } else if (area <= 10) { + price = 28 * area; + } else { + price = 25 * area; + } + } + price = price > 40 ? price : 40; + } else { + if (width == 0.5 && length == 3 || width == 3 && length == 0.5) { + price = 30 * area; + } else if (width == 0.5 && length == 5 || width == 5 && length == 0.5) { + price = 24 * area; + } else if (area <= 1) { + price = 45; + } else if (area <= 2) { + price = 35 * area; + } else if (area <= 3) { + price = 33 * area; + } else if (area <= 4) { + price = 32 * area; + } else if (area <= 5) { + price = 30 * area; + } else if (area <= 10) { + price = 28 * area; + } else { + price = 25 * area; + } + + price = price > 45 ? price : 45; + } + + } else { + if ((width == 0.5 && length == 3 && count == 1) || (width == 3 && length == 0.5 && count == 1)) { + price = 24 * area; + } else if (area <= 1) { + price = 35; + } else if (area <= 2) { + price = 30 * area; + } else if (area <= 3) { + price = 24 * area; + } else if (area <= 4) { + price = 21 * area; + } else if (area <= 5) { + price = 18 * area; + } else if (area <= 10) { + price = 16 * area; + } else { + price = 13 * area; + } + price = price > 40 ? price : 40; + } + pro.setCount(count); + pro.setPrice(Math.ceil(price)); + list.add(pro); + + return list; + } + + /** + * 桌贴0.38磨砂背胶价格计算 ======》 最大印刷尺寸40*45CM 最低起步价100元 每增加一张加30元 设计费每款加8元 + *

+ * 0.38桌贴(磨砂、哑光、亮光) 最大打印面积 395*445MM 成品最小做到1CM 每边加上1.5MM出血 起步价90元 + * 单面印刷不带胶每增加一张单面加30元 双面打印不带胶每增加一张加36元, 带胶加40元一张 10张以上不分单双面带不带胶 均20元/张 + * 款数不同的每款加上1元的设计费 + * + * @param list + * @param width + * @param length + * @param count + * @param number + * @return + */ + public List getDeskSticker(List list, Double width, Double length, int count, Integer number, + String craftShua, String craftJiao) { + // 最大尺寸435*385mm ,加出血一边3mm + double l = 435; + double w = 385; + Product pro = new Product(); + // 价格 + double price = 0; + // 换成毫米每边+1.5 + length = length * 10 + 2 * 1.5; + width = width * 10 + 2 * 1.5; + // 数量*款数就是张数 + count = count * number; + if ((length > l || width > w) && (length > w || width > l)) + return null; + // 一张大纸45*40cm 能做多少个此类尺寸的桌贴 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + // 报的数量需要多少张大纸 + int num = (int) Math.ceil(count / max); + + if ("单面".equals(craftShua)) { + if (num > 10) { + price = 70 + num * 28 + (number - 1); + } else { + price = 80 + num * 30 + (number - 1); + } + } else if ("双面".equals(craftShua)) { + if ("背胶".equals(craftJiao)) { + price = 100 + num * 40 + (number - 1); + } else { + price = 100 + num * 36 + (number - 1); + } + } + + pro.setCount(count / number); + pro.setPrice(price > 90 ? price : 90); + list.add(pro); + return list; + } + + /** + * 桌贴0.38PVC亮光异型卡片 印刷价格 + * + * @param list + * @param width + * @param length + * @param count + * @return + */ + public List getDeskSticker(List list, Double width, Double length, int count) { + double danjia; + int countArr[] = {500, 1000, 2000, 3000, 5000, 10000}; + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count || list.size() > 3) { + continue; + } + // 面积平方米 + double area = width * length * countArr[i] / 10000; + Product pro = new Product(); + if (area <= 0.45) { + danjia = 110; + } else if (area <= 0.9) { + danjia = 150; + } else if (area <= 5) { + danjia = 100; + } else if (area <= 10) { + danjia = 70; + } else if (area <= 15) { + danjia = 55; + } else if (area <= 20) { + danjia = 50; + } else if (area <= 30) { + danjia = 40; + } else { + danjia = 30; + } + + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(area * danjia > 120 ? area * danjia : 120); + list.add(pro); + } + for (int i = 0; i < list.size() - 1; i++) { + if (list.get(i + 1).getPrice() - list.get(i).getPrice() < 100) { + list.get(i + 1).setPrice(list.get(i + 1).getPrice() + 100); + } + } + return list; + } + + /** + * 桌贴0.38PVC亮光异型卡片 打印价格 + * + * @param number + * @param width + * @param length + * @param count + * @param craftJiao + * @return 不同款内容的报价:成本核算 有效打印面积 380*420MM 起步价120元 每增加一张单面加30元 + * 双面打印在每增加一张加36元,带胶加每增加一张加40元 10张以上单双面均加22元/张 + */ + public List getDeskStickerPrint(Double width, Double length, int count, int number, String craftJiao) { + List list = new ArrayList(); + // 有效打印面积 420*380MM,加出血一边3mm + double l = 426; + double w = 386; + Product pro = new Product(); + // 第一张大纸价格 + double price = 120; + // 换成毫米每边+3 + length = length * 10 + 2 * 3; + width = width * 10 + 2 * 3; + // 数量 * 款数就是张数 + count = count * number; + if ((length > l || width > w) && (length > w || width > l)) + return null; + // 一张大纸420*380mm 能做多少个此类尺寸的桌贴 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + // 报的数量需要多少张大纸 + int num = (int) Math.ceil(count / max); + // 价格计算 + if ("背胶".equals(craftJiao)) { + price = price + (num - 1) * 40; + } else { + if (num > 10) { + price = price + (num - 1) * 22; + } else { + // 单面 + if ("单面".equals(craftJiao)) { + price = price + (num - 1) * 30; + } else if ("双面".equals(craftJiao)) {// 双面 + price = price + (num - 1) * 36; + } + } + } + + pro.setCount(count / number); + pro.setPrice(price); + list.add(pro); + return list; + } + + /** + * 滴塑价格计算======> 滴塑 出血位每边加1.5MM 滴塑最大印刷面积43*30CM 起步价80元 2张100元 3张120元 4张150元 + * 5张180元 10张260元 11张以上*25元 + * + * @param list + * @param width + * @param length + * @param count + * @param number + * @param dto + * @return + */ + public static List getDisuPrice(List list, Double width, Double length, int count, Integer number, Product dto) { + List craft = dto.getCraft() != null ? Arrays.asList(dto.getCraft()) : new ArrayList<>(); + // 最大尺寸43*30cm + double l = 430; + double w = 300; + Product pro = new Product(); + // 第一张大纸价格 + double price = 80; + if (craft.size() > 0) {//工艺起步价120 + price = 120; + } + // 换成毫米每边+3 + length = length * 10 + 2 * 1.5; + width = width * 10 + 2 * 1.5; + // 数量*款数就是张数 + count = count * number; + if ((length > l || width > w) && (length > w || width > l)) { + return null; + } + // 一张大纸43*30 能做多少个此类尺寸的 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + // 报的数量需要多少张大纸 + int num = (int) Math.ceil(count / max); + if (num <= 10) { + price = price + (num - 1) * 20; + } else if (num > 10) { + price = num * 25; + } + price += 10 * craft.size() * num; + + if (number > 1) { + price *= 1.3; + } + pro.setCount(count / number); + pro.setPrice(price); + list.add(pro); + return list; + } + + /** + * 毕业证书价格计算 + * + * @param count + */ + public List getDiploma(int count) { + List list = new ArrayList(); + // 数量 + int countArr[] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200, 300, 500, 1000}; + // 价格 + double priceArray[] = {90, 110, 120, 140, 160, 190, 210, 230, 240, 270, 480, 740, 920, 1200}; + Product pro = new Product(); + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + if (list.size() == 4) { + return list; + } + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(priceArray[i]); + list.add(pro); + } + return list; + } + + /** + * 复印纸价格计算 + * + * @param count + * @param kind3 + * @param kind2 + * @param kind + * @param size + * @return + */ + public List getCopyPaper(String kind, String kind2, String kind3, int count, String size) { + List list = new ArrayList(); + double price = 0; + if ("彩色".equals(kind)) { + if ("80克双胶纸".equals(kind2)) { + if ("19*13".equals(size)) { + if (count == 10) { + price = 70; + } else if (count == 20) { + price = 90; + } else if (count == 50) { + price = 150; + } + } else if ("28.5*21".equals(size)) { + if (count == 10) { + price = 160; + } else if (count == 20) { + price = 320; + } else if (count == 50) { + price = 900; + } + } + } + } else { + if ("60克双胶纸".equals(kind2)) { + if ("19*13".equals(size)) { + if (count == 10) { + if ("单面".equals(kind3)) { + price = 50; + } else { + price = 70; + } + } else if (count == 20) { + if ("单面".equals(kind3)) { + price = 60; + } else { + price = 90; + } + } else if (count == 50) { + if ("单面".equals(kind3)) { + price = 110; + } else { + price = 150; + } + } + } else if ("28.5*21".equals(size)) { + if (count == 10) { + if ("单面".equals(kind3)) { + price = 110; + } else { + price = 150; + } + } else if (count == 20) { + if ("单面".equals(kind3)) { + price = 160; + } else { + price = 220; + } + } else if (count == 50) { + if ("单面".equals(kind3)) { + price = 380; + } else { + price = 520; + } + } + } + } else if ("80克双胶纸".equals(kind2)) { + if ("19*13".equals(size)) { + if (count == 10) { + if ("单面".equals(kind3)) { + price = 60; + } else { + price = 90; + } + } else if (count == 20) { + if ("单面".equals(kind3)) { + price = 80; + } else { + price = 120; + } + } else if (count == 50) { + if ("单面".equals(kind3)) { + price = 180; + } else { + price = 220; + } + } + } else if ("28.5*21".equals(size)) { + if (count == 10) { + if ("单面".equals(kind3)) { + price = 130; + } else { + price = 180; + } + } else if (count == 20) { + if ("单面".equals(kind3)) { + price = 220; + } else { + price = 260; + } + } else if (count == 50) { + if ("单面".equals(kind3)) { + price = 520; + } else { + price = 780; + } + } + } + } + } + Product pro = new Product(); + pro = new Product(); + pro.setCount(count); + pro.setPrice(Math.ceil(price)); + list.add(pro); + + return list; + } + + /** + * 婚礼卡价格计算 + * + * @param length + * @param width + * @param count + * @param number + * @param craftMo + * @param craftShua + * @return + */ + public List getWeddingCardPrice(Double length, Double width, int count, Integer number, String craftMo, + String craftShua) { + List list = new ArrayList(); + Product pro = new Product(); + double weight = 0; + if ("直角".equals(craftMo) && count <= 300 && ((length == 13 && width == 5.4) || (length == 5.4 && width == 13))) { + if ("单面印刷".equals(craftShua)) { + // 数量 + int countArr[] = {100, 200, 300}; + // 价格 + double priceArray[] = {70, 126, 183}; + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(countArr[i]); + + pro.setPrice(priceArray[i]); + list.add(pro); + } + // 根据款数重新算价格 + for (Product product : list) { + product.setWeight(df.format(length * width * product.getCount() / 10000 * 0.3 * number)); + product.setPrice(Math.floor(product.getPrice() * number)); + } + } else if ("双面印刷".equals(craftShua)) { + // 数量 + int countArr[] = {100, 200, 300}; + // 价格 + double priceArray[] = {108, 189, 275}; + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(countArr[i]); + + pro.setPrice(priceArray[i]); + list.add(pro); + } + // 根据款数重新算价格 + for (Product product : list) { + product.setPrice(Math.floor(product.getPrice() * number)); + } + } + } else { + // 转成毫米 + weight = length * width * count / 10000 * 0.3 * number; + length = length * 10; + width = width * 10; + if (count <= 300) { + double l = 420; + double w = 285; + // 打印的加上出血(一边2毫米) + length = length + 4; + width = width + 4; + double price = 0.0; + + // 5张以内价格 + double fixPrice = 50; + // 每增加1张多少钱 + double zhang = 6; + // 设计费 + double designFee = 0.0; + + // 婚礼卡,直角工艺每增加一张5元 + if ("直角".equals(craftMo)) { + zhang = 5; + } + + /* + * 婚礼卡设计费成品尺寸90X54MM以内每款收10元 140X100MM以内每款收15元 210X140MM以内30元 210X285MM以内40元 + * 420X285MM以内60元 大于420X285MM80元 + */ + // 设计费不带出血的尺寸 + if ((length - 4 <= 90 && width - 4 <= 54) || (length - 4 <= 54 && width - 4 <= 90)) { + designFee = 10; + } else if ((length - 4 <= 140 && width - 4 <= 100) || (length - 4 <= 140 && width - 4 <= 100)) { + designFee = 15; + } else if ((length - 4 <= 210 && width - 4 <= 140) || (length - 4 <= 140 && width - 4 <= 210)) { + designFee = 30; + } else if ((length - 4 <= 285 && width - 4 - 4 <= 210) || (length - 4 <= 210 && width - 4 <= 285)) { + designFee = 40; + } else if ((length - 4 <= 420 && width - 4 <= 285) || (length - 4 <= 285 && width - 4 <= 420)) { + designFee = 60; + } else { + designFee = 80; + } + + // 一张l/w 大的纸张能做多少个此类尺寸的产品 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + // 报的数量需要多少张大纸 + // 需要多少张大纸 = 数量 * 款数 /每张做多少个 ===总数量/每张多少个 + int num = (int) Math.ceil(count * number / max); + // 5张以内价格 + 每张费用(第6张起收)+ 设计费 * 款数 + 0.1 * 总数量 (排号费) + price = fixPrice + (num - 5 > 0 ? num - 5 : 0) * zhang + designFee * number + 0.1 * count * number; + Product dto = new Product(); + dto.setCount(count); + dto.setPrice(price); + list.add(dto); + } else { + // 数量 + int countArr[] = {500, 1000, 2000}; + // 价格 + double priceArray[] = {230, 400, 760}; + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(countArr[i]); + + pro.setPrice(priceArray[i]); + list.add(pro); + } + // 根据款数重新算价格 + for (Product product : list) { + product.setWeight(df.format(weight)); + product.setPrice(Math.floor(product.getPrice() * number)); + } + } + } + return list; + } + + /** + * 贡缎布产品价格 + */ + public static List satinClothPrice(String kind2, Double length, Double width, int count, Integer number) { + List list = new ArrayList(); + Product pro = new Product(); + double area = length * width / 10000; + double price = 0, dj = 0; + if (area < 0.25) { + dj = 50; + } else { + dj = 40; + } + + area *= count; + if ("6".equals(kind2)) { + price = price + 30; + } + price = Math.ceil(area * dj > 58 ? area * dj : 58); + pro.setCount(count); + pro.setPrice(price * number); + list.add(pro); + + return list; + } + + /** + * 餐垫纸 + * + * @param kind + * @param length + * @param width + * @param count + * @return + */ + public List getPlaceMatPrice(String kind, Double length, Double width, int count) { + List list = new ArrayList<>(); + length = length * 10; + width = width * 10; + // Double priceArr[] = { 40.0, 50.0, 80.0, 120.0, 160.0, 270.0, 480.0 }; + // list = acountInsertCardPrice(count, list, priceArr); + if ((length <= 285 && width <= 210) || length <= 210 && width <= 285) { + Double priceArr[] = {46.0, 68.0, 117.0, 157.0, 236.0, 457.0}; + list = acountPlaceMatPrice(kind, count, list, priceArr); + } else if (length <= 436 && width <= 285 || length <= 285 && width <= 436) { + Double priceArr[] = {88.0, 122.0, 191.0, 269.0, 457.0, 896.0}; + list = acountPlaceMatPrice(kind, count, list, priceArr); + } else if (length <= 638 && width <= 285 || length <= 285 && width <= 638) { + Double priceArr[] = {137.0, 204.0, 350.0, 489.0, 810.0, 1482.0}; + list = acountPlaceMatPrice(kind, count, list, priceArr); + } else if (length <= 852 && width <= 285 || length <= 285 && width <= 852) { + Double priceArr[] = {183.0, 272.0, 466.0, 652.0, 975.0, 1681.0}; + list = acountPlaceMatPrice(kind, count, list, priceArr); + } else if (length <= 1050 && width <= 285 || length <= 285 && width <= 2050) { + Double priceArr[] = {229.0, 340.0, 582.0, 815.0, 1279.0, 2470.0}; + list = acountPlaceMatPrice(kind, count, list, priceArr); + } else if (length <= 587 && width <= 428 || length <= 428 && width <= 587) { + Double priceArr[] = {195.0, 262.0, 408.0, 554.0, 869.0, 1659.0}; + list = acountPlaceMatPrice(kind, count, list, priceArr); + } else if (length <= 638 && width <= 428 || length <= 428 && width <= 638) { + Double priceArr[] = {252.0, 352.0, 570.0, 755.0, 1191.0, 2263.0}; + list = acountPlaceMatPrice(kind, count, list, priceArr); + } else if (length <= 779 && width <= 428 || length <= 428 && width <= 778) { + Double priceArr[] = {321.0, 430.0, 691.0, 951.0, 1434.0, 2765.0}; + list = acountPlaceMatPrice(kind, count, list, priceArr); + } else if (length <= 880 && width <= 428 || length <= 428 && width <= 880) { + Double priceArr[] = {349.0, 484.0, 796.0, 1051.0, 1681.0, 3258.0}; + list = acountPlaceMatPrice(kind, count, list, priceArr); + } else if (length <= 1050 && width <= 428 || length <= 428 && width <= 1050) { + Double priceArr[] = {419.0, 587.0, 900.0, 1191.0, 1985.0, 3748.0}; + list = acountPlaceMatPrice(kind, count, list, priceArr); + } else if (length <= 638 && width <= 574 || length <= 574 && width <= 638) { + Double priceArr[] = {274.0, 408.0, 699.0, 927.0, 1535.0, 2964.0}; + list = acountPlaceMatPrice(kind, count, list, priceArr); + } else if (length <= 779 && width <= 529 || length <= 529 && width <= 779) { + Double priceArr[] = {321.0, 430.0, 691.0, 951.0, 1434.0, 2765.0}; + list = acountPlaceMatPrice(kind, count, list, priceArr); + } else if (length <= 880 && width <= 580 || length <= 580 && width <= 880) { + Double priceArr[] = {349.0, 484.0, 796.0, 1051.0, 1681.0, 3258.0}; + list = acountPlaceMatPrice(kind, count, list, priceArr); + } else if (length <= 863 && width <= 638 || length <= 638 && width <= 863) { + Double priceArr[] = {411.0, 612.0, 993.0, 1390.0, 2303.0, 4446.0}; + list = acountPlaceMatPrice(kind, count, list, priceArr); + } + return list; + } + + /** + * 餐垫纸遍历添加价格 + */ + private List acountPlaceMatPrice(String kind, int count, List list, Double[] priceArr) { + int countArr[] = {500, 1000, 2000, 3000, 5000, 10000}; + Product pro; + double beishu = 1; + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count || list.size() > 3) { + continue; + } + pro = new Product(); + pro.setCount(countArr[i]); + if (countArr[i] <= 500) { + beishu = 2.2; + } else if (countArr[i] <= 3000) { + beishu = 1.8; + } else { + beishu = 1.5; + } + // 55克 比80克便宜2分钱一张 + if ("1".equals(kind)) { + pro.setPrice(Math.ceil(priceArr[i] * beishu - countArr[i] * 0.02)); + } else if ("0".equals(kind)) {// 80克 + pro.setPrice(Math.ceil(priceArr[i] * beishu)); + } + list.add(pro); + } + return list; + } + + /** + * 硫酸纸吊牌价格 + * + * @param count + */ + public List getAcidTagsPrice(Double length, Double width, String size1, int count) { + List list = new ArrayList<>(); + int countArr[] = {1000, 2000, 5000, 10000}; + if ((length > 6.8 || width > 3) && (length > 3 || width > 6.8)) { + int priceArr[] = {200, 360, 720, 1300}; + list = acountAcidTagsPrice(count, list, countArr, priceArr); + } else { + int priceArr[] = {180, 320, 620, 1100}; + list = acountAcidTagsPrice(count, list, countArr, priceArr); + } + return list; + } + + /** + * 硫酸纸吊牌价格计算 + * + * @param count + * @param list + * @param countArr + * @param priceArr + */ + private List acountAcidTagsPrice(int count, List list, int[] countArr, int[] priceArr) { + Product pro; + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count || list.size() > 3) { + continue; + } + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(Math.ceil(priceArr[i])); + list.add(pro); + } + return list; + } + + /** + * 号码布价格计算 + * + * @param kind + * @param num + * @param width + * @param length + * @param list + * @param count + * @return + */ + public List getHmbPrice(String kind, int num, Double length, Double width, int count, List list) { + Product pro; + double price = 0; + if (length == 240 && width == 200 || length == 200 && width == 240) { + if (kind.equals("春亚布")) { + price = num * count * 1.8; + } else { + price = num * count * 2.5; + } + } else if (length == 200 && width == 140 || length == 140 && width == 200) { + if (kind.equals("春亚布")) { + price = num * count * 1.5; + } else { + price = num * count * 1.3; + } + } else { + if (kind.equals("春亚布")) { + price = num * count * 1.5; + } else { + price = num * count * 1.8; + } + } + + pro = new Product(); + pro.setCount(count); + pro.setPrice(Math.ceil(price) > 50 ? price : 50); + list.add(pro); + return list; + } + + /** + * 锦旗价格计算 + * + * @param kind + * @param num + * @param width + * @param length + * @param list + * @param count + * @return + */ + public List getJQPrice(String kind, int num, Double length, Double width, int count, List list) { + Product pro; + double price = 0; + if (length == 60 && width == 90 || length == 90 && width == 60) { + if (kind.equals("小龙须黄字")) { + price = num * count * 45; + } else if (kind.equals("小龙须3d镀金")) { + price = num * count * 86; + } else if (kind.equals("大龙须黄字")) { + price = num * count * 66; + } else if (kind.equals("大龙须3d镀金")) { + price = num * count * 88; + } else { + price = num * count * 130; + } + } else if (length == 70 && width == 110 || length == 110 && width == 70) { + if (kind.equals("小龙须黄字")) { + price = num * count * 47; + } else if (kind.equals("小龙须3d镀金")) { + price = num * count * 88; + } else if (kind.equals("大龙须黄字")) { + price = num * count * 80; + } else { + price = num * count * 98; + } + } else if (length == 80 && width == 120 || length == 120 && width == 80) { + if (kind.equals("小龙须黄字")) { + price = num * count * 85; + } else if (kind.equals("小龙须3d镀金")) { + price = num * count * 125; + } else if (kind.equals("大龙须黄字")) { + price = num * count * 90; + } else { + price = num * count * 140; + } + } else if (length == 70 && width == 120 || length == 120 && width == 70) { + price = num * count * 158; + } else { + price = num * count * 220; + } + + pro = new Product(); + pro.setCount(count); + pro.setPrice(Math.ceil(price)); + list.add(pro); + return list; + } + + /** + * 彩旗价格计算 + * + * @param num + * @param width + * @param length + * @param list + * @param count + * @return + */ + public List getCQPrice(int num, Double length, Double width, int count, List list) { + Product pro; + double price = 0; + if (length == 40 && width == 80 || length == 80 && width == 40) { + price = num * count * 80; + } else if (length == 60 && width == 90 || length == 90 && width == 60) { + price = num * count * 130; + } else if (length == 70 && width == 120 || length == 120 && width == 70) { + price = num * count * 158; + } else { + price = num * count * 220; + } + + pro = new Product(); + pro.setCount(count); + pro.setPrice(Math.ceil(price)); + list.add(pro); + return list; + } + + /** + * 封口贴铜板不干胶价格计算 + * + * @param num + * @param list + * @return + */ + public List getFktPrice(int num, List list) { + Product pro; + double price = 0; + for (int i = 1; i < countArr.length; i++) { + if (countArr[i] == 1000) { + price = 50.0 * num; + } else if (countArr[i] == 2000) { + price = 80.0 * num; + } else if (countArr[i] == 3000) { + price = 150.0 * num; + } else if (countArr[i] == 5000) { + price = 175.0 * num; + } else if (countArr[i] == 10000) { + price = 240.0 * num; + } else { + price = 450.0 * num; + } + + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(Math.ceil(price)); + list.add(pro); + } + return list; + } + + /** + * PVC亮光异型卡片价格计算 + * + * @param dto + * @param number + * @param width + * @param length + * @param area + * @param count + * @param priceList + * @return + */ + /*public List getPVCPrice(String kindValue,int count,double width, double length, List list) { + Product pro; + double price = 0,dj = 0, bz = 1; + double area = (width*length)/10000; + int countArr[] = { 500, 1000, 2000, 5000, 10000 }; + + if(area <= 0.0016) { + bz = 2.7; + }else if(area <= 0.0025) { + bz = 1.8; + }else if(area <= 0.0036) { + bz = 1.3; + }else if(area <= 0.0042) { + bz = 1.05; + } + + for(int i = 0; i< countArr.length; i++) { + if (countArr[i] < count || list.size() > 3) { + continue; + } + if(kindValue.equals("2")) { + if(countArr[i] == 500) { + dj = 45; + }else if(countArr[i] == 1000) { + dj = 34; + }else if(countArr[i] == 2000) { + dj = 31; + }else if(countArr[i] == 5000) { + dj = 29; + }else if(countArr[i] == 10000) { + dj = 28; + } + }else { + if(countArr[i] == 500) { + dj = 63; + }else if(countArr[i] == 1000) { + dj = 54; + }else if(countArr[i] == 2000) { + dj = 50; + }else if(countArr[i] == 5000) { + dj = 48; + }else if(countArr[i] == 10000) { + dj = 47; + } + } + + price = bz*dj*countArr[i]*area; + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(price); + list.add(pro); + } + return list; + }*/ + + /** + * 硫酸纸价格计算 + * + * @param dto + * @param width + * @param length + * @param count + * @param list + * @return + */ + public List getLszPrice(Product dto, double width, double length, int count, List list) { + double price = 0, dj = 0, area = 0; + String craft[] = dto.getCraft(); + int lszCountArr[] = new int[]{500, 1000, 2000, 3000, 5000, 10000, 20000}; + for (int i = 0; i < lszCountArr.length; i++) { + Product pro = new Product(); + if (lszCountArr[i] < count || list.size() > 3) { + continue; + } + if ((width <= 6.8 && length <= 3) || (width <= 6.8 && length <= 3)) { + if ("直角".equals(craft[0])) { + dj = 14.5; + } else { + dj = 36.5; + } + } else if ((width <= 9 && length <= 5) || (width <= 9 && length <= 5)) { + if ("直角".equals(craft[0])) { + dj = 14.5; + } else { + dj = 36.5; + } + } else if ((width <= 10 && length <= 14) || (width <= 14 && length <= 10)) { + if ("直角".equals(craft[0])) { + dj = 11.5; + } else { + dj = 17.5; + } + } else if ((width <= 21 && length <= 14) || (width <= 14 && length <= 21)) { + if ("直角".equals(craft[0])) { + dj = 9.6; + } else { + dj = 12.1; + } + } else if ((width <= 21 && length <= 28.5) || (width <= 28.5 && length <= 21)) { + if ("直角".equals(craft[0])) { + dj = 7.6; + } else { + dj = 11.1; + } + } else { + if ("直角".equals(craft[0])) { + dj = 7.2; + } else { + dj = 10.7; + } + } + + dj *= 2;//按照供应商成本价2倍计算 + if (lszCountArr[i] == 500) { + area = width * length * 800 / 10000; + } else { + area = width * length * lszCountArr[i] / 10000; + if ((width >= 21 && length >= 28.5) || (width >= 28.5 && length >= 21)) { + area *= 0.85; + } + } + + price = Math.ceil(dj * area); + pro.setPrice(price > 80 ? price : 80); + + //烫金工艺 + if ("烫金".equals(dto.getCraftTang())) { + area = length * width / 10000; + double tangPrice = 0; + double tangPriceArr[] = new double[4]; + if (area <= 0.005) { + tangPriceArr = new double[]{90.0, 135.0, 205.0, 255.0, 425, 850, 1700}; + } else if (area <= 0.01) { + tangPriceArr = new double[]{95.0, 140.0, 225.0, 300.0, 500, 1000, 2000}; + } else if (area <= 0.015) { + tangPriceArr = new double[]{100.0, 145.0, 245.0, 325.0, 545, 1090, 2180}; + } else if (area <= 0.025) { + tangPriceArr = new double[]{115.0, 165.0, 280.0, 380.0, 635, 1270, 2540}; + } else if (area <= 0.035) { + tangPriceArr = new double[]{135.0, 205.0, 335.0, 468.0, 780, 1560, 3120}; + } else { + tangPriceArr = new double[]{145.0, 225.0, 380.0, 535.0, 895, 1790, 3580}; + } + + tangPrice = tangPriceArr[i] * 1.4 > 135 ? tangPriceArr[i] * 1.4 : 135; + pro.setPrice(Math.ceil(pro.getPrice() + tangPrice)); + } + pro.setCount(lszCountArr[i]); + list.add(pro); + } + + return list; + } + + /** + * 80克硫酸纸价格计算 + * + * @param dto + * @param width + * @param length + * @param count + * @param list + * @return + */ + public List get80LszPrice(Product dto, double width, double length, int count, List list) { + double dj = 0; + double l = 420; + double w = 285; + length *= 10; + width *= 10; + Product pro = new Product(); + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + + // 报的数量需要多少张大纸 + int num = (int) Math.ceil(count / max); +// if (count <= 1000) { +// dj = 150; +// } else { +// dj = 150 + Math.ceil(count / 1000) * 20; +// } + if (dto.getKindValue().equals("2")) { + dj = 0.86; + } else { + dj = 0.5; + } + pro.setPrice(130 + Math.ceil((num + 100) * dj)); + double area = 0; + if ("烫金".equals(dto.getCraftTang())) { + int lszCountArr[] = new int[]{500, 1000, 2000, 3000, 5000, 10000, 20000}; + int i = 0; + for (int j = 0; j < lszCountArr.length; j++) { + if (lszCountArr[i] > count) { + break; + } + i = j; + } + area = length * width / 10000; + double tangPrice = 0; + double tangPriceArr[] = new double[4]; + if (area <= 0.005) { + tangPriceArr = new double[]{135, 189, 287, 357, 595, 1190, 2380}; + } else if (area <= 0.01) { + tangPriceArr = new double[]{135, 196, 315, 420, 700, 1400, 2800}; + } else if (area <= 0.015) { + tangPriceArr = new double[]{140, 203, 343, 455, 763, 1526, 3052}; + } else if (area <= 0.025) { + tangPriceArr = new double[]{161, 231, 392, 532, 889, 1778, 3556}; + } else if (area <= 0.035) { + tangPriceArr = new double[]{189, 287, 469, 655.2, 1092, 2184, 4368}; + } else { + tangPriceArr = new double[]{203, 315, 532, 749, 1253, 2506, 5012}; + } + + tangPrice = tangPriceArr[i] * 1.4 > 135 ? tangPriceArr[i] * 1.4 : 135; + pro.setPrice(Math.ceil(pro.getPrice() + tangPrice)); + } + pro.setCount(count); + list.add(pro); + return list; + } + + /** + * 常规刚古水纹超白不干胶计算 + * + * @param number + * @param width + * @param length + * @param count + * @return + */ + public List getGgSwPrice(double length, double width, int count, int number) { + double price = 0, area = 0; + List list = new ArrayList(); + Product pro = null; + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count || list.size() > 3) { + continue; + } + pro = new Product(); + area = (length * width * countArr[i]) / 10000; + price = 70 * area * number; + pro.setPrice(Math.ceil(price > 80 ? price : 80)); + pro.setCount(countArr[i]); + list.add(pro); + } + return list; + } + + /** + * 帆布计算 + * + * @param dto + * @param number + * @param width + * @param length + * @param count + * @param list + * @return + */ + public List getFbPrice(Product dto, Integer number, Double width, Double length, int count, List list) { + Product pro = new Product(); + double price = 0, dj = 0; + String[] craft = dto.getCraft(); + if (dto.getStickerKind().equals("套餐")) { + pro.setCount(count); + pro.setPrice(198.0); + list.add(pro); + } else { + + double area = length * width * count / 10000; + double d = length * width * count / 10000; + if (length == 100 && width == 45) { + price = 40 * number * count; + if (craft != null) { + for (int i = 0; i < craft.length; i++) { + if (craft[i].equals("缝兜")) { + price += number * 10; + } else { + continue; + } + } + } + pro.setCount(count); + pro.setPrice(price); + list.add(pro); + }/*else if(length == 45 && width == 45){ + price = 30 * number * count; + if(craft != null) { + for(int i = 0; i< craft.length; i++) { + if(craft[i].equals("缝兜")) { + price += number * 10; + }else { + continue; + } + } + } + + pro.setPrice(price); + }*/ else { + if (d <= 0.2) { + area *= number; + } + + if (area <= 0.2) { + price = 45; + } else if (area <= 0.5) { + dj = 80; + } else if (area <= 0.7) { + dj = 75; + } else if (area <= 0.9) { + dj = 70; + } else if (area <= 1) { + dj = 68; + } else if (area <= 1.9) { + dj = 65; + } else if (area <= 3) { + dj = 60; + } else { + dj = 55; + } + + if (d > 0.2) { + price = area * dj * number; + } else { + if (area <= 0.2) { + price = 45; + } else { + price = area * dj; + } + } + + if (craft != null) { + for (int i = 0; i < craft.length; i++) { + if (craft[i].equals("缝兜")) { + price += number * 10; + } else { + continue; + } + } + } + + /*if(d > 3 && number > 1) { + price += (number-1) * 20; + }*/ + + price = Math.ceil(price > 45 ? price : 45); + + double other_price = 0; + if (length * width < 40 * 50) { + int total = count * number; + for (int i = 1; i <= total; i++) { + other_price = getFBPirce(width, length, i, 1); + if (other_price > 45) { + price = 45 + (total - i + 1) * 6; + break; + } + } + + } + pro.setPrice(price); + pro.setCount(count); + pro.setWeight(df.format(area * 0.28 * number)); + list.add(pro); + } + + } + return list; + } + + public double getFBPirce(double length, double width, int count, int number) { + double area = length * width * count / 10000; + double d = length * width * count / 10000; + double price = 0, dj = 0; + if (length == 100 && width == 45) { + price = 40 * number * count; + } else { + if (d <= 0.2) { + area *= number; + } + + if (area <= 0.2) { + price = 45; + } else if (area <= 0.5) { + dj = 80; + } else if (area <= 0.7) { + dj = 75; + } else if (area <= 0.9) { + dj = 70; + } else if (area <= 1) { + dj = 68; + } else if (area <= 1.9) { + dj = 65; + } else if (area <= 3) { + dj = 60; + } else { + dj = 55; + } + + if (d > 0.2) { + price = area * dj * number; + } else { + if (area <= 0.2) { + price = 45; + } else { + price = area * dj; + } + } + + price = Math.ceil(price > 45 ? price : 45); + } + return price; + } + + /** + * 亚克力计算 + * + * @param dto + * @param number + * @param width + * @param length + * @param count + * @param list + * @return + */ + public List getYklPrice(Product dto, Integer number, Double width, Double length, int count, List< + Product> list) { + Product pro = new Product(); + double price = 0, dj = 0; + double l = 1200; + double w = 2400; + double area = length * width * count / 10000; + String kind = dto.getKind2Value(); + length = length * 10; + width = width * 10; + if ((length > l || width > w) && (length > w || width > l)) + return null; + // 一张大纸能做多少个此类尺寸的不干胶 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + + // 报的数量需要多少张大纸 + int num = (int) Math.ceil(count / max); + if (num > 1) { + if (kind.equals("1")) { + dj = 317; + } else if (kind.equals("2")) { + dj = 357; + } else if (kind.equals("3")) { + dj = 477; + } else if (kind.equals("4")) { + dj = 375; + } else { + dj = 415; + } + + price = dj * 1.8 + dj * 1.5 * (num - 1); + pro.setPrice(Math.ceil(price)); + } else { + if (area <= 0.02) { + dj = 1800; + } else if (area <= 0.03) { + dj = 1300; + } else if (area <= 0.05) { + dj = 1000; + } else if (area <= 0.06) { + dj = 900; + } else if (area <= 0.07) { + dj = 800; + } else if (area <= 0.08) { + dj = 700; + } else if (area <= 0.16) { + dj = 650; + } else if (area <= 0.25) { + dj = 550; + } else if (area <= 0.4) { + dj = 500; + } else if (area <= 0.5) { + dj = 400; + } else if (area <= 0.6) { + dj = 350; + } else if (area <= 0.8) { + dj = 300; + } else if (area <= 1) { + dj = 280; + } else if (area <= 2) { + dj = 250; + } else if (area <= 3) { + dj = 240; + } else if (area <= 4) { + dj = 230; + } else if (area <= 5) { + dj = 225; + } + + price = area * dj * 2.5; + if (kind.equals("5")) { + price = price * 1.2; + } else { + if (kind.equals("2")) { + price = price * 1.1; + } else if (kind.equals("3")) { + price = price * 1.3; + } + } + } + double weight = 0; + if (kind.equals("1") || kind.equals("4")) { + weight = area * number * 2.26; + } else if (kind.equals("2") || kind.equals("5")) { + weight = area * number * 3.06; + } else if (kind.equals("3")) { + weight = area * number * 5.11; + } + pro.setPrice(Math.ceil(price > 50 ? price : 50)); + pro.setCount(count); + pro.setWeight(String.valueOf(df.format(weight))); + list.add(pro); + return list; + } + + /** + * 灯布计算 + * + * @param width + * @param length + * @param count + * @param list + * @return + */ + public List getDbPrice(String kind, Double width, Double length, int count, List list) { + //11-550灯布 12-520灯布 13-550黑底灯布 + Product pro = new Product(); + double price = 0, dj = 0; + double area = length * width * count; + if (kind.equals("11")) { + if (area <= 5) { + dj = 20; + } else if (area <= 10) { + dj = 18; + } else if (area > 10) { + dj = 17; + } + } else if (kind.equals("12")) { + if (area <= 5) { + dj = 16; + } else if (area <= 10) { + dj = 12; + } else if (area > 10) { + dj = 10; + } + } else { + if (area <= 5) { + dj = 24; + } else if (area <= 10) { + dj = 20; + } else if (area > 10) { + dj = 18; + } + } + + + price = area * dj; + if (area >= 7 && area <= 10) { + price = price * 0.9; + } + if (kind.equals("11")) { + price = Math.ceil(price > 55 ? price : 55); + } else if (kind.equals("12")) { + price = Math.ceil(price > 50 ? price : 50); + } else { + price = Math.ceil(price > 60 ? price : 60); + } + pro.setPrice(price); + pro.setCount(count); + list.add(pro); + + return list; + } + + /** + * 串旗计算 + * + * @param width + * @param length + * @param count + * @param num + * @param list + * @return + */ + public List getCqPrice(Double width, Double length, int count, int num, List list) { + Product pro = new Product(); + double price = 0, dj = 0; + double area = (width * length) / 10000; + if (area <= 0.042) { + price = 50 + 5 * count * num; + } else if (area <= 0.1125) { + dj = 120; + } else if (area <= 0.2) { + dj = 110; + } else if (area <= 0.5) { + dj = 100; + } else if (area <= 0.7) { + dj = 95; + } else if (area <= 0.9) { + dj = 90; + } else if (area <= 1) { + dj = 85; + } else { + dj = 80; + } + + if (area > 0.042) { + price = dj * area * count * num; + } + + price = Math.ceil(price > 50 ? price : 50); + double wei = area * 0.29 * count * num; + pro.setPrice(price); + pro.setCount(count); + pro.setWeight(df.format(wei)); + list.add(pro); + return list; + } + + /** + * 桌布 + * + * @param length + * @param width + * @param count + * @param number + * @return + */ + public List getTableClothPrice(Double length, Double width, int count, Integer + number, List priceList) { + double price = 0, dj = 0; + if (length <= 0.8 && width <= 0.8) { + dj = 77; + } else if ((length <= 0.8 && width <= 1.6) || (length <= 1.6 && width <= 0.8)) { + dj = 43; + } else if ((length <= 1.2 && width <= 1.6) || (length <= 1.6 && width <= 1.2)) { + dj = 29; + } else if ((length <= 1.4 && width <= 1.6) || (length <= 1.6 && width <= 1.4)) { + dj = 28; + } else if ((length <= 1.6 && width <= 2.0) || (length <= 2.0 && width <= 1.6)) { + dj = 27; + }/*else if((length <= 1.8 && width <= 2.0) || (length <= 2.0 && width <= 1.8)) { + dj = 26; + }else if((length <= 1.6 && width <= 2.5) || (length <= 2.5 && width <= 1.6)) { + dj = 26; + }*/ else { + dj = 26; + } + Product pro = new Product(); + List list = new ArrayList(); + price = length * width * count * number * dj; + pro.setCount(count); + pro.setPrice(Math.ceil(price > 50 ? price : 50)); + pro.setWeight(df.format(0.3 * length * width * count * number)); + list.add(pro); + return list; + } + + public List getShkPrice(String size, int count, Integer number) { + int[] countArr = {200, 500, 1000, 2000, 5000, 10000}; + double[] priceArr = {}; + List list = new ArrayList(); + Product pro = new Product(); + if (size.equals("9*5.4")) { + priceArr = new double[]{25.0, 26.0, 27.0, 50.0, 110.0, 200.0}; + } else if (size.equals("9*11")) { + priceArr = new double[]{27.0, 37.0, 45.0, 80.0, 210.0, 400.0}; + } else if (size.equals("8*11")) { + priceArr = new double[]{27.0, 37.0, 45.0, 80.0, 210.0, 400.0}; + } else if (size.equals("7*14")) { + priceArr = new double[]{27.0, 37.0, 45.0, 80.0, 210.0, 400.0}; + } else if (size.equals("8*14")) { + priceArr = new double[]{44.0, 46.0, 72.0, 120.0, 260.0, 500.0}; + } else if (size.equals("10*15")) { + priceArr = new double[]{44.0, 66.0, 88.0, 150.0, 350.0, 600.0}; + } else if (size.equals("11*18")) { + priceArr = new double[]{61.0, 83.0, 94.0, 160.0, 400.0, 650.0}; + } else if (size.equals("9*9")) { + priceArr = new double[]{30.0, 41.0, 44.0, 75.0, 200.0, 400.0}; + } else { + priceArr = new double[]{44.0, 66.0, 88.0, 120.0, 260.0, 500.0}; + } + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + + if (list.size() > 3) { + break; + } + + pro = new Product(); + pro.setCount(countArr[i]); + + pro.setPrice(Math.ceil(number * priceArr[i])); + list.add(pro); + } + return list; + } + + public List getSdkPrice(int count, Integer number) { + int[] countArr = {50, 100, 500, 1000, 2000, 5000, 10000}; + double[] priceArr = new double[]{339, 599, 1800.0, 3000.0, 4800.0, 8000.0, 15000.0}; + Product pro = new Product(); + List list = new ArrayList(); + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + + if (list.size() > 3) { + break; + } + pro = new Product(); + pro.setCount(countArr[i]); + + pro.setPrice(Math.ceil(number * priceArr[i])); + list.add(pro); + } + return list; + } +} diff --git a/src/main/java/lingtao/net/util/PublicMethods.java b/src/main/java/lingtao/net/util/PublicMethods.java new file mode 100644 index 0000000..ca9813e --- /dev/null +++ b/src/main/java/lingtao/net/util/PublicMethods.java @@ -0,0 +1,51 @@ +package lingtao.net.util; + +import org.apache.shiro.SecurityUtils; + +import lingtao.net.bean.SysUser; + +public class PublicMethods { + + // 是否有【超管】或者【组长】身份 + public boolean isSuperOrManager() { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + String role = user.getRole(); + boolean flag = false; + if (role.contains(",")) { + String[] split = role.split(","); + for (int i = 0; i < split.length; i++) { + if ("1011".equals(split[i]) || "1".equals(split[i])) { + flag = true; + break; + } + } + } else { + if ("1011".equals(role) || "1".equals(role)) { + flag = true; + } + } + return flag; + } + + // 是否有【超管】身份 + public boolean isSuper() { + SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); + String role = user.getRole(); + boolean flag = false; + if (role.contains(",")) { + String[] split = role.split(","); + for (int i = 0; i < split.length; i++) { + if ("1".equals(split[i]) || "2".equals(split[i])) { + flag = true; + break; + } + } + } else { + if ("1".equals(role) || "2".equals(role)) { + flag = true; + } + } + return flag; + } + +} diff --git a/src/main/java/lingtao/net/util/StickersDoublePrice.java b/src/main/java/lingtao/net/util/StickersDoublePrice.java new file mode 100644 index 0000000..781531c --- /dev/null +++ b/src/main/java/lingtao/net/util/StickersDoublePrice.java @@ -0,0 +1,108 @@ +package lingtao.net.util; + +import lingtao.net.bean.Product; + +import java.util.ArrayList; +import java.util.List; + +/** + * A级铜版纸不干胶价格 + */ +public class StickersDoublePrice { + + static int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000}; + + // 双面印刷不干胶报价 + public static List getPrice(double length, double width, int count, int number) { + List list = new ArrayList(); + Product pro = new Product(); + double area = length * width; + double[] priceArr = getBasePrice(area); + + for (int i = 0; i < bigCountArr.length; i++) { + if (bigCountArr[i] < count || list.size() > 3) { + continue; + } + pro = new Product(); + pro.setCount(bigCountArr[i]); + pro.setPrice(priceArr[i]);//不够140元按照140元算 + list.add(pro); + } + + //多款计算 + if (number > 1) { + for (Product product : list) { + product.setPrice(product.getPrice() * number); + } + } + + return list; + } + + private static double[] getBasePrice(double area) { + double[] startPriceArr = null; + double[] endPriceArr = null; + double avgArea = 0; + if (area < 25) { + return new double[]{70, 92, 164, 236, 370, 740, 1480}; + } else if (area >= 25 && area < 48.6) { + if (area == 25) { + return new double[]{70, 92, 164, 236, 370, 740, 1480}; + } + avgArea = 25 + 48.6; + startPriceArr = new double[]{70, 92, 164, 236, 370, 740, 1480}; + endPriceArr = new double[]{130, 180, 320, 440, 700, 1400, 2700}; + } else if (area >= 48.6 && area < 81) { + if (area == 48.6) { + return new double[]{130, 180, 320, 440, 700, 1400, 2700}; + } + avgArea = 81 + 48.6; + startPriceArr = new double[]{130, 180, 320, 440, 700, 1400, 2700}; + endPriceArr = new double[]{220, 310, 572, 824, 1230, 2400, 4710}; + } else if (area >= 81 && area < 126) { + if (area == 81) { + return new double[]{220, 310, 572, 824, 1230, 2400, 4710}; + } + avgArea = 81 + 126; + startPriceArr = new double[]{220, 310, 572, 824, 1230, 2400, 4710}; + endPriceArr = new double[]{370, 436, 760, 1086, 1740, 3460, 6920}; + } else if (area >= 126 && area < 170) { + if (area == 126) { + return new double[]{370, 436, 760, 1086, 1740, 3460, 6920}; + } + avgArea = 126 + 170; + startPriceArr = new double[]{370, 436, 760, 1086, 1740, 3460, 6920}; + endPriceArr = new double[]{516, 594, 1050, 1500, 2400, 4800, 9600}; + } else if (area >= 170 && area < 210) { + if (area == 170) { + return new double[]{516, 594, 1050, 1500, 2400, 4800, 9600}; + } + avgArea = 170 + 210; + startPriceArr = new double[]{516, 594, 1050, 1500, 2400, 4800, 9600}; + endPriceArr = new double[]{630, 772, 1360, 1948, 3124, 6248, 12496}; + } else if (area >= 210 && area < 230) { + if (area == 210) { + return new double[]{630, 772, 1360, 1948, 3124, 6248, 12496}; + } + avgArea = 210 + 230; + startPriceArr = new double[]{630, 772, 1360, 1948, 3124, 6248, 12496}; + endPriceArr = new double[]{770, 860, 1512, 2170, 3470, 4940, 11880}; + } else if (area >= 230 && area < 294) { + if (area == 230) { + return new double[]{770, 860, 1512, 2170, 3470, 4940, 11880}; + } + avgArea = 230 + 294; + startPriceArr = new double[]{770, 860, 1512, 2170, 3470, 4940, 11880}; + endPriceArr = new double[]{840, 970, 1700, 2434, 3904, 7800, 15600}; + } else { + return new double[]{840, 970, 1700, 2434, 3904, 7800, 15600}; + } + double[] priceArr = new double[bigCountArr.length]; + for (int i = 0; i < bigCountArr.length; i++) { + priceArr[i] = Math.ceil((startPriceArr[i] + endPriceArr[i]) / avgArea * area); + } + + return priceArr; + } + +} diff --git a/src/main/java/lingtao/net/util/SwzStickersPrice.java b/src/main/java/lingtao/net/util/SwzStickersPrice.java new file mode 100644 index 0000000..4532dfb --- /dev/null +++ b/src/main/java/lingtao/net/util/SwzStickersPrice.java @@ -0,0 +1,72 @@ +package lingtao.net.util; + +import lingtao.net.bean.Product; + +import java.util.ArrayList; +import java.util.List; + +/* + * 常规-树纹纸报价*/ +public class SwzStickersPrice { + int bigCountArr[] = {500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000, + 100000}; + + /* + * 根据供应商报价,按照利润算出报价*/ + public double setPrice(int count, double length, double width, int number, String kind) { + double price = 0; + if (kind.equals("浮雕烫金")) { + double max = Math.max(length, width); + double min = Math.min(length, width); + if (max <= 6) { + //长=length+0.3cm(间隔)+length+1cm(出血) + price = (max * 2 + 1.3) * (min + 1) * 1.8; + } else { + //长=length+1cm(间隔)+length+1cm(出血) + price = (max * 2 + 2) * (min + 1) * 1.8; + } + //20刀模费,5mm出血,9元/平方 + price += 20 + (length + 0.5) * (width + 0.5) * count / 10000 * 9; + price = Math.ceil(2 * price * 2);//50%利润 + price = price < 480 ? 480 : price; + } else if (kind.equals("彩色印刷")) { + double l = 425; + double w = 285; + // 换成毫米每边+2 + length = length * 10 + 4; + width = width * 10 + 4; + if ((length > l || width > w) && (length > w || width > l)) + return 0; + // 一张大纸能做多少个此类尺寸的不干胶 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + + // 报的数量需要多少张大纸 + int num = (int) Math.ceil(count / max); + price = 50 + (num - 1) * 5.5; + } else {//激凸、烫金工艺一样价格 + //20刀模费,20版费,5mm出血,7.5元/平方 + price = (length + 0.5) * (width + 0.5) * count / 10000 * 7.5 + 40; + price = Math.ceil(2 * price); + price /= 0.4;//60%利润 + } + + + return price; + } + + public List getPrice(int count, double length, double width, int number, String craft) { + List list = new ArrayList(); + Product pro = new Product(); + for (int i = 0; i < bigCountArr.length; i++) { + if (bigCountArr[i] < count || list.size() > 3) { + continue; + } + pro = new Product(); + pro.setCount(bigCountArr[i]); + pro.setPrice(Math.ceil(setPrice(bigCountArr[i], length, width, number, craft))); + list.add(pro); + } + return list; + } +} diff --git a/src/main/java/lingtao/net/util/YaJinStickersPrice.java b/src/main/java/lingtao/net/util/YaJinStickersPrice.java new file mode 100644 index 0000000..b5a9711 --- /dev/null +++ b/src/main/java/lingtao/net/util/YaJinStickersPrice.java @@ -0,0 +1,116 @@ +package lingtao.net.util; + +import java.util.ArrayList; +import java.util.List; + +import lingtao.net.bean.Product; + +/** + * 哑金/哑银不干胶价格 + */ +public class YaJinStickersPrice { + + int countArr[] = { 500, 1000, 2000, 3000, 4000, 5000, 10000 }; + + // 根据尺寸计算价格 + public List accountPriceBySize(Double width, Double length, int count, int[] priceArr1, int[] priceArr2, + int[] priceArr3) { + List list = new ArrayList(); + if ((length <= 6 && width <= 5) || (length <= 5 && width <= 6) || (length <= 10 && width <= 3) + || (length <= 3 && width <= 10)) { + list = getPrice(count, priceArr1); + } else if ((length <= 8 && width <= 8) || (length <= 10 && width <= 6) || (length <= 6 && width <= 10)) { + list = getPrice(count, priceArr2); + } else if ((length <= 11 && width <= 11) || (length <= 12 && width <= 8) || (length <= 8 && width <= 12) + || (length <= 20) && (width <= 4) || (width <= 20) && (length <= 4)) { + list = getPrice(count, priceArr3); + } else { + return null; + } + return list; + } + + // 6*5cm以下及10*3cm以下 + // 6*5cm-8*8cm;10-3cm-10*6cm以内 + // 8*8cm-11*11cm;10*6-12*8CM;20*4以内 + private List getPrice(int count, int[] priceArr) { + Product pro = new Product(); + List list = new ArrayList(); + // 数量大于10000 + if (count > countArr[countArr.length - 1]) { + pro.setCount(count); + // 10000个的单价*数量 + pro.setPrice(Math.ceil(count * priceArr[countArr.length - 1] / countArr[countArr.length - 1])); + list.add(pro); + } + for (int i = 0; i < countArr.length; i++) { + if (countArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(countArr[i]); + pro.setPrice(Math.ceil(priceArr[i])); + list.add(pro); + } + return list; + } + + // 哑金不干胶不带凹凸 + public List getPriceNoAoTu(Double length, Double width, int count) { + double l = 404; + double w = 289; + double price = 0.0; + List list = new ArrayList(); + Product pro = new Product(); + // 换成毫米每边+2 + length = length * 10 + 4; + width = width * 10 + 4; + if ((length > l || width > w) && (length > w || width > l)) + return null; + // 一张A4纸 大的400*285 能做多少个此类尺寸的不干胶 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + // 报的数量需要多少张大纸 + int num = (int) Math.ceil(count / max); + if (max <= 20) { + price = 65; + } else if (max <= 50) { + price = 75; + } else if (max <= 100) { + price = 85; + } else if (max <= 200) { + price = 100; + } else if (max <= 300) { + price = 110; + } else { + price = 150; + } + if (max <= 200) { + /*price = price + (num - 1) * 12; +// if (num > 10) { +// price = price + (num - 1) * 10; +// } else { +// price = price + (num - 1) * 20; +// }*/ + if(num < 50) { + price = price + (num - 1 ) * 12; + }else if(num <= 100) { + price = price + (num - 1 ) * 10; + }else { + price = price + (num - 1 ) * 6; + } + } else { + if (num > 10) { + price = price + (num - 1) * 10; + } else { + price = price + (num - 1) * 30; + } + } + + pro.setCount(count); + pro.setPrice(price); + list.add(pro); + return list; + } + +} diff --git a/src/main/java/lingtao/net/util/YaYinStickersPrice.java b/src/main/java/lingtao/net/util/YaYinStickersPrice.java new file mode 100644 index 0000000..fcdbb3d --- /dev/null +++ b/src/main/java/lingtao/net/util/YaYinStickersPrice.java @@ -0,0 +1,173 @@ +package lingtao.net.util; + +import java.util.ArrayList; +import java.util.List; + +import lingtao.net.bean.Product; + +/** + * 哑银不干胶价格 + */ +public class YaYinStickersPrice { + + int bigCountArr[] = { 500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000, + 100000 }; + + public List bigSizeAcountPrice(int count, Double area, Double[] priceArr) { + Product pro = new Product(); + List list = new ArrayList(); + for (int i = 0; i < bigCountArr.length; i++) { + if (bigCountArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(bigCountArr[i]); + pro.setPrice(Math.ceil(area * bigCountArr[i] * priceArr[i])); + list.add(pro); + } + return list; + } + + public List getPrice(int count, Double area) { + List list = new ArrayList(); + if (area <= 0.0004) { + Double priceArrA[] = { 800.0, 525.0, 363.0, 300.0, 275.0, 255.0, 180.0, 100.0, 75.0, 70.0, 65.0, 60.0, 60.0, + 55.0, 50.0, 50.0 }; + list = bigSizeAcountPrice(count, area, priceArrA); + } else if (area <= 0.0006) { + Double priceArrA[] = { 535.0, 350.0, 242.0, 200.0, 184.0, 170.0, 100.0, 80.0, 70.0, 65.0, 60.0, 57.0, 55.0, + 52.0, 50.0, 49.0 }; + list = bigSizeAcountPrice(count, area, priceArrA); + } else if (area <= 0.0008) { + Double priceArrA[] = { 460.0, 300.0, 207.0, 172.0, 157.0, 146.0, 90.0, 70.0, 60.0, 54.0, 53.0, 52.0, 51.0, + 50.0, 49.0, 48.0 }; + list = bigSizeAcountPrice(count, area, priceArrA); + } else if (area <= 0.001) { + Double priceArrA[] = { 355.0, 233.0, 161.0, 134.0, 122.0, 113.0, 80.0, 40.0, 30.0, 29.0, 27.0, 26.0, 25.0, + 24.0, 22.0, 22.0 }; + list = bigSizeAcountPrice(count, area, priceArrA); + } else if (area <= 0.0012) { + Double priceArrA[] = { 267.0, 175.0, 121.0, 100.0, 92.0, 85.0, 70.0, 40.0, 30.0, 25.0, 24.0, 23.0, 22.0, + 21.0, 20.0, 19.0 }; + list = bigSizeAcountPrice(count, area, priceArrA); + } else if (area <= 0.0014) { + Double priceArrA[] = { 246.0, 162.0, 116.0, 92.0, 85.0, 78.0, 60.0, 40.0, 30.0, 25.0, 24.0, 23.0, 22.0, + 21.0, 20.0, 19.0 }; + list = bigSizeAcountPrice(count, area, priceArrA); + } else if (area <= 0.0016) { + Double priceArrA[] = { 220.0, 140.0, 97.0, 80.0, 74.0, 68.0, 50.0, 38.0, 30.0, 25.0, 24.0, 22.0, 21.0, 20.0, + 19.0, 18.0 }; + list = bigSizeAcountPrice(count, area, priceArrA); + } else if (area <= 0.0025) { + Double priceArrA[] = { 190.0, 124.0, 86.0, 71.0, 65.0, 60.0, 50.0, 38.0, 30.0, 26.0, 23.0, 21.0, 20.0, 19.0, + 18.0, 17.0 }; + list = bigSizeAcountPrice(count, area, priceArrA); + } else if (area <= 0.0035) { + Double priceArrA[] = { 150.0, 100.0, 70.0, 55.5, 45.0, 42.0, 40.0, 33.0, 28.0, 23.0, 19.0, 18.0, 17.0, 16.0, + 14.0, 14.0 }; + list = bigSizeAcountPrice(count, area, priceArrA); + } else if (area <= 0.0045) { + Double priceArrA[] = { 90.0, 59.0, 40.0, 34.0, 31.0, 28.0, 22.0, 19.0, 16.0, 15.0, 14.0, 14.0, 14.0, 14.0, + 14.0, 14.0 }; + list = bigSizeAcountPrice(count, area, priceArrA); + } else if (area <= 0.0084) { + Double priceArrA[] = { 66.0, 43.0, 30.0, 26.0, 23.0, 17.0, 15.0, 14.5, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, + 14.0, 14.0 }; + list = bigSizeAcountPrice(count, area, priceArrA); + } else if (area <= 0.012) { + Double priceArrA[] = { 50.0, 40.0, 30.0, 26.0, 20.0, 16.0, 13.0, 13.0, 13.0, 13.0, 13.0, 13.0, 13.0, 13.0, + 13.0, 13.0 }; + list = bigSizeAcountPrice(count, area, priceArrA); + } else if (area <= 0.015) { + Double priceArrA[] = { 48.0, 38.0, 29.0, 25.0, 18.0, 15.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, + 12.0, 12.0 }; + list = bigSizeAcountPrice(count, area, priceArrA); + } else if (area <= 0.02) { + Double priceArrA[] = { 40.0, 30.0, 25.0, 22.0, 18.0, 13.0, 12.0, 12.0, 12.0, 12.0, 12.0, 11.0, 11.0, 11.0, + 11.0, 11.0 }; + list = bigSizeAcountPrice(count, area, priceArrA); + } else if (area <= 0.04) { + Double priceArrA[] = { 38.0, 26.0, 23.0, 20.0, 15.0, 13.0, 13.0, 13.0, 13.0, 12.0, 12.0, 11.0, 11.0, 11.0, + 11.0, 11.0 }; + list = bigSizeAcountPrice(count, area, priceArrA); + } else if (area <= 0.06) { + Double priceArr[] = { 35.0, 24.0, 21.0, 19.0, 14.0, 13.0, 13.0, 13.0, 13.0, 12.0, 12.0, 11.0, 11.0, 11.0, + 11.0, 11.0 }; + list = bigSizeAcountPrice(count, area, priceArr); + } else if (area <= 0.1) { + Double priceArr[] = { 34.0, 22.0, 19.0, 18.0, 14.0, 13.0, 13.0, 13.0, 13.0, 12.0, 12.0, 11.0, 11.0, 11.0, + 11.0, 11.0 }; + list = bigSizeAcountPrice(count, area, priceArr); + } else if (area <= 0.2) { + Double priceArr[] = { 34.0, 21.0, 18.0, 17.0, 14.0, 13.0, 13.0, 13.0, 13.0, 12.0, 12.0, 11.0, 11.0, 11.0, + 11.0, 11.0 }; + list = bigSizeAcountPrice(count, area, priceArr); + } else if (area > 0.2) { + Double priceArr[] = { 34.0, 20.0, 17.0, 16.0, 14.0, 12.0, 12.0, 12.0, 12.0, 11.5, 11.5, 11.0, 11.0, 11.0, + 11.0, 11.0 }; + list = bigSizeAcountPrice(count, area, priceArr); + } + return list; + } + + + /* + * public List getPrice(int count, Double area, int areaArrIndex) { + * List list = new ArrayList(); if (areaArrIndex == 1) { + * Double priceArrA[] = { 800.0, 460.0, 363.0, 300.0, 275.0, 255.0, 145.0, + * 110.0, 85.0, 70.0, 65.0, 60.0, 55.0, 53.0, 51.0, 50.0 }; list = + * bigSizeAcountPrice(count, area, priceArrA); } else if (areaArrIndex == 2) { + * Double priceArrA[] = { 555.0, 350.0, 272.0, 220.0, 200.0, 185.0, 110.0, 80.0, + * 62.0, 55.0, 55.0, 55.0, 55.0, 52.0, 50.0, 49.0 }; list = + * bigSizeAcountPrice(count, area, priceArrA); } else if (areaArrIndex == 3) { + * Double priceArrA[] = { 460.0, 300.0, 207.0, 172.0, 157.0, 146.0, 90.0, 63.0, + * 50.0, 45.0, 45.0, 45.0, 43.0, 43.0, 41.0, 40.0 }; list = + * bigSizeAcountPrice(count, area, priceArrA); } else if (areaArrIndex == 4) { + * Double priceArrA[] = { 375.0, 250.0, 170.0, 140.0, 130.0, 120.0, 80.0, 55.0, + * 45.0, 40.0, 40.0, 40.0, 39.0, 38.0, 36.0, 35.0 }; list = + * bigSizeAcountPrice(count, area, priceArrA); } else if (areaArrIndex == 5) { + * Double priceArrA[] = { 320.0, 230.0, 150.0, 130.0, 115.0, 110.0, 73.0, 50.0, + * 40.0, 35.0, 35.0, 35.0, 34.0, 33.0, 32.0, 31.0 }; list = + * bigSizeAcountPrice(count, area, priceArrA); } else if (areaArrIndex == 6) { + * Double priceArrA[] = { 276.0, 200.0, 136.0, 120.0, 100.0, 100.0, 65.0, 48.0, + * 38.0, 33.0, 32.0, 32.0, 31.0, 30.0, 29.0, 28.0 }; list = + * bigSizeAcountPrice(count, area, priceArrA); } else if (areaArrIndex == 7) { + * Double priceArrA[] = { 250.0, 180.0, 125.0, 110.0, 90.0, 90.0, 60.0, 45.0, + * 36.0, 32.0, 29.0, 29.0, 28.0, 27.0, 26.0, 26.0 }; list = + * bigSizeAcountPrice(count, area, priceArrA); } else if (areaArrIndex == 8) { + * Double priceArrA[] = { 225.0, 163.0, 113.0, 100.0, 81.0, 80.0, 55.0, 40.0, + * 33.0, 30.0, 26.0, 26.0, 26.0, 25.0, 25.0, 24.0 }; list = + * bigSizeAcountPrice(count, area, priceArrA); } else if (areaArrIndex == 9) { + * Double priceArrA[] = { 210.0, 150.0, 105.0, 92.5, 75.0, 73.7, 50.7, 38.0, + * 30.5, 28.0, 24.5, 24.2, 24.2, 23.3, 23.2, 22.0 }; list = + * bigSizeAcountPrice(count, area, priceArrA); } else if (areaArrIndex == 10) { + * Double priceArrA[] = { 200.0, 145.0, 100.0, 88.0, 70.0, 70.0, 48.5, 36.0, + * 28.0, 26.0, 22.0, 22.0, 22.0, 21.0, 20.0, 20.0 }; list = + * bigSizeAcountPrice(count, area, priceArrA); } else if (areaArrIndex == 11) { + * Double priceArrA[] = { 190.0, 133.0, 90.0, 76.0, 65.0, 65.0, 45.0, 34.5, + * 24.0, 23.0, 22.0, 21.0, 20.0, 20.0, 19.0, 18.5 }; list = + * bigSizeAcountPrice(count, area, priceArrA); } else if (areaArrIndex == 12) { + * Double priceArrA[] = { 170.0, 40.0, 30.0, 26.0, 20.0, 16.0, 13.0, 13.0, 13.0, + * 13.0, 13.0, 13.0, 13.0, 13.0, 13.0, 13.0 }; list = bigSizeAcountPrice(count, + * area, priceArrA); } else if (areaArrIndex == 13) { Double priceArrA[] = { + * 160.0, 38.0, 29.0, 25.0, 18.0, 15.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, + * 12.0, 12.0, 12.0, 12.0 }; list = bigSizeAcountPrice(count, area, priceArrA); + * } else if (areaArrIndex == 14) { Double priceArrA[] = { 150.0, 30.0, 25.0, + * 22.0, 18.0, 13.0, 12.0, 12.0, 12.0, 12.0, 12.0, 11.0, 11.0, 11.0, 11.0, 11.0 + * }; list = bigSizeAcountPrice(count, area, priceArrA); } else if (areaArrIndex + * == 15) { Double priceArrA[] = { 138.0, 26.0, 23.0, 20.0, 15.0, 13.0, 13.0, + * 13.0, 13.0, 12.0, 12.0, 11.0, 11.0, 11.0, 11.0, 11.0 }; list = + * bigSizeAcountPrice(count, area, priceArrA); } else if (areaArrIndex == 16) { + * Double priceArr[] = { 135.0, 24.0, 21.0, 19.0, 14.0, 13.0, 13.0, 13.0, 13.0, + * 12.0, 12.0, 11.0, 11.0, 11.0, 11.0, 11.0 }; list = bigSizeAcountPrice(count, + * area, priceArr); } else if (areaArrIndex == 17) { Double priceArr[] = { + * 124.0, 22.0, 19.0, 18.0, 14.0, 13.0, 13.0, 13.0, 13.0, 12.0, 12.0, 11.0, + * 11.0, 11.0, 11.0, 11.0 }; list = bigSizeAcountPrice(count, area, priceArr); } + * else if (areaArrIndex == 18) { Double priceArr[] = { 120.0, 21.0, 18.0, 17.0, + * 14.0, 13.0, 13.0, 13.0, 13.0, 12.0, 12.0, 11.0, 11.0, 11.0, 11.0, 11.0 }; + * list = bigSizeAcountPrice(count, area, priceArr); } else { Double priceArr[] + * = { 110.0, 20.0, 17.0, 16.0, 14.0, 12.0, 12.0, 12.0, 12.0, 11.5, 11.5, 11.0, + * 11.0, 11.0, 11.0, 11.0 }; list = bigSizeAcountPrice(count, area, priceArr); } + * return list; } + */ +} diff --git a/src/main/java/lingtao/net/util/YiSBStickersPrice.java b/src/main/java/lingtao/net/util/YiSBStickersPrice.java new file mode 100644 index 0000000..08be26b --- /dev/null +++ b/src/main/java/lingtao/net/util/YiSBStickersPrice.java @@ -0,0 +1,136 @@ +package lingtao.net.util; + +import java.util.ArrayList; +import java.util.List; + +import lingtao.net.bean.Product; + +/** + * 易碎标价格 + */ +public class YiSBStickersPrice { + + int bigCountArr[] = { 500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000, + 100000 }; + + /** + * 易碎标遍历添加价格 + */ + private List bigSizeAcountPrice(int count, Double area, List list, Double[] priceArr) { + Product pro = new Product(); + if (area > 0.0001) { + if (count > bigCountArr[bigCountArr.length - 1]) { + pro.setCount(count); + pro.setPrice(Math.ceil(area * count * priceArr[bigCountArr.length - 1])); + list.add(pro); + } + for (int i = 0; i < bigCountArr.length; i++) { + if (bigCountArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(bigCountArr[i]); + pro.setPrice(Math.ceil(area * bigCountArr[i] * priceArr[i])); + list.add(pro); + } + } else { + if (count > bigCountArr[bigCountArr.length - 1]) { + pro.setCount(count); + pro.setPrice(priceArr[bigCountArr.length - 1]); + list.add(pro); + } + for (int i = 0; i < bigCountArr.length; i++) { + if (bigCountArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(bigCountArr[i]); + pro.setPrice(priceArr[i]); + list.add(pro); + } + } + return list; + } + + public List getPrice(int count, Double area) { + List list = new ArrayList(); + if (area > 0 && area <= 0.0001) { + Double priceArrA[] = { 150.0, 160.0, 170.0, 180.0, 200.0, 260.0, 320.0, 360.0, 400.0, 480.0, 550.0, 620.0, + 680.0, 740.0, 820.0, 880.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0001 && area <= 0.0004) { + Double priceArrA[] = { 650.0, 400.0, 260.0, 200.0, 150.0, 110.0, 80.0, 70.0, 65.0, 62.0, 60.0, 58.0, 56.0, + 54.0, 52.0, 50.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0004 && area <= 0.0006) { + Double priceArrA[] = { 440.0, 280.0, 175.0, 135.0, 103.0, 75.0, 56.0, 49.5, 46.0, 44.0, 42.5, 41.5, 40.5, + 39.5, 38.5, 38.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0006 && area <= 0.0008) { + Double priceArrA[] = { 372.0, 230.0, 159.0, 130.0, 105.0, 87.0, 65.0, 57.5, 53.5, 51.0, 49.0, 47.0, 46.0, + 45.0, 44.0, 43.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0008 && area <= 0.001) { + Double priceArrA[] = { 320.0, 200.0, 135.0, 111.0, 92.6, 77.0, 61.5, 56.0, 53.0, 51.0, 49.5, 49.0, 48.0, + 47.0, 46.0, 46.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.001 && area <= 0.0012) { + Double priceArrA[] = { 277.0, 171.0, 115.0, 95.0, 80.0, 65.8, 52.5, 48.0, 45.8, 44.3, 43.4, 42.7, 42.2, 41.8, + 41.5, 41.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0012 && area <= 0.0014) { + Double priceArrA[] = { 243.0, 150.0, 101.0, 83.3, 75.0, 61.8, 48.8, 44.4, 42.1, 40.6, 39.7, 39.0, 38.5, 38.0, + 37.6, 37.5 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0014 && area <= 0.0016) { + Double priceArrA[] = { 220.0, 135.0, 91.0, 75.0, 64.0, 56.2, 45.3, 41.6, 39.8, 38.8, 37.9, 37.4, 37.0, 36.6, + 36.4, 36.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0016 && area <= 0.0025) { + Double priceArrA[] = { 210.0, 130.0, 86.0, 70.0, 58.6, 51.5, 41.8, 38.1, 36.3, 35.2, 34.5, 33.9, 33.5, 33.1, + 33.0, 33.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0025 && area <= 0.0035) { + Double priceArrA[] = { 200.0, 123.0, 81.0, 65.3, 55.0, 50.0, 39.2, 35.5, 33.7, 32.5, 31.8, 31.2, 30.8, 30.5, + 30.4, 30.3 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0035 && area <= 0.0045) { + Double priceArrA[] = { 195.0, 121.0, 79.0, 63.9, 53.4, 48.7, 37.5, 33.75, 31.9, 30.75, 30.0, 29.4, 29.0, 28.7, + 28.5, 28.5 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0045 && area <= 0.0084) { + Double priceArrA[] = { 195.0, 119.6, 79.0, 63.0, 53.0, 48.5, 37.0, 33.0, 31.4, 30.0, 30.0, 29.0, 28.6, 28.2, + 28.3, 28.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0084 && area <= 0.012) { + Double priceArrA[] = { 90.0, 60.0, 50.0, 45.0, 38.0, 38.0, 35.0, 35.0, 35.0, 35.0, 35.0, 35.0, 35.0, 35.0, + 35.0, 35.0, }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.012 && area <= 0.015) { + Double priceArrA[] = { 80.0, 55.0, 45.0, 40.0, 35.0, 35.0, 34.0, 34.0, 34.0, 34.0, 34.0, 34.0, 34.0, 34.0, + 34.0, 34.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.015 && area <= 0.02) { + Double priceArrA[] = { 65.0, 50.0, 40.0, 36.0, 33.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, + 30.0, 30.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.02 && area <= 0.04) { + Double priceArr[] = { 55.0, 45.0, 35.0, 35.0, 32.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, + 30.0, 30.0 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } else if (area > 0.04 && area <= 0.06) { + Double priceArr[] = { 50.0, 40.0, 35.0, 35.0, 30.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, + 26.0, 26.0 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } else if (area > 0.06 && area <= 0.1) { + Double priceArr[] = { 45.0, 37.0, 35.0, 35.0, 30.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, + 26.0, 26.0 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } else if (area > 0.1 && area <= 0.2) { + Double priceArr[] = { 40.0, 35.0, 30.0, 30.0, 27.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, + 26.0, 26.0 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } + return list; + } +} diff --git a/src/main/java/lingtao/net/util/YinPGStickersPrice.java b/src/main/java/lingtao/net/util/YinPGStickersPrice.java new file mode 100644 index 0000000..79cef05 --- /dev/null +++ b/src/main/java/lingtao/net/util/YinPGStickersPrice.java @@ -0,0 +1,136 @@ +package lingtao.net.util; + +import java.util.ArrayList; +import java.util.List; + +import lingtao.net.bean.Product; + +/** + * 易碎标价格 + */ +public class YinPGStickersPrice { + + int bigCountArr[] = { 500, 1000, 2000, 3000, 5000, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000, + 100000 }; + + /** + * 易碎标遍历添加价格 + */ + private List bigSizeAcountPrice(int count, Double area, List list, Double[] priceArr) { + Product pro = new Product(); + if (area > 0.0001) { + if (count > bigCountArr[bigCountArr.length - 1]) { + pro.setCount(count); + pro.setPrice(Math.ceil(area * count * priceArr[bigCountArr.length - 1])); + list.add(pro); + } + for (int i = 0; i < bigCountArr.length; i++) { + if (bigCountArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(bigCountArr[i]); + pro.setPrice(Math.ceil(area * bigCountArr[i] * priceArr[i])); + list.add(pro); + } + } else { + if (count > bigCountArr[bigCountArr.length - 1]) { + pro.setCount(count); + pro.setPrice(priceArr[bigCountArr.length - 1]); + list.add(pro); + } + for (int i = 0; i < bigCountArr.length; i++) { + if (bigCountArr[i] < count) { + continue; + } + pro = new Product(); + pro.setCount(bigCountArr[i]); + pro.setPrice(priceArr[i]); + list.add(pro); + } + } + return list; + } + + public List getPrice(int count, Double area) { + List list = new ArrayList(); + if (area > 0 && area <= 0.0001) { + Double priceArrA[] = { 150.0, 160.0, 170.0, 180.0, 200.0, 260.0, 320.0, 360.0, 400.0, 480.0, 550.0, 620.0, + 680.0, 740.0, 820.0, 880.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0001 && area <= 0.0004) { + Double priceArrA[] = { 550.0, 285.0, 158.0, 110.0, 73.0, 46.0, 32.0, 28.0, 25.0, 24.0, 23.0, 22.0, 21.0, + 21.0, 20.0, 20.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0004 && area <= 0.0006) { + Double priceArrA[] = { 393.0, 205.0, 111.0, 80.0, 55.0, 37.0, 28.0, 25.0, 23.0, 22.0, 22.5, 21.5, 20.5, + 20.5, 20.0, 19.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0006 && area <= 0.0008) { + Double priceArrA[] = { 303.0, 160.0, 90.0, 66.0, 46.0, 33.0, 26.0, 24.5, 22.5, 21.0, 21.0, 20.5, 20.5, 20.0, + 20.0, 19.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0008 && area <= 0.001) { + Double priceArrA[] = { 248.0, 133.0, 77.0, 56.0, 41.6, 30.0, 24.5, 22.5, 21.5, 21.0, 20.5, 20.0, 19.5, 19.5, + 19.0, 19.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.001 && area <= 0.0012) { + Double priceArrA[] = { 212.0, 115.0, 68.0, 51.0, 37.0, 28.0, 23.5, 22.0, 21.8, 21.0, 20.4, 20.0, 19.5, 19.3, + 19.0, 19.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0012 && area <= 0.0014) { + Double priceArrA[] = { 186.0, 102.0, 61.0, 46.3, 34.0, 27.0, 23.3, 22.0, 21.1, 21.0, 20.0, 19.8, 19.5, 19.0, + 18.6, 18.5 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0014 && area <= 0.0016) { + Double priceArrA[] = { 167.0, 92.0, 56.0, 43.0, 33.0, 26.2, 22.3, 21.6, 21.0, 20.8, 19.9, 19.4, 19.0, 18.6, + 18.4, 18.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0016 && area <= 0.0025) { + Double priceArrA[] = { 118.0, 68.0, 44.0, 35.0, 28.6, 23.5, 21.8, 21.1, 21.0, 20.8, 19.9, 19.4, 19.0, 18.6, + 18.4, 18.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0025 && area <= 0.0035) { + Double priceArrA[] = { 93.0, 56.0, 38.0, 31.3, 25.0, 22.0, 21.2, 21.1, 21.0, 20.8, 19.9, 19.4, 19.0, 18.6, + 18.4, 18.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0035 && area <= 0.0045) { + Double priceArrA[] = { 78.0, 48.0, 34.0, 28.5, 34.4, 21.7, 21.2, 21.1, 21.0, 20.8, 19.9, 19.4, 19.0, 18.6, + 18.4, 18.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0045 && area <= 0.0084) { + Double priceArrA[] = { 56.0, 37.6, 29.0, 25.0, 22.0, 21.5, 21.0, 20.5, 20.4, 20.0, 19.9, 19.4, 19.0, 18.6, + 18.4, 18.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.0084 && area <= 0.012) { + Double priceArrA[] = { 48.0, 34.0, 27.0, 23.0, 22.0, 21.3, 21.0, 20.5, 20.4, 20.0, 19.9, 19.4, 19.0, 18.6, + 18.4, 18.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.012 && area <= 0.015) { + Double priceArrA[] = { 45.0, 35.0, 26.0, 23.0, 22.0, 21.0, 21.0, 20.5, 20.4, 20.0, 19.9, 19.4, 19.0, 18.6, + 18.4, 18.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.015 && area <= 0.02) { + Double priceArrA[] = { 41.0, 30.0, 25.0, 23.0, 22.0, 21.0, 21.0, 20.5, 20.4, 20.0, 19.9, 19.4, 19.0, 18.6, + 18.4, 18.0 }; + list = bigSizeAcountPrice(count, area, list, priceArrA); + } else if (area > 0.02 && area <= 0.04) { + Double priceArr[] = { 36.0, 27.0, 25.0, 22.0, 21.0, 21.0, 21.0, 20.5, 20.4, 20.0, 19.9, 19.4, 19.0, 18.6, + 18.4, 18.0 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } else if (area > 0.04 && area <= 0.06) { + Double priceArr[] = { 34.0, 27.0, 24.0, 22.0, 20.0, 20.0, 19.5, 19.5, 19.4, 19.0, 19.0, 18.6, 18.6, 18.4, + 18.4, 18.0 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } else if (area > 0.06 && area <= 0.1) { + Double priceArr[] = { 32.0, 26.0, 24.0, 22.0, 20.0, 20.0, 19.5, 19.5, 19.4, 19.0, 19.0, 18.6, 18.6, 18.4, + 18.4, 18.0 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } else if (area > 0.1 && area <= 0.2) { + Double priceArr[] = { 30.0, 25.0, 23.0, 21.0, 20.0, 20.0, 19.5, 19.5, 19.4, 19.0, 19.0, 18.6, 18.6, 18.4, + 18.4, 18.0 }; + list = bigSizeAcountPrice(count, area, list, priceArr); + } + return list; + } +} diff --git a/src/main/java/lingtao/net/util/ZsPrice.java b/src/main/java/lingtao/net/util/ZsPrice.java new file mode 100644 index 0000000..fbf7323 --- /dev/null +++ b/src/main/java/lingtao/net/util/ZsPrice.java @@ -0,0 +1,95 @@ +package lingtao.net.util; + +import lingtao.net.bean.Product; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; + +public class ZsPrice { + public List getPrice(int count, double length, double width, List list, int number, String shenzi) { + double price = 50; + double l = 438.0; + double w = 304.0; + length += 3; + width += 3; + // 一张l/w 大的纸张能做多少个此类尺寸的产品 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + // 报的数量需要多少张大纸 + // 需要多少张大纸 = 数量 * 款数 /每张做多少个 ===总数量/每张多少个 + int num = (int) Math.ceil(count * number / max); + price += (num - 1) * 15; + if ("绳子".equals(shenzi)) { + price += 1 * count * number; + } + + if (number > 1) {//多款算设计费 + price += 10 * number; + } + + Product pro = new Product(); + pro.setPrice(Math.ceil(price)); + pro.setCount(count); + list.add(pro); + + return list; + } + + public static List getSmPrice(int count, Double length, Double width, List list, Integer number, String[] craft, Product dto) { + double price = 60; + double l = 438.0; + double w = 304.0; + if ((length < 8.55 && width < 5.4) || (width < 8.55 && length < 5.4)) { + length = 8.55; + width = 5.4; + } + length = length * 10 + 3; + width = width * 10 + 3; + // 一张l/w 大的纸张能做多少个此类尺寸的产品 + double max = Math.max(Math.floor(l / length) * Math.floor(w / width), + Math.floor(l / width) * Math.floor(w / length)); + // 报的数量需要多少张大纸 + // 需要多少张大纸 = 数量 * 款数 /每张做多少个 ===总数量/每张多少个 + int num = (int) Math.ceil(count * number / max); + if ("10".equals(dto.getKindValue())) { + price += (num - 1) * 25; + } else { + price += (num - 1) * 15; + } + + if (!StringUtils.isEmpty(craft) && craft[0].equals("背胶")) { + price += num * 10; + } + + if (number > 1) { + price += 10 * number; + } + + Product pro = new Product(); + pro.setPrice(Math.ceil(price)); + pro.setCount(count); + list.add(pro); + + return list; + } + + public static void main(String[] args) { + + } + + public int[] twoSum(int[] nums, int target) { + + List list = new ArrayList<>(); + + for (int i = 0; i < nums.length; i++) { + if (list.get(target - nums[i]) != null) { + return new int[]{list.get(target - nums[i]), i}; + } + + list.add(target - nums[i], nums[i]); + } + return null; + } + +} diff --git a/src/main/resources/applicationContext.xml b/src/main/resources/applicationContext.xml new file mode 100644 index 0000000..08f4b4c --- /dev/null +++ b/src/main/resources/applicationContext.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /login = anon + /logout = logout + /SysUser/**=anon + /static/** = anon + /img/** = anon + /abc/** = anon + /views/** = authc + /js/** = authc + /**= authc + + + + diff --git a/src/main/resources/dbconfig.properties b/src/main/resources/dbconfig.properties new file mode 100644 index 0000000..76a50ee --- /dev/null +++ b/src/main/resources/dbconfig.properties @@ -0,0 +1,9 @@ +#jdbc.jdbcUrl=jdbc:mysql://47.122.33.193:3306/quote_price +#jdbc.driverClass=com.mysql.jdbc.Driver +#jdbc.user=admin_666888 +#jdbc.password=Admin_666888 + +jdbc.jdbcUrl=jdbc:mysql://127.0.0.1:3306/quote_price +jdbc.driverClass=com.mysql.jdbc.Driver +jdbc.user=root +jdbc.password=RdCcZOL1QxdYqEot \ No newline at end of file diff --git a/src/main/resources/lib/jep-java-3.5-trial.jar b/src/main/resources/lib/jep-java-3.5-trial.jar new file mode 100644 index 0000000000000000000000000000000000000000..295ed777f4089220436de9e5bba19b756f4867d2 GIT binary patch literal 451032 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

^F}%tPN0KH2=!G*riXW2ftvV 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

rgIb1r$IOB}ng->jq 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

Jwdud^}T> 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�#*Sxv8W1t#S`$D_={Q9X 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

g&1QLDc#0F6P&SXzlvl(>5xM!4)j%h?nOH- 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

f%+l_wn+-*Om%2oLbaJji6qo(BNP;P# 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

  • O^lpzr zU#ycNh0RAQ%db_amW~b{SgaiHgU`kSt`)bO5=CX%C{w9Y0=d|RQ4!fxcnMuO8#h%s zQd8;|s$j|wKVsA6i%Cw?i@1UQe04SQvzH1sY9d6qI}-zaNwNeFnoYcV*dI^lfuXmh zq!7gw2jP8Aa2Uk#8y*5)4*vTVdmmWx_KpsILe$8-yM^XXm;1|o;A;Xp2M3bVFsd;Y zeR49Tc`za1N5cm}-6MP zZ-FB6599&9&7C)m)%@Of=hOKTgWte|_vriM)Gm-kq4AM!caUg6vcA5szLEbPW;hV@ zmSoM}Qr(Ia8aGla z2;=;>Tncoiz!Mj^uADtQzr=zyfaK(4pa(Ut>BbT7s{B~F$9I7O3iJW`56*rlSv7{_L~4VvT|ZVZzM80ADN zXL-*ebs3MZty5~{(ln&Rmc10{${N`%<$5VDjKfgE;qOl~zD9+^IQBN*;|doBt!~<1 zX`5{=siFS4<~v~UPtV3lz12~hHr;55)C+9g@?MQi682U<;3OXV+NLMMe^8f~V*aky zI$1qjB^n8{HmtWW7dBJUsSi3#K_V+=r=|L~1a+Un#S&RLfo3W9GQhsbHQ%n|d zggSWV@H(VgyKTBMHZ}g=UnD)5-91L7E(r0w3yYSn3a`3)WxSWwR&4z)bproN+vB^d zU6TbOU@jDe%LVCBap9Vd&WI*sSe3Vy9gBy*H%rdlI`tO1bj=-Yz}HwF^Jrv5TFCm* zS>qWdxy~lE%=-~dL{_Nud(<|c3?}#?*XaMu-9m2)C+D~rI@;CelLKc%8PYvtGA6aQ zklnhMl~0gOeRCr+=(Ae|#Si-1Na12_LX=1A{#IH1wzP5i!Gn)2R=%5FfQW9E*5YjO zkv1X}oWzOYPH)$Eh0~*KhbYEFf+eqwlfLe|+|A5}bMQ{Q&y21m`>kzMSz6XwF?un* z?e49!4sGSF1nt1+F4msCnMWm~)MWXp`XB9o&>S#vkw*{Fhwj@BY0A4+S2e z3a<44NdSiPJkWhW)Ha9f1kT^+=(kK6=zK%g+o6aL4Krma<2E0eTib8XCy@Q$8V65_ ze&q$mbG{F=*}Yr;tl<&SnryU?N&1=&dYCy4^HQgb##Q+F>=WPmg;s3)iDcnX*}J2_z@EeY0#^}w*Wy0~E5 z<5S_dz+fU{nzS=M;6$0v@x-XkqR$R4a14T!+j(3kP*keH2|S)bK4RzhsHLt4vta1_ zHni`|=gjMi>7Z7(3#+WRP~Uqobg_5wmC=%5uU_;NZX-r1!CXJ8rU66%l(hnTRsb&l zpp!v;85iAa15v-6UH20LFBh?8fL{WL(9@#d^P(uoIU?@)ar=9|9PMX+AIBh{b(fLP zj=pbW%}u%6*01}AL*7-a?XSrcSc=I z8EbA6j3AN0JnOLBBF@c|UuwKAXAJ7}D7rrdEaNM=ms$N&nPL0ud{l5=+*~6}?IUs3 zML_r^-Oq%RBTIw*ld}F&aeEoz3S(uMt*;NYl;|O?A>GEoyADec53QxgE2+_T{i!bh z&CjrDtM1IDG=7)mS4^PL+zVH$q_M<@sE=6-@l8cDq}X5_SY*A*OvS$_Go2h2`XZWy zBMbS}No5^K$?#Iyn&kD@QD4%@r4RBRXtGzhes&~D)=R@$d^wG+klu)NcbLQ$%Th1*ZxR(Umkwud8fKr$bTiQqx+=V8C58>W zGJM~Ca>>Dm2u~7$(uUDBgLwX%>BQ;ai45D5`gqo9uANAB#gc|MIp|{B*wMLxMMH?M!i7qt9vA* zAvZEIqYCD=^kMvT6%`e=#3Qy^Q?5fBTWfXIYRl*gd*m}d0<)-KLwa9J_+Sz1Tz{c zgaEy#8bg~Q;26fRKu{=%A0ELv-IR+k5b^1I*F6EBI@SRA^vZoJgZ>#v2}>hFA^KH@ z#K_=y^}3sw0Bs3lixu7ku7EA`>*%g2$>6j(meKYxSK<(kwJ+OI)CUf+UaLoE}O~zD0+N)zpV6P_Wk%|lv`&i5#FK< zJNt%ARY${v4GLTbZDu%BSaB{Gj}cQv%P= z>t}d0%bSUz<)!+VAjRSvEKj$Mt<11yr(gG6Pp0ANR>-1NO6BqqIfTS~$U@i+Bq2cIry%PnGa?CQQmVU#MZ zb1|kLXh0903!x5*F4XLkGY=L@=`70a;ymRNSD)6s_>7#@e!EZQb8VGzvEFR*5G|mi z%}7irh{lj*hO{!5r8^pW4tg9A?xapsQvSjV_6b&~aCf#uJ~aF=WnRQsj;E)8DvE(u+(qcHp2E4Ny=RY=J-%w3}U`elko)qK#^5YTt{(Q!+|q$s>$x&0)y`@masv zR?z!%#(hUFMNS#5`&vx9rGlh7ip8Z>QETpf#|iI&+**gs8>@nGmmNmNSx&TXAGhTH z1I<8k2udYM+L_tr32mJr2S;C?Fna(YsxAmYgIj$m&-}1^SDs2>_htBCSI3ZlcU*9C z7;X4HH1d`WIzR(q?cttnqXHKAmHVfK&MV*gn3`{i&M+FwY*=nujPSRUl zEz*lE43~1qLcS`K(IdZW)u+^ay~-=2$s;4jXe_ok4T8dDgkFsKgx~`2tUdQLP7$|j zsc4Ql9a}*^TK#pk*%d6wWr1O7>bk5qKnF- zxN!EDgl}{*4?%%%z2dJ{9Wwc~Q?>W&vv{m_&@vO#y-?BIS6~=@ZQWHLwYmE4&xQo2 z#JmnfC7gA{GrffP9v7UP`#mBx9*)I451_}ul9lMY$*E)6kQVlYA@%@H>NBbEG&y@j z5k-U{>q@DFq`nk9D9G##4iM!WGAvD$<1vq1;Zn=n+b)L zoFP3lW2v-yH80D5Yd(hLF08yMt~YsOCH0!TSyfY4d6fUXA<{wFa&hf8!*)=el<}n6 z^BOJTtIt8EFTmOOZ_*1}c(3U;n%O!Er}DQc53N}}&4d$ddQ(W+2-BwpV-JqQ+e<#q zkanx~D``sumyjiy|Mh96=oI1!}74tF71qgIw z>S>~yCky`;5k@vJtt#F1)Y$6{ii#Y#iX^NNB}DV55q?I7+5ZUrNcFQGE9MSMIF~~% z@qn932zQ@D4s%)aEq<Vj$RcFZ%WgdR zA-H#Mg(IPS$)#8_ z+f(}mQ&?QA!#49fKMN17G;xkL+Pa~Yz5e@cW=%wnsSBTv1+k1_-oX7Sk4d>Xoi)~7MPKfDx|R2j?(ZA*_}wt zbGr~|$V*D;H}=Sm8V54!AhjX5fyLW%+|*oot#6PQg^FLJk)!4ZGWZ{7zw%_0WHT3P zLi2>QWqe#SV)_;cb)tQ(mMpY_K#q`?S0MbkWIn7+SaZBWwDY3TNoCeOe(*70%7e>- zqLId{2rnF8M9Q*`ZUVzJx#;4$!O=t{izRW1uQ6QC>3adkh*G+e4tpo^;YUsfVaJ<; zxZdG5G{R@-nMk#q?|mcdI|FsT7TnKA#rKZ>1GzdMH5C+3hB2ngsz7K9opNmA`{xj| zw@zS*Gd)G+)64_6Kw)ms=n&4iqn;)YDqCA!FE@&b64^mVl1U1P8^!HA7n(qE<1k*T z*(PfaZ;W;#`<FL+1j;>98Ih{Su4CwTkh7DAkgv8Z>weG`S>drc-54mYJhJm{Hw zVXW!rYG(ylzZL2DLjR@>&Wf3_dNP?uu?@f)1zmu|k)3dQ#?i*EZ-3#OMfqkQA?9?o zjfm(T*p>?ZgO7u}oU~&_rGV@a=u%@ouKdmk;MPnh!35?zIlfzfje<>}UaqUdLxi7d zqN8K_Gl~i{aj}MiWfS*;t_w^K78O?!qWFm9z+2q@1|q(TCAQr`96Pi! z&F)`pi>lo~7pwJn@SP{U#@}19W?LmV?OSwNNraOvPi9@~g*)8_Uf%V*;@Rjv;M%UO zr6=RG^zaH&B=QZ7%){$Dmsuv9hmcmCSrS_bmR97#9AU7HIvTFC$){gR0NW2nB_;v1;-X|GB*~V76veKgD!d zjFwqs7_73%>8R{{&&+&dzlXd!RdSxO=c4;dv&BYf*5NBF)!vAgkA?m8hspi!sZngXw(-p918ve&R{8v;` z+(v?fUR>tX63Kr`ishiD+>)E8+tGz3-kOov`;XhIDw-Pxs<@7)1g6otu_Z!T0fmXU z(HxI>o7gr2+*>%5roKKATx%n8uyBGBa6h!`z?LE&{u-%oLkYD~N>hL;jqp*t_jg)Y ze`-AzN$eqWuS5;hefm#Bg=YoQI;4Da?Xm63XG* z9BL79^l7ux9gNpY!y5Rr?iZ&IlvJ@{>G&li0`Fq9cOGjKxS3qK=XHP%T zuwM^lTJ~{^zyTIwex%#zm0SPoDAu&x!7Q~~ma!c~C@7BwR)5edGbNdwLMnkxZibu` z_N8~^yQD@WUE?6cKU`8jke3!u!jr3t-S5SBeFf*wUG7k|Xo0AFze=OQ=*&1pI6D&} z${qtNCbC6VA-CCvjLxFX-?QQLHzS9J5>tMVgJS75X~orSz3a%Saz_d-kD|Z7$3Bow zZGK@4wCLl<|D;bi80X3j^-0m=!MTfJOvZ}#*s8pPjB}yvR{D3wo8@mf&*W0KH$#m$ zVU-RTxvFC*9XSZf=27v9j1x{K52^DAV`GQyYfgJ3Jwxy76_wrz5EkSiF;tY%9Hg^B z)gMS=ha}A&{Q*gC@cRe{oB&5dCsO3n$2E$`Q`gZMIPwD*$M>FD#=EL2&oWmwBB(#a zDzmbL|BwkvWA;Yg?x6CwA%NZ%?!YTs(ZSxoL%@oSCs6k5fk;q%2~wnjJ6>M4h9AWJ zS`SO9WR9kcA>M-C7nB^`nc4Uq830eV_+15Qopd&;{U%EfN_q{bt|4aT1>KLbT9`x>ueH#ZTa|mM<&-GR|Bn7 z|LbQSE-uKs*cJKW|4`mFSaxj+@bS%U@goOzTrQJ52FilNJa>FP!iMd41pwUmeg+Pv4>y1_LgeK9@}7;6~a~( z8mz20Q4wWFTbVG~J?TkdvHkPs5FB~44Y?~nuqayTR}>ToJ5Bu}`@E%zwC$~5BO$+p z9B#SJ=JFq<6wqzOzrUWIE455es!n~cp}7~#ZXq{WBDM4vUSpbesZ7c`p&+piyj>+$ z*mcr$m4#PMlktgtKb*dJ2Rk0u7f+R{Ic)i0V|%(-pxQ8KUvPimx}ch^uk)%MW84n7 z57Kjv&D7W+v|-p7oI5GM^Ft_Z=hEYxG|@;gqi*gcfIAS8wE$;BCgy?8ESoNQ)b?Ry zCdhmnlhy0F?_O^zFv>379}G(yj!bc}$&jg#L*GluV_ZSw(V?y#yg@=g%Lpa5WSqI_ z)*kZkbT3saKhZ=yEmRVSy^h?So2#leI&FlP^mc2(n(AS((WOYvuU@!x zs{FZ+2{y2BufjYcyl>8MiX(?x{i~V#uoGDDqvYxVvC9^n8ykMW zaGqfP_Tej#bfE%11 zV`q#+RTBB!dJ?qaD)tl~8Wo2PdFKHz`!~4M(rYjfJdw)5VL=FoMSAZzE@yY)dm5B= z)6+Zkz^lEb5N1nM*1jgp`AGPx5(3TGKs95*&9Kw08Z}Rz7ZKrIs@E>X#b2&p`bg*k7!G&e}tTQyu_n7QrquBmtR-!Q#=VvJf$_QX> zU>;!JPe6bteS}-(KOr|OOMwYdqoT3;;x07(18R!Jse1AIgeeddd{OU)4M?I)w|`|c zw2FeskSdE7q_Z5;(c*ck zC#~|8y(%-q+)Xe@RSXg4w&$di(@-#@@}fv(q(f>soVF~>-)Sp^bNr=VG#xJyE#DC>+kI9sO+bb)n#;5%AgAf% zq5+o>-B`dA8zkR99^SY>Q5xo?E85{NsqyE>jdCoe585jeZFw0(IQ4B{V(J0kM%}&F zuY5*RVd8y?JICC-DYvVZ#(doY^}PXwD?iQeT4(&UxRh0yUhU0pTxlo|9rMY_jmh)< z>8hT+qN5<;5zIJ5;QAn!#kcHKBY~m#Nge~;fWvypOJgRS(d+GJKPR0E;#CQ>YtB<5 zBxz_tF_oH}QUroyp3Zdte2T>IvX~*GvuArQZ9P3=)KIX-7`mvZ5*$K90~VKTH`+ab zR0U8*V7~}_ANn$&mtDiB;aN~!FttBP6n{ZKW?^+Ur`FFJu2b??xtL^#b-PS}=N)Hw zi#x_X2-&)Re5M-%djM79!q^mzIzP(GzA#7s8p<&UM@XVDUtPkXDvX?JgHlc;7t$b6 zgsSxqokk{c$<_GR;iVIlN}~GaDt0i~As$BZh!RFl2BK3_?Sx?{68?@Q%+dPLvpvIJ z*=8v=(mRuT9OPvByMHCTG}0oV{|is>*lQt2>q4xTw@l%}4>6ca>s z83W6l%y`FXIK+QHq+|Gpasu4?~rvWap+gOFT$q`QET^a4G~Q1LjJQ- zlL)GemRb2fn!W-m3N2cD=AEt^jGTS;{`MCdM0M_kYBZBeCZVx#e4M@Y9!L(n?M zOO=YC7XD~?P+~D{(k25vk%xuP49Yo3nR_6JV5pBAnDtX#6Yn?5e+efk9)+9PM zn}q%s2Pwbi2gA}LgAkO_IRVGEgG0h|>ZDdk8;WjQ-m;`AnD*_Q0wce2mb3NvOKlEZ zRkL-L1q0!L&~`;(g&K}M=~az$ZkMO5jlIPj^rlL44%=CC@zdORGF1z#HOveN-L44S z?%ll1N2;*9z{AW#=m&STxi^$GR@KX|>{FNNZ9lx7Y8%d?mTh3>u>1DGb)_w%B#I|T zhbcG(xv_~!Ku{L#QMRl^F<^=)Yy?qjo^-)ys#Mmbx_-gsQG>N^>B_)SmNPi7rbl=>VpyQ#pj(t_r?Pz%QTG66Wx4F%m z0dBJQP}?tU>1sZ8+bBV|L*&)8MTs_z1rFZ|&Vix{NNDHwJJIYI2IBeikjhqH0+s)v2iM>zoF12;%8c$d1xN1 zOMG1#?8)%t3=Te@j+q)h!Vjh5T9{#oZGi#ld@c_>2W&S&8&OO?wq9D~h0sS`U6@Oh z3{)$4Bg6+dyK*W__7x-oGIYcr83;cRaATwz-+5`oGe8B5w9mWfan3a*q65rnisZ|r(#1r)#g89lTBI4o!>T^?l4Q5WDU_-I;jPKPURlNpwy*_u?Q{Z`B2Lz~7c3f#G`>9Ntp>1CNz?o){%`Nf!aTxk@= zTNUS`P{O8aCSQJ1LBR}zgqEN|V)9Sw`{fqcT}+0)kv##NW!4I4>oc>6hg;eA`hwTF z?+9m{0>pdsj8%)TS?JkY&c~MdZ>)$WCf%6?QXEI|m|5RQLGXh65P}G42nbaVnw@8V z{u;t_OKL2 z)ELC({Qa}@Zbn>v)CxDjnIGJ98bw}^LRgTZf|RVR<|z3ayN^yaEMljZ`-F~18-W}) zrwD2BG5BGC_prvg(qFb#yZ+HQh)4l`J6^Sm9#8({)jMxa7EADRU9_E`ks+&DC!9TK z(ALRM{@*L1HHz1-^jc8+1oWXU8>_weT~6U_|82RRvXNT{pK|0UQ{Yj}nxcQ$?|L&! zT`y~r<2uE|D=TvlDWh-L`q)}g0jw^S%H|#)AJ^B{4QoB`ukFwEa9||`9N3AgYHQQY z+q$~C8X8=H)D+}bNU3q`d&mBYF)FQem5&*2qDLsEAy$I$s+7(gu%~#v`TR-F=0|_r zhG$G6WD6z;UJ=z&tUgy$6UN3u7jefJ3j0j5PDDknRJ#}>H;R)d{zy#NGSwE)Gd=kM zNrQIqI9S+K!dA4vX;FcySGm~oef16tHaGpSKy>tXtFOetge*~ODxZE!qdH=IjXIYM za;mpfPQDl^D{8RC`F!kg?aGSlO8?&6ndfQ}nc79FN-z;;ejq92t*VMUZ8#rO zkwm4+GuR)&yg-9IRN!kDnHr~NTNmxQ|NC^Cn#9+y|M%>Cm+wG7dA54@_Mh^%Zx}zz z9Z~$+6_(Sv+lkK~9A}pB>hN0a6zS-p$7y|POj#m^!=h2iH`Vk|su)kzgDGzcm?~jRJ&HAdCs1d4Zf>T{F?5kL%h?h+bY4z%q{NWU#OCziP zwh&il9rlL=~k?4Jzl(5t5GBYO+iyBRiP7W=y-g)=&1IY(H{UZXBHxQo63LRVN zP(zoKKV~gY|D6MQgTUt?zrJ3_OqX?UM!%Q9j?{wSTe{oKRagicerWG3|P-{ z8I#x(f+!wM-RKG)JG(z(lq7!=?7S|3HW2WC0nO#+Z1Z)T6yOC9X8?ljW~Vn7X@gXN z3p;V|_cJ5*Zy*@Kju)J^4G??N($nK8u;Gx%?_`%=C%nL^ipAUDbY6p=(bd=phoqf| zTa5WS@>h@zeQ&Nz6Z9Ob(+uVj8efSxA~}gZi88SiSqf47TS^a98^A(0peNAHEvyBE z+7!gAZ~i`rf_)@oLjT3Rz^^!0YF#=9Qg8qTX%v2;rQZC9fm1tEpCCt5IgFd}=?e`I z{kr!z@W=puW(vsHa8790Xhv9?uA|6MYd2Cwmsm{!*{_3C`1k9dI1srszM28i!jEjL z9Aev6eHA+nOs#LYu%zxB=Nw5Q9wgZBdISCDfQktY6R3i`JyLc_qu%e6Z2emLziU}+iy{J@LZC=@Cv4OR-MYF<BB|eBdbrW4W%VYAIgy_+wbG?c?7qee8Vgd zoog|$8@a+)r?esxh}8cTPSRb>$5*{&#HjGzp5Lu5q|%&ffZ8UOo*1^`OImYYDqs#P zTL49j9iO&%i*tb7>{ri?`wEAYrBYp!D0CF-ldOicv8t@pxSJM-&I&48P1TEPs>||E zXO`54#L4UX{xEiaxHmmUQq%3%$03HlPt_~yAC{c!8`9oA^nY-w|25@1cj$O|QQ;Hc zZ>aQCR%$eXvg9LhY-WM6VNOanCBKu!&Cw+^(m)(NfHL-y-Cd&e_VtN51dh zDV3OOK3WNM@T8lrSnlS_tvR5P8vf*;E{O&}1LEgzp@vV#~P|O&tCLI$zx`~`w$S^>ZDI@ z?q4Xa&O3++j7DZe8Ha@?TsoVD^w29LEkc1xKz8TN#!;Q)21nEjF~FhdbIF*QTH4;} z>FLPpz=!>8$NmAr{x0CkzYEwt(1xxq``9-3Bf=nhD{;J#S}8uHVhYVHn5Du2%Qci- zu6E~WowpY`nwnSl{!l4oSnG-cWS_M*Ex-mahnlS88EerS=uO4yutL~~2iaVy4U zjq9w#NK;97CRu25UoFvn%{DoG3(lNpImh72dq z(M>j*ca?qMyKiHo^oNN&&5_Itx0#yy&1^i$l`Hgo6nOXHYJ8TYFirbm!IC@hfLVYj z*V)(M!cem_(n1%EfIk(6oRc#ZOmMTKY;?60=bEMtlv3lTB<(xDZLrk-(57cO%rD9I zB$95fNcm#^?S3kOo$nxO%$Fyky4gEzw%^#c+mnk+KPI=$d+%a+B`f-!&x4nrmk!UX z_{T4{ri(cB(VY5Qa+%uwZrlsTAAUs%C7+XPaKadKno1vuc6j|ntL^Em{crFS4GW4B z2|`Ax>w*C*vfvX-lTB3;yx04e3>{sXQK$zx!}-e&}n*v%pPJOU2J zaK?*mLD$U&S)A01psrfKH31HROFIZJDDC_A?|`xo0|m za1OnIRSW1*PS4Jsw~$0`zdHs1_N6xd5cq2+tF2&3Um%Y@ztF%8a;DSFzhWWlJmr1!mDElXPpZHB)%L`W01uYslOxM^iS|kiG{#1sE*<8khs` zCO*ERpx{3M6woJAPtQfY`xlKg+2(BoqUp}Z$3NOvGcCcZwunxUl!j^VF2t-y_#N3TW7oSu=f;Ius+mI(5v+M4gJO zlH%mGlBI*zyy6a7WF`hjw)M%E+Ug{3O_R^F;J%@;UCvL((Lc-aQdG>MM(N{%lxyQc zdBp58hKR?wmFC(6wKghBxZ73oE%H0bMYD9KH1f=9U1)-0~gx!i3lc$-(x+UoK* zIiaPiln>cWW|UQw2G!&rKW{dZh-gOq^z17#7+diVt8q9pLEFoDPP|6;!g9@bPH27n zcBFP0p>yR!9EGv;Fl*xoH1S*(<`twjUeD);UU~~^{CO%1ljMs@7P7gt^LA>BT&4=S zL<_W~S(@%UUFgzGQ;D{t?|oH;Ta%oy*DpgiB|l6It5eSO`wF#U5O_9CPLJ*!2hX(m zB%*kBi}#k(Ki#1UH|9Had%c2q7v)VbU%7?jz=TK)qTzrkWw=x3>G> zC>@QXVg7?^9$6r5wuzM#Qov+FX=I2Nn&xCv(`>d4kNEpgK2z_2bedDA`-k$IhrD;N z=M!hin=j3_-4&i}c`}8JhF$5U&XYNo<%-O6_5MhPospUUywm71lddl(W9Xev_Qsz2 zZnyHSNlo6!X==s@Xjxd0*?D1$d|f9ox~;US;wUI3Z4Kc^3#<04;R@5kc1us2E@B@_ z^BCxt_&E4jQ2fII?YzNt8usTO6{gE-HBFj$HPgtrg6p`-0 zozjn~Ebp~=%aZVt3?jmTp|KV|iNdY?4u-;t2n@2CFWft_njIA$l}tr5PQ70&W4IMD z%Jj)92l{5r{&}7CdefNTTuqf&uZZGpEG^s*ckc43dlzh2B5$W%x#(vS{dlwJQP+A_ zJXx@;iBs~v^G2+i)+5G+YQWe;QBrI4i-Q3O ziF>|C@6pf<6IjBRrrNE?dxpPmSB<54&M18)2gl&}|JY^MVQ0{}B2lze%HMMGbEbMunQ zwz$$r)C0&^Dc)=PUxq?^;(X?7h}a+*g#9O|u4fxv_dv7>pcrr|fL~vpd-LhKwE#Au z^bmA@bf7;v-yZnu_0Wg(`bEP2@;`CzQPmOa2#4oqI$J6jeUFfyH)VJK`CUE?8K3;} z@!1GTJCn1_+t~?`ipb0uBUTrU28;&Hsqu=c>{1*y!>FY!p=nJCN#=Sg*`?3_?)Ktl zN}2=MTGLWAF&d5Kk+qc=sk?=fNz9ih+S;wDC7$uv3hnHm5^>4xf9EO~D@*?x%0|V8 zb>Y|r#(dB(qUDTWZsf@UHVwq$C)DgGx}otfAI@_|vUBK9ds#~N;>Bsh@oq)yUHBAK zGPLY-PhJ~!Rv<_9_Qd#ndqenJV*pDlwokm`wqpAuMs6(6@p(a#YJvA(gq08Bt0E?} zyk@u-f|Y9E?pX`p|E=?(OkTo~;XA$2Zt*qj2XrUUBuHVpdntx!ZL7kU#J5 zkN(D^qF=)c;Rh4T(71}~B+J*Q8JCblG*oSv97qqx1uo#T#JGbBz( z$HOwRcoo6t+fv~6zA;?T)cBpAfY;&j>NG!-|2ER?f5tuwonDCz{Ddo{9@xJkeE%xW zan}T^RaCeI<8$$Ih%rOG(=5Fcsb!OBKw;SX9>=tr{+4&)l9@(rB88S$v5Kea*Sw(G zbn!59IkA@Q60x|Uj7+Mg;!+v-$jzeA8CrW1`i7C&BpIa$BB2+r)<~9ql5CI{j64vP z=DQRt*yv0MtS77hvT$s%z=x4&6Um&m8KgQH(N;yVvyVy$;F`ZW!Lwi1K8 zzFPki+quL4`a+Swm#boKQ^vw+_1n#{4Y9vGzmJF5LGRrE4v0B5Alq~C2rSqZ+<~bJ+-(IxBFIe_wI*4aQels4&UTDpXQI;+%~@m1c`PrKD`mx@Qxq z6xi^1=Zb(f67W@CVSWPs%&gJB!0$IeJsWualM}SHT*dHe==f3kt z9nqUPX++#qnpt+~SRlsR#MuIX&&~O{6Br$(MB-i2PV=MZC_`3RVWkCKDOCe6vp3g3 z@WtX0kg>IGo(Ud2ooqgxya>UDhY^e6uv6B${W~fuK-=89;r`(nnBd&Mh{izwx!Bz7 zVQy~DPAqYtw)FsWrLVqmseD)~(|(I1v{5?}sBQ7PBS9=LpV_jeJR`E2s9tW8*O<_h zUQw-N826?jOmcqOPgrv^p~BH`=pEPOf&h;56mdv7ax-E^Au8hHfG{PQydi0ATDcaj zwELUp%fSVQMysgCTS)gMg2Q}gt z@870E6wi1XI+hKPObn^cPyQKhYyUg^OGZpL4VQzCf$YuTRMbt4btlmmB__HJe&<)i zUiOy=5`Yi9{wyE3aj5KO_7J5dNK0!Ye2UBAn|Nqvu~clGWSLnXAw#fz^%Qu$Q8fm9 zG0CQ?DmJD9EM6N0^~nXni-zFSsML5{e;uq%tpSACh3JTk;0;j`%P3w z#^g<8A9F?~$bDMT*WB|=T=)0kwSza8)j|uy^eL~YsW`2m07pQ$zssAXQ?0AC#J=s8 zE?@cN@URPtGDV`L!bcGoy**pLI)8<2mV9lBt>==`M6g^0669-bMp*XcT zi3wq%C?us{G~jWl-`F|atu4OOH&F@x?|OEy=Q3`Qu@|0){au*`85e1p>>s|0b(`ia z;OGZKyk;TxIZle@>uvYJ$+6p~okSkO)KD>~OHOWBPBNSOA2i{^g4(Hx8fq-Tz>tqz zU%Sdi?x0NzQmWLcj3zv)`6&%*)xd>ZgN#tYWTxn^*V@q)B!9;0=g}4T{h`~Eznjo2 ztWN`C#pwm3*}%_fUi;(8=_%s-UZGVh?tj1xGeu3o{;qqPIR99{w%YtecbND%FNa#T zbrpEbMDKWUlV16Bfu}n0I5;@4w6GAG1}zH+TLCjDq&Fx*_d7fK-6yr^nMjUOtx939 zb0eWwXjB_sI~Win!Yqm?5(}<_v49?Qw&sQ71cTbey9aJX(0za>0O7h_jqgx6hFfmpd1AZQz9o(gNR`7=f|5OdK+G#rE>!2>tIp^jhZSx z=v`=JO=68V9ZLnGzUCX3q&Snu2#uioUUSOolxu`x1I)}Fw2jSr-DhkpEdFOMlMg_P4gxeEH*UH|Qvdn~f^cGhmjPD@%#bbMX*C4qW}D^}&~^gcZT$>veS;VN zUF=N&Kjt-cNy0VQxzji9^yw;sHk zhlV7lFDvF5E6D*s_|i6>b>E-<{F!p#?bvm-u)n|m;@+m4J=HO+N|e?ZTj%v zf@;!HKX{{tLpM&pF+N&Qk|W5hU>ByUk#d?@LlamdAqa&>eDF|N3>z_fQ+o{LFIM6y zrPfKb&NfxXwx}qHscG2>!9BYn!n*Lt5@Sj%DnA-@bU3K=3s2TvK3CzYtzCZXW~b*- zJalBX&{=C#p_emt4r2zXU5@f^^L}(>YB(GFH}~SXTAZ3$9+7ttQt)}_7t+@#I8ct0 z=VzozNo?M%s#iOk;I7J}(?o4IrX+p0NZypAQn4i~vnC%(Lk_2&T-q11(AnkEvdCdu zy?btYw7wtMz9%_h~-0?m`h|bbTb=$&*mHc@vc@9h9XBo7e&RWXkc}U zs9ej!B#tzW_yU0K65;-V?G-6%pNFk&6C_DyPW`(c&+p^o*dj0T;bAL@6gh?ClVu4% zYJU9(rjM+z8XkQArtZe%M(yp1-YHT+XQj~aYj)&Hkb6~?l1icI_7gVMNTD!-bHKt9 zFnG3|Mvw83nmPH5IU6HYFhY8X=MLQhzJU?2nna_%ks#uG?;U6 z>waV7BlQEF6!^YX+kOBb)2bYbUapGzAo2dWTae1M#TDx=KxX-q_CEbuuw-#D4YUD5 z4G+BSk!p&leUU6nH7F&%!W(vx{$vVhG_=?7mtLxc|h(96=BzSnP}XNmkNMtnri5w%d{j6cGFdPpyg9E`4uv#d!917C4iNKO(^J>%=EJ7#`z=~eC(ShqW%}RFARH%JX`)ARlJ!J7x70D z_AFH|y;78@%yxV3kwE;BMo9FI&$u&;S<-K3;^A^cd^LXfQHpfux#JB@IeDx*)PMXt zcgjkmLj`bW*Oi)wx{CFIJeLhLB0Gh`i?0sD9;&rdKVime(_ifoeyhd8>-xnreOyDd z)G^&xw~HW?NlI=0iYojsn>emVJTLepX}i(WiNij9A>5T-sT|EH#Bu9oyWOYSl8aD+>V@ z=_fsdK}iKcpihOch#;^q=MofbtYd#GyzanT@qWvv=D!aF@D4QR6$EdQ4K}rd&)|dg zF*>8qZo6IZ1#sb$AZR%jL0BRlpIH5rULSOI-sG`y3Se$>vQjc3a9!eBSlB?Y>6hdZ{QtyJmgY!iFbTvajaQGkyA2f~vIOWw*jwdnY%|(}&2$C*7O46Sygx zOz>wT`;vkMi_vt}!E+?5i4?wBZ{9tJFWO!!gZX(vsR!U!U52$Y zR+Cdxr^m-u)xaPbB!0*EG0Mx!PfScK02cb?vSr?SPhiioonf0x$+`oV9~5dqI=~K6 zB|5-~d$H}h64-f7t2Y5Fq9&&_9~udQQ~BKg;7d12sisiN7R|5^gYr{VT@AcyrUcJo zrGOC(f$a%MWLaT#clDP)OFloI9TCNw1G1CIF5j-Kdt*dcTp+!Ylm_IKvQfNr*C4iCOH{TmzRy`yn!s3V!&mxo) zV=|F6D!Js8L~SQ-OlLnF%`9j@xl~Bnk`fm30@fRXE*)Mh`HLbaPdvg(9j|< zj6NE;?@aMWFSk+3CIL&X7=%ilkAJ|Bu8RLRt~li}KqMO4^0O|+9bfX8s267?(8%uO zXtg01GKyU^Ln}L{*A-l28oNN-5Q38~q&?#+3~XL6E0)E_Sk2YM$kubEg!W(o~Qr znIxQywYFbcS1Qx9T`(N(KSM$@GZZ?0g=Xrk*CK?CES8@l##mDPi{@L38ghynin9zy zMmerBL5A#f zVBJfKDWq@CT31ki=u|nlt|BdlmE_LgMmYa7bMIQW0mkbnjB!$$kb2@Y8hJCO?xU&i zaRbhttwh7%Y8cit45AdAAwVRgzjLF4bZ958>vJ({pYbdI#XTADrlWLpWe%hY!W5JV7|0u)(Gwp~ zw*v251MdN{z1ik!3E&)0Pi=;w({Xe+vN*&TnJ;|KzZ{?T9YGkyi`foa&qKrN3Firz z6*J6e3;!2#0vk1(=5hKg^+R@(T@3-riOT@3l3xiEV17iz+4Mg6@^aK}h)qFv112di zA#jof1qC5L99qF(C-4RHU}$}9trLV=gWl<7APF;GI&=f06zJWW>gt^CF3cC*U+l8J z;P6eDrzZb!609TQw!C4;P)6JaIJN^f>AHg_J8_PXcY{_XnDMHstLsJXfMf0s_j_)f}{my{Lc>`KCCY-0Zp^CQGq>T3o357?-HfP+)Fiko!Bf~R?fFTmypp;ya8Wk_ZS-%0q!cHMb~yC~eVeA+!*yk`EKE^={_DtLkA z3IAZcKz{SY>fdxx#HV}KQ1V%%ADNg&wnBZ;xfoxL@j7e|)~kRy#Z7|-xQ*1N*)*P= z@)PnGn;`uiXhp!@{whp7`${n!N(1 zF6Qg+bKK@w2$W$GlqJ-<4GX9YvGuE8SfLsrl+jspC+$Zv*Me{A_6a8+`)lMVJAY1XYW^-ykP2x*$vdyavVgv{KH>WKkgD&UM-78@gK{55sj;zx zT^YS<01lK9tsxgTveVq`j(KIEqhs_g*%*T4WK-?imAlYxSUWvA3CIVHjp|#d)mI>R z4!9!&JuCT0&N*##Vcye!Wnk=D7D}{~GEW$=QI3<^0i6bO_L@yIs4-UDu#iP}es{*5 z1W;9g%TNy}d_MpFvo4z1;ufh=72@F;%G6s%`wxU907k(5pUT>IPq(J~bD%-t>rIUT z6cG?Tv1-3hHNc*t=JH1`kI|NY@GgcsXYG^AEcsBt{ z^cU?Dv;25#>HNmCD#b>j<&F{0F5Ph)6bjF_kn=O#UX;( z*!@C#DpxPl!S!}Kk~QBvreJo#MB#K95eWzGWih;N~iI^ZUpj?*w1>F`oY2LW+Mm*Xn54 zKm6rToawJt)sndioN+Y6nR`PE#UD6h92}gHJg7?TR?I&cKjB(#8RYlcQH^;L3`SjC zq?+$1D46LkbxZ6L-i)6LjTuhxYLAz1_8&8{nDaY$5Amy-N`;7t@n3q4yDYjUIPY_Q z*?XdhAAVGgWyE%n)JGp+kH#})u7zU`t~ax9@iOxKmOfjr8ZodBpZ0NYw#_@YOa@#}c?(~a- z)M+P@91~y11za5yT!y?Ku3Kn#KQolOGCqXHi?#ki>VA_dF42`MLi!2*YxVlc)ebdP z5VVA;b_RscQ8v zZ6<;d=UZpaKmmpjN+TJnG2ITv>Lk9!yYkIQfV%YZEvd-`+r+kZBG$ zXY@Xg?7Xx?99nW;L;|~2l1*a4isayOcU1QJ-H;GT-enY?RYckO=%1f8U5a2 zQB7Ye?U8(R1dH_l3CzQwg7+=K{3PBTes&Ln;~aT`?(q^#E8S;c*WE)X#*W2Y(h2xT z9qTn(mFPKqWQqm6gF$6Rf*J1=lZv$}A76M$AP%@7Wd(FI&N~rD?U$FAlXi`(M@K`}3+l^=a2* z|6EwmDq#B{sz__?EiS>Eetr@yY)s7gJW1ktsH%3nC zRLAy?4&R+&j5N=XoFNlF3=jYdDCWt!rywu~a427rb&6)_(Z#1PAzLrmr5gab2jr-I zBVeNZoP>wds>k9XZWP*Y#7_KqJ~FigEp4Ah34%O? zFagfC4+_rG*=Z6g%X?nm*lla=;KL`jFbv zd;*swxkbbcCJY|x`8OY(-7;g1GbV{nO%xW&L_a~Sfv*rmjg8=ZAv;wolf%XeCP5)u zehtF}8??wET%2(H6;fMt^Cm9hac2FJ=vO?f_2j=?M}vtro^4j;Q?EH`{~R#e8lEs< z77kmcxc)9U*nE2wZ~4W;ZBeLkYZFDzd)t@10pf36oT8=18q#fj-27Dj6yKen*E%FlhRyti6{96YVln~0TJ)#>v zG)}I9?8O51qQcS6bkraEP9;dTzWC|-I`ty!r_M!W|suJHIu%My^`j%>M-!g zW-z+!KEK}6z`v#rrl%&cEnA5zFHfUkUue<)u5r|7)!Ez?n&}YElLHSQ*O$FWXq(FT=~xz@bBg~R?qA2_2A{npjRQBnf^ZUY zWSFRQRJm58R(1SvQJ)o9f6Yq3;ZVVlY?(KTj@r+vnK-!B9gE$dPG5AoVq^1_)il$( z;?--Rm~~-O;>Aa-W-F65S0okcq4;eoC%N(cKB89qMXxwlQc?mq$FA>m7W7R-$woL_ zO%%3=ox#%+4*()`@sFMDr4_4H&=Yb@?z6^vT6?g&jQ)%q@Tt0H7WP zW#vYdA7Jmc?9fWGLtrgWG2*=w_jal4`lz-iH#>WWvtymrcLNskW*!_aFwDL54np2Z zD4^?l%fr*$-3>PPnKI}hL3hUS?bOiC8O@9+|6g0dxZ|AvPdu zcsfsHx?O9Hwp!~5T<%~pu_$Lj)CQ=|3x_H#Esby23-HO&2Y@#6H$MynZ}b@RyL+Vu zV^#ei)tBxwE=u?y040NY3-FMf-8gUn{qc*4MG?K;hY#kiy#P>q*)2-WfY?6}CUJIl ze0+Xu`T2K1&ol6424T^G=Y2?VQUjNrT9v?Nx*2KVDRCvk`8mm=VGol!4I3GOQJO|} zjmsLJVVdAXYTlDUu}P^~(KKqyR}J+iEg{5A4Gq1pc-Kp%A&8n;PmJLQscrN7e2p?p z25h;YAA|#==mT!}v^(^1N%)Z!srk!a7hyl5km=WjqwwZ&FR!t1hD9gPb=Je1$zsC> zPJ6dB9sk$=+HI8hr+>`5+*|rfOvJ6Q(9G9d=500%H}!qYz2#2KtguSXobgmxu8bda zxZQ?1EC+2cjbm8*C!=C9Sy>{N9;T*a;jO49oF*`*tAc3Yk>NAh1X!q)J=NN0o#|Ut z@zqVZ-&e#@C8(JhzUQwus1n1R8V^iilk&bl-FQ?x>LO12cWQGna_4^!x7M8PSbd2RRkcJls4NKPq1s#{)OlbGXYNK+xUX3C6zV=q z9Vem*b90`^;pu3zNvj$ z5J-(;BT9TE6q990{m*~;Qb?O$=+gxYGd2_@IL+M+LBB;+R<~9YQm0p~#gxi7zit>v zE@jlGBVKwQ!)jqkctEeXP~u5hId()UU|!hqU!64mM_yFyV9I<6bpg^(vRR~D!aNl4 z@AO+sQtU3B$Y*SL{=`XjX)Uj;yowuH2;q^E(S_H8!$DOQT8!yQtYw$RhQU6VY?70M zfj8OBkkEd zaBC<`!Az+fssFaHLLc3}ehOIDu4fy*LDbX>2I@4lHY6{V=j zfny3fgi^I~AfE)0$6&Mb8|Xbi7H1A^Iu6mL5i^Awz-jfWhjHpaG9J0*1m@(6*E&!y z12qUYIFT<*9idl^%$NWE`QU7i(SJp*-79Vmk7Y?ta3&7~`}pCE@Nk5EuQ(2%SxHwj z>s8eZ0GZP(AFxGZN`kyZC*;tlULt}#C^HX_Yw&6udmeck zzo9o}oZ@*`kSWQdd9yS2aMm1wT_B(^0g7mxsTK%S28qY~GgIKi?(m(u30P-=Ud^y} z@z4!4Jm-yhk9NMktCyWpMSnp}Ew=s#h>4&(JZ*q`6TPIMg1tYq3yW}=v`UNp5_S0W zcrO_Wf#@?4OI>(Ib<{fXTiA_>sTkPx{or)|P_>OV)q?z;#o@c}Enz~DL5(q0Ee6D{ z(FldL^yZFLHc1Gq@_&}AGtc=0y5{`6=CwX>$^Gm949wg=`u!aOa~nhy`7cN|24sgV zfIT6Hydi0So9TOU4#^4?A@r;zPCJ8+<+g{QX+|eW|3>mco?ggA> z=1-#KEkTqrRv3@lUan<}6tN@qyo3hRSbm-k9v&7InrPIA$P_;inW3mu%S}u$5conf z)9g_%10`#tY8nZ4dYV<w|c0>>3BNBkToQ^$9M&h?Y51b_tLP{tB`i z+jsKN)?+3zu;u$h+_KYbA+~Db~iNnE~#_RmigKI z>|*wcKbC;MFyV~Qy?bN!e&=>0nIh=G|81VPo5+>=ipvqISm}z7MnNpM;nQ~RPz^cx z9h=z4&R*f|^S@3@nfFtfI@$5xZojq?#GFerFL6oW%VhpnlYlId7VAN-S*r;`D|ck1 z8B~`<`B7oXRn+olhCMpg*`uq!GrRXPeGVbPgQfl0ZTa8&<%1}u$hBI>$Nb(m@`7Gt zR3_&%TwAY}hAjsVH%50m+k$%a#M^R%M?WvGO-E)cQ^F!|DAM74<1l`J-tUcG_g83k%+D+-w) zM;a_y+|5-$>F4ms{9+e!nvz{I6b7M1Yi^rn8%^9o(E=gc>gGWkOS_7j4_!yD=Cd0dD4_$b&z7wJbf^QT-RI7i~{G zVlL%J?V6)uzp7UA*%;bV45?anWEV5kGN96rQb4gw5~c&T9JvH{L*Y>pt7xdT9F*p) z{I6ttS_Qf019svrYl^hAwcL^bgD`bubFIg-R;%)hP}@%{ZUE6_5H&AwzMd#o@rs*r zE;zO`*gg19$kE3qi)-z|S|Jifv>*#Fg6jTz^emz;1K(5MF7=2ZsVP`OO$OHvY}aj` zeQa|Xa?YVd*6B?P)kC{m10a!H2}pP&zNokP3)1#LE;0ECpaXTE^*mm$g765i%d!xN zztbmt>%g0>K;Tl%=g%tmpPnt~f$si0oCD}>yH=&Wot;MIJeawLD|1K)Aj3O<0X_oO z@}Qjb`to@ngB3pjM%X^IH-VVZk{5pVT$wW1SAk5K@$K%lL-Y!mpi5#H$X;|ebLeFC zxIVsQ_;@16{sdbOz{k8m3%3#Y?B62I%*yKWN-v(xzIFA=#~)CL0D)6B$)n>D)CXW% zzj+UK{?bxyu@E%A@rVdm?tVkT!}r+?JuA-STq4s2)oYEDwVW^$pNAKvR0lU!j!&oF z4aW+_ME+`c>t(FK@a_$Q2g@+z#^Nrl(4Jys`}YyJGfpN=Gn4_((i^<$)YFUPytY#Lq#rpvf7{ zI&It{y ztZFHkaZ#h_dC$Is z$l*rp$=_|q>}*Pv?9@K*Q9BLNk7GO7ul3)>x4kVnw_hRMfmS_6+iWf?Xj)gj{CJxQ zp=Dw?!#b$GqeKhd8%|Iv8kZ$l3n{+bMuZ@m7_(FfZCPpKtu~?!KJD6nqQiP`U?Abm zq$>F;47x5AT@GLqQY1k)T$qqi3pf5X_O;n&<8i^L;j87e_CrZF@9P5b7B!9E!KQ?X zc-!ZqeY4^z^oq=K%Sdlnf=2DoaW7Jwd-YH#rlJ#wSIx1F+@w&f!7y`zm6`(4C`X)AR}Vfz!H0#9QMa)DXi8qba@Ag+QY>5a z%eJz$MIdxLL&fS#dH;DxgNmr|w|4>ICz0OjT=+Nsr(`Za z<*BiwdaYPoiaztul7DXDUG(hu(w2D`Lo}t_tPiZjaYk{2Qq|b;e&1(eJ6Fz|_~F9C z3?zY$N7s;V8T}2sVTWxsiIYnNaS49e^ftY&6!UO~*qdnG4%lUr(_-KwA_Ula!$$0Y z4h`5q6quh*Jbd}cIWfF|{*COdgF%~%Ily_fDsfbCF2}-MKRelKFs8o5WJwI34gwZ< z8_4)uTU!H)If{sF(6J5BSIUf!dpkgaXgu0{V!sww*vLu>7aj%y&12@$sYuqf=hk8U~GyznBRd$_w~E;WxeR%NxVK5BoE zkQmHgbSB?_gakc!koTa6%rY$JX*4AV0>ulY( zA+HYxqwqiz2&(5k{x@cN&9E{;hk+E=p#)QzY`U4{PcCgU8U8FukLRi$m8AwfEi$X7 z)q8dJn>Wisead=%Bwm)@O+=cEZxALge_d=b|8l>RE}%u=kKZc-aUYZ#cO*bi0^SIJ zAVC?eQj(dqH3|d_h(w@e8l%f|B6lfK;|HG?h;;{(3oGiXIKH}^Rh4KRV=H(-0f*iz()7g$EK~~MQnMcj* zE4!17SAG)jife(-;+Sp%>-upfM6V+OT~;s-9V%-*CL08nAs%W_QvNUb}$F; zycSt@eeoYB?&=y zj4(5}CGeEw!NmGScuZH6+Rli*~ zaiJEan12Y%7y1u5k?OL~`6`Fzsnt4;Xftqk%oi$s&BRZnh^ZpVI}TI*9fRi{f|nYI zO+4<}g3>pa!$KlBnzU_j&_<%IV+%9m;^e@w2hpi(qq~GR(0>;bj=n5QB2jY>`2?x) z*JLR&V76#P|F$o+FRYyUolsJBh&r3Z{Ib8U*8$nr4kDWQk^A{mWC*r8oOKE;4SdV% z;q{GC*Oar4E1PEA+xVn-H8nXJYTU$m*j~?+v!BRc|J)ZjbE7BsIgv{hjG6Q|p01nP zc$@p~aoN%PGCO3YcYc$FCBBo|S_cY`G^+MV2-j9V+j~Y=YMRX_@-F2GQM3Kpx?m; ze5Go&a`aE)!)eCEpl6jU0l8YlmjFz9-lY>MpSOw4;`@>Kp0lS8^h2-x&S9WhjHw{m zJOIf4oyi+5dGdO(Dw{1vRHgWgiCxk(t|!dDf%Q^HeLcsk&!E8gULXJa2Mo^tSaG+z zA1!p8b)!LYTz`KOc`)uWlpX~7llFEWFgXGsMNv`F8M+3zKd~b_0G{S@j*bL7?u^`A z&=|heam;*AbeWkW6cL|ln%fK3~&SDI7FWBra>pB{6%2?!~?9hgr-g1#)VB>QRov7gc+0e2hOZx zWKLQF!lx)WFJ>4j892l$QI*Urs3LEMLa9XZ6QxvBTU^I;Q}1%?e+MW@oWbyu ze;Je)hQd=`Lk#iEG+4}9Tty|sV8xn@aIjUQ?Nod9(lcuHa3m}q=q5DmD-><2>&=*n z2iQ79DQ(ptF_G|A=r(BOR1i1vy*5VKIGW`5mWWNu^aPpC-M!n=y*Zmm|23xbJbOr< zAi39G-epiSvYlFQGhaohZ?oH6r#7S9Kz%Um=sA198 z)bI3CQSapfF8%6u*EM627!k$qo-cSazFFx+vH!km$*qxxDN|7kue(>HggvGN>5qvk{gN|m9J=y#}EaVYfwvjQQ-cikdfTI41WbXu3M0)?sBm!D^+2@S;P>b$viq3|BY6eXo|;;91xmLf%6{dW1h|ju%>f` zL7@xVJahxBqqzz>1|?Fr>tkK0p1yvv+Qv6$ak&?A041^#SeLgM`)wZVoxczoZ9F~G zAM;2)I}75M8+*~AUAlyqq!i7_FwEQWzCc?;L?3l*L9zZcunnpdn$-y39hj~DJzP$| z*oo9!g7J|lbsW4AK)0*~BV(ouhvm#NN5}0N!B{lEAyETS@_0<1T_-LI6@ZP1;QOXQ zZhDCM9_x+?Ni%P@A|~8^Uotfc-cJMM7_0+vf92EV3+ZpYUo~9*(Z4p?=w5P^7f@Sc zwo{W$3VTy8Jk2$1=imU4yRsL+J>c)Jp%+cy3mY=eCf;>peZ31*>i+%^wHI!^NI<7r zIiND}_JQFvSHL}55pp~}|W!@ul-)gB7Q@>lOk=s5lD8HHT#^z!YVXj~# zdTILM%!Po{NXjT&VvlcJRcw?!zMq~`f}R?6tT=b)U(IV|33yzY1)W#)$gpA1gb4N- zDSDbP>d}jFGdp|4Z}^sPRm2c;7poA0rE_inXx7eKmC6dt+br4;FhFp^0FhcvU`;{} zb>AA{bF7~?3`C+Bg9Iwx_OXTv3jb@5sP3^W$T3aF8l?)sv{z>qv5H3AD45S86=Uys zZGzt)`G+1M^3=s|Y(Z^2sswy`PQGXeGX1h?mWpUW#-uHFLy4hrXO=M0fEzB6>w0$tVhGJ-oTL z6ss?#aa?tb^XgoG2-mI}@w?;i!oGkGBMtlqy?_(9*HC%oW3rfL&V0HC?|(4CcNWS zDDY{N^SsfsPe$JcWDV%HWo1OcJqMf2n4fjVUD2n|L2{eRqlaqTL<@279e12c8WWQl zrL){`lSgamy2}}tzMxWnz)!dm4_J8$-=I2kS3NF1l8=>n>W4+PpY$TXMgp|YC>1$r zWCZ%9$`9BK@SE;gSAR4*O7Ka)n4u;aH9Cui(IaPko4Q~pd>Tmpn-Hf&J2z8;|L0=UUf@n zr;xDl2_GifIUz?Y!T|v4V_)%8p^7KkH2*v8IBWQ!N*nNcywZ=DK;mal>lZIa(Sl>?nt#Kp45`oWmCnY$CAu7tFUvM>vqIxqJ>R zx3L}4+;B6iNX1aTDRsBs;U*@w9C(A*2?(I{zkgk{R`|VhluZI8P%bS-rQx;WehGo} zfy7pD+ibmb#bA1!_&X2U=_{YExkH0auli*>lhY+&2DNc^vwCt}BA*WIa459cm^e=v zOMXtUM0T(9>Ut;#yz0(nCH+mZzi;_7rzgMZW-!#71ochafm|8MT1AKK8wozgtI|>(UY;2W4NSKm%S(%7)`h2jA2vvt6GU(600VrhcWEd( zUcSuO{ri-+r&^4Rg(M{pROfP%K z5QdFQgUTKmvd1FXE&8jtZCJ-NN|absTqd7c#YRS7u8ATdac1`NM-V020DJv{Pi~@` zu4#CR8b2lcq5%wj_;@~pZ03)RRGn8O*FG)jLuAuz_L~_2doG4|E9s1P`ads*j&9K- zZwr~8(rXXU`XUCDmOm3=cAZNyo^$dn>sJy9KNAcqL!C7Kj|(u?N`C4ae587iVlgMK zoIlGisjrUWqWJVn+(S8$K1f7_o_U6Hw&-i?`pL9HYkEA33~*6FmZl=1#FdHMy;T~@ zv*yVjaPI7`7bcD`;+q$RB}jmw-KnCYEJ@+9iY4SLh`@Z;H^cJZ?5eAwj@KBG$E+Gs zfY3p8|5$F(N66ah+k2_4?#hJg*rXzPVeH=>XLjRHtD);#y)>zJ=vtc)*0R^@z@B&>3$Nm83rua;`Wks4c= zatP#8Xo8WjWk%M;pAJIOEw9|w#JGPAS8vcW;I*1=VNF*u+ike5DozgpF~eCvU0WOiE3aRdo*Nnz$R^Z_SsQs7K# z(YVbAOph=p(BOJOr0d8Gpn*5kANR>i3=?B+rKnw~UUyML7oN6n$LOO$sPVfhSl?iz zbS+UiE#g80Zor4;j~{?)zQ+c&4i=I(fLRavLa|7`_)G-QqhRh#1IB_Z1Am(>`N*;J z%GnJXH;;(Obo5>B+eEMISj;5(~ zeyLGzPDfBSM>KQ_1t0!Bz9blBA&_gj*XW2Ko0Hsif^!D_fP6$(N9UWY3N&K#l4$EAb z6rKEsO3TK?Sa_ws9>bwOfw4?BT(tNQ4Z^EOv#1~fPykoFWAw6Xj=EEL#y(x`x#gj+ydt>FteijFZ-ERn{VEu zw{q#$?eQ+;2n!8|!i{H1IHGdq-C&PBqFGavBF4b(v~HtP4sY1}%eOmJ z%nAnNz3Mq$%X5*N*JE4uf8Hmb(Sgr%cIrh+FC6Kk+? ztw*2Gl7lE=S!ITP4`+EGMdF{sO)^qD{J91&TsQ#C2a5LL_qpt90_NA_s2FJ7XmIqbez73%t z4sQPyXtUiR7|m>pVq$e-N`Fp!bDf^Gcg`xcBtix;^C}&TN`1;(mwjJWj!hgsv+_sJ z(l?ujH%u*s1R2Hku~3dj#~{bk07vr8B91^@lp2Gm>^8l5Y(2b~fSS)j8mzdh9u8Ob zw*0$Wu8{+@o;qo~>buOlF)u6I?olKDP9)6o$*22^uAArOj!WGe;ZX{)_ZUh(TgyEB zxA;iUy}^3IMg2%jA3G(6erG=v3B7}<;xMaLiw^3i|8oj_Gdz>I5hTj-8|D~7R8YgH zMX6F>!(aJ)U`Q>^dh;1OW8{rAV>J(&8ljZs=nwsO5(UI1pZv2fBfK}7JnC$nLQ?4R z5^$|1r<2t5Y-4#P06##$zo<)QrLZDGffcKCJ!G4HXactcztHFtKb2;Qo;5F7_ZbQm zry(g$LKTk;H4U0`BS(n(tBVe1FBeepdw*x$$g3n=wi zuirfYuc-J)Am}wk(sqEk9yRxxhIdqDf*4uaIgC*vgK-o`l>t-{K+FQV(eu8heV5@!0|THqbf{h2k>~r&BtiuFRx{B*h5pPbr(PbiF^Icjc4p38 zl1WpD2U;$Xz*oz+nhG~GPWpTrM2V|%|OxVvQUCQ1p?S-79V^IKG+ZblCMqy znA-H{MNZscF`y>*P3gO*d4)Z`q#hYVy&RtN<-vr`JfkZQD=D?z1#{Pe?=a6)bnRw33L z1YsrHT~cyo%YQ@-M#fduO-R$BLk$-dV;AjJ?FfpXoJlDr{DBHh_=*t=6-1pI)Ul_R zn@RW)AyejTLS7PvFD4Kvnl{U=xC0-4p5RJVNFz!`K~wd<2n9iJ;^}8HO~BpT&hzmn z<<-0v5&OVcGH9XO2Q<+ISfiXjNS|MU0k>^AGx|*1Pno}_K8u+@9ttTcDz{)cSB@L7 zDw{jOk~YpD{$i7$CSy8dB}Oe4Zsa;m*sVGC^SrEf>S%48pjZVKQr(Qqy>6owV#G&^88NVJ^mPmsTU3e?TX#x8 zV|H-VQTy8e{&Xd2OLXmYH*bNMs#paRR@bzOM&f-M;(#%^lxihlY57fi7IPYXSTv?h z6+1S3hIiO#G$~^`AX7@ z6>@A8FFal$qBcHPHZ8+2z}}RG?aWRL0CYrjW;eju^umJtwBd=MKk>+}*TR=HCPt-N zYHM0Oxd_R9V~4hBN?&amjf#I|+*JsDb@6K`#+VpbAR*(B%(EZE1hJ#*T6hD%=uYR_ zcJH_d()(27$F^Yq$D<>*YuT7jaZakJ@3tDbf4B2}xST6Vn|1X7yIBpV;vAq(8n(L~ z0@Dy+H#?m1g4qDo@w!9$8^-Aze&7tJRXGocUVuC44$MA$x~5e77WAf~q9Z{w0_q7U zWndc#s1(A5Xk+xFb6ro*#~*Z)sau_=;8mnIU8fCqr_?%ZlMAsJ`q3i{cVBNwKWp^} zJnZfarG+LbB&TRm53Mh^{i{L~Eq&d9s=n?z{mNigBB618UXvaYUeTYvnVvbjS5Xnh z!W=Dj-UgqT6rrgJ3WU3t7qKKT#hp0|1i}$8tZmU|X(Ukt)A8v`g9h@)o51IrP$Vp{ z@F)O#&q!PUt9s^&@ z2~K`(-87ecg{$6Y-!tHD47L&ASKw6lqGJ62xR@lQvgh%{5e(*TH>V$PHh>1`p6z2d z$gSC2T}?iOkDGZv32n8sWvgduz2SfK>$`Rh=zf*M=lPjS>kn7jT8U$sU5B5x979Rb zsDvI#{@_>cC=*kYYHT6cp~OS?S%<7rYm=rKDKb-ygi}hZ?N_!6Xe**-O{(q5#b3B* zWOl#MG0MOFLWGp;eCU_fQCK%AMEqZ-arY=DX1tP;Qe^(>(TMDBRL%|V1&nAE`WRRA z+p2F93*^kfbbniD=qmOW-o-D4*T(*O*0=m_j5=oIuh@v%`UgjcA-0HK_7`80B?Tjb zalY*ghqyoQehZv>T%Ibwa;p16)VLl8BjSJXNkVC1uPiL^k&K<-ORh?;V)_YF*;v@* z0=aWPmn{pmHdf_KUUW8@@5vukU2SkNe$Q`;QXxAiuVUtc+Q23x%zSN{C4~%SM}{Kb zrQm*B7V7M;dB)TCjr&+Ty^!0uT7uu#X4(0$9cnp_VBg(PR-0Tc>`QPSl2_w;TlwrJ zJ216=u-4b<7waf+q22kBmGzHX1JBM1`FHd|d@o)^S|gL(DGTWlx){4{;Q}=&X+2xf zAE=PdnI+kx_iXD+1~G3aMrdV!HPC0iFL92YJshsT#vJ*|(1Dm0AR(7YmuM@W24{k&)zbfd4XLtN{Ih+L8a0aPA z^yD5b4Oawwq1V)O=+02KyzHbWPKm;shmU{>;*L@+Q04pW2@LR3#k`k&4j@Zb7!n(J z$dhQ#^IAT3cd%@4UqN8FbB@>ohVs8G<3H`4n~ki{30fUxWFsFyM&UO)m?!pQBy}~> ziRtPWXa`3%aEgBEOcBSJUJdLbYHVCeCwh`v%$MHX$no`o#Od68@ zG2s|+nf)@3WKSOeUlf6N?>we35a9~a5vC(;NFlJ*bdmJ3xG?7x&V6|9&Z_u8)w1*V z78rkqHeUl1VO(ljhk8lXPQN=BdwY9ZTQr=BhGUNo0N>-ms%Z56QUGn*i3^^%Eqhq7>1bMd71Z^L9uvGHd86uzMkiA; zDnLl*P-qJOYafcnyV0U{=fnq?quWO8UZ9x&{ab%5l&Jvz$+#e1|NREZ1S_ETWEF33 zZKdmLlHBQ?)YNnrpumF-eDs>A2%I>?LWhux`Ho?frp>1P(q*jNmYSKr_!Q8YPZX zHEWVWASXc}7Ch*@9L$9gN_2gNgR{hhSb`p@L^O)$izOj3rF)jsIz?nIiH-BSka1+r zBv-!#DnT$3F=iE)Yml3s%k0gWNL8ytC?2a31B1_zKnK595D^KzCwMme8-M_jMIN-5 z?7}60iK<5={_{I!5)#%Ms~{m&poQCo(o})>%S7hgbX;{raF%v_r>Bk1gv{h_dBcXD zvVF|fIsz*=Z!L6{ESYy6Cjjdh`u#TE;sdiZwwpHFqYcOaukYTkH<>aO8FHs>H7 z!yvs}h7g`+Zv05&A@}Nv&e@efmxHCL>vzFgY@AGxVH|4X>Ferh`eve%`;fT-s;{w- zg!UIPZ5->1>O(=A=f86QzGCDf!oOP@k&)wgQG^vPZbF&U`$JGBA3$JRJt;+D_l24f zvN4qWTtBIP-ankW^(Q)V0_5EN+qthbSb)h%qE! zQ)13SUC_`{;tHVF1Hiz+HN1v6z zKjDm(7*&j!L1Vn4((Gar!z=mhfxKb8;9Vr9h(U&!MIglbm5x+x^j! zFHMj^JvHz}2?_85z>N-;`L$r4xCwZd_reMfyzvaY0W$;ex%CSSdn@$pn~A`*%;B5IN`dG~Q)%IEPgUCnF;x!0%)aEa$;Uhw~S-A%U97 zZ@nBH&w%sf)ADox?cW-6?r#JadNsa+E9|TXKb@z910KBCi65?8dq8Y^g0N=t2Q3AZ z6Q?<-FJ@31iwc%jC_tuxP+x_$^%zfuiFrgJtzwWGC#dqqu-B4&1nlkd4ldgiaAi@4 z;_l0I47>mRseEw)2GtfYDqcz#ivbx<4)y#{?R`3#T!@>z~Z$kt!7-ra?@NPl@_L{9o}8;v!sLSw+fT$L#qa2 z^p@FNB@+ZuDKfmw@%9S0DQ{8jw6w_78oWSBph1q#6uP5V+m+o%#pc46d0> z94TPsRb)9OemLe0MX?xn zKWF+n+J+lcU7aDDlS2@4`3ifeQ&b|78gl@05T=MV{kZ4tB5&^E79v8o^UG2fko63mH*88ig+AqP zvQ;b2xdlGwS5%qx2=1NM2P6)-WY?*Z$}o1PWjqasl3+8!vN(Pn`<<%oV!KvHf@aiK z0J&&j#Kgp|e|vHbDis~b^3Yo}!1cxLbLv?h^V6RF@GP2@LW7QA5BjMW_}9H=>LJUj$Esg zw&x|JC8t;h?A}N(uoTPGEeHpXa$rHDIjm zan*hxL*;&M1}#$?HN-~!*R}bg*S}BNy8@)4`^U3DHpXQjntf>rSSK#d&+F);Ure=u zwBtp<^7Qm%#z_(<1zfa22a&Bn3(`zMBLm-80N@%pI|1eq9Eu@<(n{`!;PKK@c$@}q{T4fWdw)RQ z3Ist3FCK5e&ihBR6Ep8&%G2$LNB|JKy|BFhn^W!q8H1aTr=CFOr<^1~Zq);-5t!Is z>Q@sS?t8_We7=O34F2dsvVj#(?758^O0lAQy$^KYzOTz2<3Fobv%>elD98~3(==Z@XV@l2inYO>&5p^`nWs;N_!AuO4dq9tiv);I*6pb%GW8}~WrYO5lLZ6G4u$q^^`4{!%$12MKU4!sYNzu$uNo;S5eB)JgRf!^ zx&CWD$xxxLu1kClQbGy_{M5gSitz@MLcRu7GXdGzBL<4HV*(s}0`s=YoSQ0`rYp0k zD!S>dQNevg|01>M_x#ffy5Xp)TKQ2+KKjyU(m$n6-%?(1B12>22dwIjC|Zc zAG+fGdxuruDNyQ9H_?DpWM`6w0K-@^1L0yEh=lJ&EjJvj1h&wde!ecVA75iEEJ)dg zcF$yuF=-TjnURb0In?WETDw8%AZ7IbJL*M9{-0v&hK@=V zbMM5xAt;*=96QhWg*wxcq(!6@;mw~xdwoMsC3|}XGNZSj8sErW=$qxT5bEZZ$*S#w zCiK`%ttd4t2%3llCn06;P{Tjn72uiSPNYj4mLz6$jto(F?`nXAPlX7NkTr^Az!ZUe zK*43Lx#Lp+C4;Dxsi0Od;OHN9-bktf&Pk~?V?nCKCjeE*gy{<1O^2wYEskpM12z+?2g-x!s8gSOa-2yIRua->bvZoJF;qb-88);&}Jwo zWl=}{$PM0xhoD$wAKdx9Bg#Al9AT=qkf%SjPk+Fq5M3yPdoDM*T2T>_L5@S?1GYXG zVa1|VL5WQZzXq9NUxXU1AWG=|v;zoL@BE&CV=L8TRH)N2R$slY-Z#MKwjukO2 zR<53a2#-{AZ-8ISoI-z%jmehH0kH)Km!)nCxbqtuUESQ=oSd*nUS11e2_Xo}rBPbZ z|HnSRR}po=&t7>#MrB}PxBCr@8z%I3z|jQc5bb^CHD(fn9BMDI`qln?8Q1_9(b3dY z+~hODHDAtKZkN3c^wE}eJE+{8h8m$FZ88y?;R7Hf7Spyg_Ilkt09fkf z2*BV@;3)zg(*f6wKuULfa)R*hL+2M7rUsd+p@D0Qy6b<_zvNjGHv{{IZ`Td7X*^;S>zcZ&7^PMCYf}(4Bo8ZR%MzpKBr<;{F*X$H zElF^N?86g4rJ|w*Ub!IBQcv$@V!Pwh#W2gerMShaevSLPJ29?&FyxgK8cpcEhe8|` z$*3)Vl~@fBafd~ZCY`t8?Wqi%v928MAsz0ZX4n5r{o^cbV%a*5=SFyJ8UQOPLm zF^oEue6!Z%SAx!FDSXC12WzMwjVTHLa{5F>=QpY7I)1r{r_Qb+D*Fh5x=r~Wz#Jjf zc&g~pGgVYw&W#h#ovAt$xDnHoDs6tyTu8h;CXqj4Izka8DH4tPRWUU}jcWSeXm1vV z%(2x+ev1Yd-R4CAKK!>Kco3!ZX!Fqqw+EmJLH5D<}<;-|VBcJyoF$ z%@0v!wrFUscnxFp3#LbO^@Moh=cVWl;t)ueWh~~8=a_9Ab<{MNH zu`h`P*vfF|lyJA$yT}BLZiCWvJ7Z=-zi(Pvc#%Ti+d*|3Tv@sbtE&~y+N#EN)4Ke; zby8^H-q3&jXvJJ+-(2W_6z2YutSy8nHg@fS*u!SlYu+u~aw?{fKKjrtm)f~C8Dw_R zb0*H9PlA6>$Pw~C+Cz^W3>~Hk7tUPP2Ih&2@iaM-5*!s-KdZB$bG8DB6ke02q_E)Q zPMUog+hy?#IJ>Yfdf9d3bS4mdQrCBRG55bgyF7IE_xEoZb{3o{^7PEIx$?SjfEWPK zqEq2>e1woY+5d3?;sMa;r6HG+-;0ifOilB{O3Wtw1U5*VozB?}pRWrD?ZMR?(^FX& zubWm~TPvTG&8-M3gtC$nVNCcpl>orz13kfiv*4b`jnzJ9hai)tV5^HwqE?MJOzJT` z^{V2_QkuvvL+4n3BG(8a)qo!20{5NOvPUJy`C zO$u^yz6081Syg=S4AQ5YJ&v&q(f#~%c3f|_y(RT>sG}ffeDRIUXnkRldCYH^2WWtG z7el5s^&=K!R1)N5GfgB#z5|3pXJ5iuHPRL^B7sd2cr$2N%y0xX+W8ChsU=#h4t&-| zDkU->VR3nff%SlyrKPl*RNROuiW3X1p0TZ@8mmY0j1~2wMo2Jlq8=|sO@)KkKPs

    qLSr`x05I{{&>|c-x6a5G8+9 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≫v3VY+|a>H`5} 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%0D$@N?x%Il+39J|Qxp)0 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

  • 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, title, type, status, imagesUrl, hit, remark, createBy, createDate, updateBy, + updateDate + + + content + + + + + + delete from tbl_article + where id = #{id,jdbcType=INTEGER} + + + delete from tbl_article + + + + + + insert into tbl_article (id, title, type, + status, imagesUrl, hit, + remark, createBy, createDate, + updateBy, updateDate, content + ) + values (#{id,jdbcType=INTEGER}, #{title,jdbcType=VARCHAR}, #{type,jdbcType=VARCHAR}, + #{status,jdbcType=VARCHAR}, #{imagesUrl,jdbcType=VARCHAR}, #{hit,jdbcType=INTEGER}, + #{remark,jdbcType=VARCHAR}, #{createBy,jdbcType=VARCHAR}, #{createDate,jdbcType=TIMESTAMP}, + #{updateBy,jdbcType=VARCHAR}, #{updateDate,jdbcType=TIMESTAMP}, #{content,jdbcType=LONGVARCHAR} + ) + + + insert into tbl_article + + + id, + + + title, + + + type, + + + status, + + + imagesUrl, + + + hit, + + + remark, + + + createBy, + + + createDate, + + + updateBy, + + + updateDate, + + + content, + + + + + #{id,jdbcType=INTEGER}, + + + #{title,jdbcType=VARCHAR}, + + + #{type,jdbcType=VARCHAR}, + + + #{status,jdbcType=VARCHAR}, + + + #{imagesUrl,jdbcType=VARCHAR}, + + + #{hit,jdbcType=INTEGER}, + + + #{remark,jdbcType=VARCHAR}, + + + #{createBy,jdbcType=VARCHAR}, + + + #{createDate,jdbcType=TIMESTAMP}, + + + #{updateBy,jdbcType=VARCHAR}, + + + #{updateDate,jdbcType=TIMESTAMP}, + + + #{content,jdbcType=LONGVARCHAR}, + + + + + + update tbl_article + + + id = #{record.id,jdbcType=INTEGER}, + + + title = #{record.title,jdbcType=VARCHAR}, + + + type = #{record.type,jdbcType=VARCHAR}, + + + status = #{record.status,jdbcType=VARCHAR}, + + + imagesUrl = #{record.imagesUrl,jdbcType=VARCHAR}, + + + hit = #{record.hit,jdbcType=INTEGER}, + + + remark = #{record.remark,jdbcType=VARCHAR}, + + + createBy = #{record.createBy,jdbcType=VARCHAR}, + + + createDate = #{record.createDate,jdbcType=TIMESTAMP}, + + + updateBy = #{record.updateBy,jdbcType=VARCHAR}, + + + updateDate = #{record.updateDate,jdbcType=TIMESTAMP}, + + + content = #{record.content,jdbcType=LONGVARCHAR}, + + + + + + + + update tbl_article + set id = #{record.id,jdbcType=INTEGER}, + title = #{record.title,jdbcType=VARCHAR}, + type = #{record.type,jdbcType=VARCHAR}, + status = #{record.status,jdbcType=VARCHAR}, + imagesUrl = #{record.imagesUrl,jdbcType=VARCHAR}, + hit = #{record.hit,jdbcType=INTEGER}, + remark = #{record.remark,jdbcType=VARCHAR}, + createBy = #{record.createBy,jdbcType=VARCHAR}, + createDate = #{record.createDate,jdbcType=TIMESTAMP}, + updateBy = #{record.updateBy,jdbcType=VARCHAR}, + updateDate = #{record.updateDate,jdbcType=TIMESTAMP}, + content = #{record.content,jdbcType=LONGVARCHAR} + + + + + + update tbl_article + set id = #{record.id,jdbcType=INTEGER}, + title = #{record.title,jdbcType=VARCHAR}, + type = #{record.type,jdbcType=VARCHAR}, + status = #{record.status,jdbcType=VARCHAR}, + imagesUrl = #{record.imagesUrl,jdbcType=VARCHAR}, + hit = #{record.hit,jdbcType=INTEGER}, + remark = #{record.remark,jdbcType=VARCHAR}, + createBy = #{record.createBy,jdbcType=VARCHAR}, + createDate = #{record.createDate,jdbcType=TIMESTAMP}, + updateBy = #{record.updateBy,jdbcType=VARCHAR}, + updateDate = #{record.updateDate,jdbcType=TIMESTAMP} + + + + + + update tbl_article + + + title = #{title,jdbcType=VARCHAR}, + + + type = #{type,jdbcType=VARCHAR}, + + + status = #{status,jdbcType=VARCHAR}, + + + imagesUrl = #{imagesUrl,jdbcType=VARCHAR}, + + + hit = #{hit,jdbcType=INTEGER}, + + + remark = #{remark,jdbcType=VARCHAR}, + + + createBy = #{createBy,jdbcType=VARCHAR}, + + + createDate = #{createDate,jdbcType=TIMESTAMP}, + + + updateBy = #{updateBy,jdbcType=VARCHAR}, + + + updateDate = #{updateDate,jdbcType=TIMESTAMP}, + + + content = #{content,jdbcType=LONGVARCHAR}, + + + where id = #{id,jdbcType=INTEGER} + + + update tbl_article + set title = #{title,jdbcType=VARCHAR}, + type = #{type,jdbcType=VARCHAR}, + status = #{status,jdbcType=VARCHAR}, + imagesUrl = #{imagesUrl,jdbcType=VARCHAR}, + hit = #{hit,jdbcType=INTEGER}, + remark = #{remark,jdbcType=VARCHAR}, + createBy = #{createBy,jdbcType=VARCHAR}, + createDate = #{createDate,jdbcType=TIMESTAMP}, + updateBy = #{updateBy,jdbcType=VARCHAR}, + updateDate = #{updateDate,jdbcType=TIMESTAMP}, + content = #{content,jdbcType=LONGVARCHAR} + where id = #{id,jdbcType=INTEGER} + + + update tbl_article + set title = #{title,jdbcType=VARCHAR}, + type = #{type,jdbcType=VARCHAR}, + status = #{status,jdbcType=VARCHAR}, + imagesUrl = #{imagesUrl,jdbcType=VARCHAR}, + hit = #{hit,jdbcType=INTEGER}, + remark = #{remark,jdbcType=VARCHAR}, + createBy = #{createBy,jdbcType=VARCHAR}, + createDate = #{createDate,jdbcType=TIMESTAMP}, + updateBy = #{updateBy,jdbcType=VARCHAR}, + updateDate = #{updateDate,jdbcType=TIMESTAMP} + where id = #{id,jdbcType=INTEGER} + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/BugMapper.xml b/src/main/resources/mapper/BugMapper.xml new file mode 100644 index 0000000..1e78fb6 --- /dev/null +++ b/src/main/resources/mapper/BugMapper.xml @@ -0,0 +1,37 @@ + + + + + + + + + INSERT INTO bug + ( + id, + product, + bugRemark, + createBy, + createDate + ) + VALUES + ( + NULL, + #{product}, + #{bugRemark}, + #{createBy}, + now() + ) + + \ No newline at end of file diff --git a/src/main/resources/mapper/ClothingTagMapper.xml b/src/main/resources/mapper/ClothingTagMapper.xml new file mode 100644 index 0000000..f5a44fb --- /dev/null +++ b/src/main/resources/mapper/ClothingTagMapper.xml @@ -0,0 +1,26 @@ + + + + + + INSERT INTO product_clothing_tag + (material, + technique, + product_membrane, + product_slice, + is_rope, + compute, + formula, + rope_formula, + is_multi) + VALUES (#{material}, + #{technique}, + #{productMembrane}, + #{productSlice}, + #{isRope}, + #{compute,typeHandler=lingtao.net.handler.MapToVarcharTypeHandler}, + #{formula}, + #{ropeFormula}, + #{isMulti}) + + \ No newline at end of file diff --git a/src/main/resources/mapper/CustomerAwardMapper.xml b/src/main/resources/mapper/CustomerAwardMapper.xml new file mode 100644 index 0000000..3c6141f --- /dev/null +++ b/src/main/resources/mapper/CustomerAwardMapper.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + delete from tbl_customer_award where id in + + #{id} + + + + + + insert into tbl_customer_award ( + id, nickname, payPercent, askNumber, customerPrice,award,shopname,awardDate,creator,createDate) + values + + ( + null,#{item.nickname},#{item.payPercent},#{item.askNumber},#{item.customerPrice},#{item.award},#{item.shopname},#{item.awardDate},#{item.creator},now()) + + + \ No newline at end of file diff --git a/src/main/resources/mapper/CustomerDataMapper.xml b/src/main/resources/mapper/CustomerDataMapper.xml new file mode 100644 index 0000000..c2e52ce --- /dev/null +++ b/src/main/resources/mapper/CustomerDataMapper.xml @@ -0,0 +1,155 @@ + + + + + + + + insert into tbl_customer_data + + + username, + + + realname, + + + role, + + + price, + + + productExplain, + + + wangwang, + + + isBuy, + + + commentSelf, + + + createBy, + + createDate, + + + + #{username,jdbcType=VARCHAR}, + + + #{realname,jdbcType=VARCHAR}, + + + #{role,jdbcType=VARCHAR}, + + + #{price,jdbcType=DOUBLE}, + + + #{productExplain,jdbcType=VARCHAR}, + + + #{wangwang,jdbcType=VARCHAR}, + + + #{isBuy,jdbcType=VARCHAR}, + + + #{commentSelf,jdbcType=VARCHAR}, + + + #{createBy,jdbcType=VARCHAR}, + + now(), + + + + + update tbl_customer_data + + + role = #{role,jdbcType=VARCHAR}, + + + price = #{price,jdbcType=DOUBLE}, + + + productExplain = #{productExplain,jdbcType=VARCHAR}, + + + wangwang = #{wangwang,jdbcType=VARCHAR}, + + + commentSelf = #{commentSelf,jdbcType=VARCHAR}, + + + updateBy = #{updateBy,jdbcType=VARCHAR}, + + updateDate = now(), + + where id = #{id,jdbcType=INTEGER} + + + + + UPDATE + tbl_customer_data + SET + commentManager = #{commentManager}, commentDate = now() + WHERE + id = #{id} + + + + delete from tbl_customer_data + where id = #{id,jdbcType=INTEGER} + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/CustomerTrainMapper.xml b/src/main/resources/mapper/CustomerTrainMapper.xml new file mode 100644 index 0000000..9af1908 --- /dev/null +++ b/src/main/resources/mapper/CustomerTrainMapper.xml @@ -0,0 +1,134 @@ + + + + + + + + insert into t_customer_train_content + (pro_type,kind,sort,content,type,create_by,create_date) + values + (#{proType},#{kind},#{sort},#{content},#{type},#{createBy},now()) + + + + update t_customer_train_content + + + pro_type = #{proType}, + + + kind = #{kind}, + + + content = #{content,jdbcType=VARCHAR}, + + type = #{type}, + update_by = #{updateBy}, + update_date = now(), + + where id = #{id,jdbcType=INTEGER} + + + + delete from t_customer_train_content + where id = #{id,jdbcType=INTEGER} + + + + + + + insert into t_customer_train_pro_type + (pro_type,remark,sort,type,create_by,create_date) + values + (#{proType},#{remark},#{sort},#{type},#{createBy},now()) + + + + update t_customer_train_pro_type + set + pro_type = #{proType}, + remark = #{remark}, + sort = #{sort}, + type = #{type}, + update_by = #{updateBy}, + update_date = now() + where id = #{id,jdbcType=INTEGER} + + + + delete from t_customer_train_pro_type + where id = #{id,jdbcType=INTEGER} + + + + + + + insert into t_customer_train_kind_label + (pro_type,kind_label,remark,sort,type,create_by,create_date) + values + (#{proType},#{kindLabel},#{remark},#{sort},#{type},#{createBy},now()) + + + + update t_customer_train_kind_label + set + kind_label = #{kindLabel}, + remark = #{remark}, + sort = #{sort}, + type = #{type}, + update_by = #{updateBy}, + update_date = now() + where id = #{id,jdbcType=INTEGER} + + + + delete from t_customer_train_kind_label + where id = #{id,jdbcType=INTEGER} + + + \ No newline at end of file diff --git a/src/main/resources/mapper/ExpressFeeMapper.xml b/src/main/resources/mapper/ExpressFeeMapper.xml new file mode 100644 index 0000000..7d6465e --- /dev/null +++ b/src/main/resources/mapper/ExpressFeeMapper.xml @@ -0,0 +1,53 @@ + + + + + + + + insert into + tbl_express_fee + (province,pro_type_label,first_weight_price,continued_weight_price,start_price,createBy,createDate) + values + (#{province},#{proTypeLabel},#{firstWeight},#{continuedWeightPrice},#{startPrice},#{createBy},now()) + + + + update tbl_express_fee + + + province = #{province,jdbcType=VARCHAR}, + + + first_weight_price = #{firstWeightPrice}, + + + continued_weight_price = #{continuedWeightPrice}, + + + start_price = #{startPrice}, + + + updateBy = #{updateBy,jdbcType=VARCHAR}, + + updateDate = now() + + where id = #{id,jdbcType=INTEGER} + + + + delete from tbl_express_fee where id = #{id} + + \ No newline at end of file diff --git a/src/main/resources/mapper/Finance2Mapper.xml b/src/main/resources/mapper/Finance2Mapper.xml new file mode 100644 index 0000000..2c68fc9 --- /dev/null +++ b/src/main/resources/mapper/Finance2Mapper.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + insert into tbl_sys_finance2 ( + id, add_time, supplier, + shopname, kind, kind2, + order_number, filename, count, + number, zhang,remark, creator) + values + + ( + null,#{item.addTime},#{item.supplier},#{item.shopname},#{item.kind}, + #{item.kind2},#{item.orderNumber},#{item.filename},#{item.count},#{item.number}, + #{item.zhang},#{item.remark},#{item.creator}) + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/Finance3Mapper.xml b/src/main/resources/mapper/Finance3Mapper.xml new file mode 100644 index 0000000..82397c1 --- /dev/null +++ b/src/main/resources/mapper/Finance3Mapper.xml @@ -0,0 +1,252 @@ + + + + + + + + + + + + insert into tbl_sys_finance3 ( + id, add_time, supplier, + shopname, kind, kind2, + order_number, filename, count, + number, zhang,remark, creator) + values + + ( + null,#{item.addTime},#{item.supplier},#{item.shopname},#{item.kind}, + #{item.kind2},#{item.orderNumber},#{item.filename},#{item.count},#{item.number}, + #{item.zhang},#{item.remark},#{item.creator}) + + + + + + + + + + + + + insert into tbl_sys_finance4 ( + id, add_time, supplier, + shopname, kind, kind2, + order_number, filename, count, + number, zhang,remark, creator) + values + + ( + null,#{item.addTime},#{item.supplier},#{item.shopname},#{item.kind}, + #{item.kind2},#{item.orderNumber},#{item.filename},#{item.count},#{item.number}, + #{item.zhang},#{item.remark},#{item.creator}) + + + + + + + + + + + + insert into tbl_sys_finance5 ( + id, add_time, supplier, + shopname, kind, kind2, + order_number, filename, count, + number, zhang,remark, creator) + values + + ( + null,#{item.addTime},#{item.supplier},#{item.shopname},#{item.kind}, + #{item.kind2},#{item.orderNumber},#{item.filename},#{item.count},#{item.number}, + #{item.zhang},#{item.remark},#{item.creator}) + + + + + + + + + + + + insert into tbl_sys_finance6 ( + id, add_time, supplier, + shopname, kind, kind2, + order_number, filename, count, + number, zhang,remark, creator) + values + + ( + null,#{item.addTime},#{item.supplier},#{item.shopname},#{item.kind}, + #{item.kind2},#{item.orderNumber},#{item.filename},#{item.count},#{item.number}, + #{item.zhang},#{item.remark},#{item.creator}) + + + + + + + + + + + + insert into tbl_sys_finance7 ( + id, add_time, supplier, + shopname, kind, kind2, + order_number, filename, count, + number, zhang,remark, creator) + values + + ( + null,#{item.addTime},#{item.supplier},#{item.shopname},#{item.kind}, + #{item.kind2},#{item.orderNumber},#{item.filename},#{item.count},#{item.number}, + #{item.zhang},#{item.remark},#{item.creator}) + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/FinanceDifferenceMapper.xml b/src/main/resources/mapper/FinanceDifferenceMapper.xml new file mode 100644 index 0000000..ff96dfd --- /dev/null +++ b/src/main/resources/mapper/FinanceDifferenceMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + insert into tbl_sys_finance_difference ( + id, order_number, shopname, + wangwang, pay_time, price, + remark, taobao_status, open_order_number, + filename, creator) + values + + ( + null,#{item.orderNumber},#{item.shopname},#{item.wangwang},#{item.payTime}, + #{item.price},#{item.remark},#{item.taobaoStatus},#{item.openOrderNumber}, + #{item.filename},#{item.creator}) + + + \ No newline at end of file diff --git a/src/main/resources/mapper/FinanceExtractMapper.xml b/src/main/resources/mapper/FinanceExtractMapper.xml new file mode 100644 index 0000000..ae56b27 --- /dev/null +++ b/src/main/resources/mapper/FinanceExtractMapper.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + insert into tbl_sys_finance_extract ( + id, order_number, remark, length, width, + height, count, filename, creator,create_date) + values + + ( + null,#{item.orderNumber},#{item.remark},#{item.length},#{item.width}, + #{item.height},#{item.count},#{item.filename},#{item.creator},now()) + + + \ No newline at end of file diff --git a/src/main/resources/mapper/FinanceMapper.xml b/src/main/resources/mapper/FinanceMapper.xml new file mode 100644 index 0000000..cc5c0e9 --- /dev/null +++ b/src/main/resources/mapper/FinanceMapper.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + insert into tbl_sys_finance ( + id, add_time, supplier, + shopname, kind, kind2, + order_number, filename, count, + number, zhang,remark, creator) + values + + ( + null,#{item.addTime},#{item.supplier},#{item.shopname},#{item.kind}, + #{item.kind2},#{item.orderNumber},#{item.filename},#{item.count},#{item.number}, + #{item.zhang},#{item.remark},#{item.creator}) + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/InformationMapper.xml b/src/main/resources/mapper/InformationMapper.xml new file mode 100644 index 0000000..b81f737 --- /dev/null +++ b/src/main/resources/mapper/InformationMapper.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + insert into + tbl_information + (content,type,createBy,createDate) + values + (#{content},#{type},#{createBy},now()) + + + + update tbl_information + + + content = #{content,jdbcType=VARCHAR}, + + + type = #{type,jdbcType=VARCHAR}, + + + updateBy = #{updateBy,jdbcType=VARCHAR}, + + + updateDate = now(), + + + where id = #{id,jdbcType=INTEGER} + + + + delete from tbl_information where id = #{id} + + \ No newline at end of file diff --git a/src/main/resources/mapper/LoginIpMapper.xml b/src/main/resources/mapper/LoginIpMapper.xml new file mode 100644 index 0000000..01e2a92 --- /dev/null +++ b/src/main/resources/mapper/LoginIpMapper.xml @@ -0,0 +1,59 @@ + + + + + + + + + insert into tbl_login_ip + (agreeIp,remark,createBy,createDate,updateBy,updateTime) + values + (#{agreeIp},#{remark},#{createBy},now(),#{createBy},now()) + + + + + update tbl_login_ip + + + agreeIp = #{agreeIp,jdbcType=VARCHAR}, + + + remark = #{remark,jdbcType=VARCHAR}, + + + updateBy = #{updateBy,jdbcType=VARCHAR}, + + updateTime = now() + + where id = #{id,jdbcType=INTEGER} + + + + + delete from tbl_login_ip where id = #{id} + + + + + + + delete from tbl_login_ip where id in + + #{id} + + + \ No newline at end of file diff --git a/src/main/resources/mapper/LoginLogMapper.xml b/src/main/resources/mapper/LoginLogMapper.xml new file mode 100644 index 0000000..ee1458b --- /dev/null +++ b/src/main/resources/mapper/LoginLogMapper.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/MyFileMapper.xml b/src/main/resources/mapper/MyFileMapper.xml new file mode 100644 index 0000000..89818e0 --- /dev/null +++ b/src/main/resources/mapper/MyFileMapper.xml @@ -0,0 +1,273 @@ + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + fileId, fileName, filePath, remark, createBy, createDate, updateBy, updateDate + + + + + delete from tbl_file + where fileId = #{fileId,jdbcType=INTEGER} + + + delete from tbl_file + + + + + + insert into tbl_file (fileId, fileName, filePath, + remark, createBy, createDate, + updateBy, updateDate) + values (#{fileId,jdbcType=INTEGER}, #{fileName,jdbcType=VARCHAR}, #{filePath,jdbcType=VARCHAR}, + #{remark,jdbcType=VARCHAR}, #{createBy,jdbcType=VARCHAR}, #{createDate,jdbcType=TIMESTAMP}, + #{updateBy,jdbcType=VARCHAR}, #{updateDate,jdbcType=TIMESTAMP}) + + + insert into tbl_file + + + fileId, + + + fileName, + + + filePath, + + + remark, + + + createBy, + + + createDate, + + + updateBy, + + + updateDate, + + + + + #{fileId,jdbcType=INTEGER}, + + + #{fileName,jdbcType=VARCHAR}, + + + #{filePath,jdbcType=VARCHAR}, + + + #{remark,jdbcType=VARCHAR}, + + + #{createBy,jdbcType=VARCHAR}, + + + #{createDate,jdbcType=TIMESTAMP}, + + + #{updateBy,jdbcType=VARCHAR}, + + + #{updateDate,jdbcType=TIMESTAMP}, + + + + + + update tbl_file + + + fileId = #{record.fileId,jdbcType=INTEGER}, + + + fileName = #{record.fileName,jdbcType=VARCHAR}, + + + filePath = #{record.filePath,jdbcType=VARCHAR}, + + + remark = #{record.remark,jdbcType=VARCHAR}, + + + createBy = #{record.createBy,jdbcType=VARCHAR}, + + + createDate = #{record.createDate,jdbcType=TIMESTAMP}, + + + updateBy = #{record.updateBy,jdbcType=VARCHAR}, + + + updateDate = #{record.updateDate,jdbcType=TIMESTAMP}, + + + + + + + + update tbl_file + set fileId = #{record.fileId,jdbcType=INTEGER}, + fileName = #{record.fileName,jdbcType=VARCHAR}, + filePath = #{record.filePath,jdbcType=VARCHAR}, + remark = #{record.remark,jdbcType=VARCHAR}, + createBy = #{record.createBy,jdbcType=VARCHAR}, + createDate = #{record.createDate,jdbcType=TIMESTAMP}, + updateBy = #{record.updateBy,jdbcType=VARCHAR}, + updateDate = #{record.updateDate,jdbcType=TIMESTAMP} + + + + + + update tbl_file + + + fileName = #{fileName,jdbcType=VARCHAR}, + + + filePath = #{filePath,jdbcType=VARCHAR}, + + + remark = #{remark,jdbcType=VARCHAR}, + + + createBy = #{createBy,jdbcType=VARCHAR}, + + + createDate = #{createDate,jdbcType=TIMESTAMP}, + + + updateBy = #{updateBy,jdbcType=VARCHAR}, + + + updateDate = #{updateDate,jdbcType=TIMESTAMP}, + + + where fileId = #{fileId,jdbcType=INTEGER} + + + update tbl_file + set fileName = #{fileName,jdbcType=VARCHAR}, + filePath = #{filePath,jdbcType=VARCHAR}, + remark = #{remark,jdbcType=VARCHAR}, + createBy = #{createBy,jdbcType=VARCHAR}, + createDate = #{createDate,jdbcType=TIMESTAMP}, + updateBy = #{updateBy,jdbcType=VARCHAR}, + updateDate = #{updateDate,jdbcType=TIMESTAMP} + where fileId = #{fileId,jdbcType=INTEGER} + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/ProductImgMapper.xml b/src/main/resources/mapper/ProductImgMapper.xml new file mode 100644 index 0000000..3f4214f --- /dev/null +++ b/src/main/resources/mapper/ProductImgMapper.xml @@ -0,0 +1,147 @@ + + + + + + + + update product_img + set remark = #{remark} + where id = #{id} + + + + + + + + + insert into product_img + ( + pro_type_value,pro_type_label, + + kind_value, + + + kind_label, + + + kind2_value, + + + kind2_label, + + img_url, + remark, + filename + ) + values + ( + #{proTypeValue},#{proTypeLabel}, + + #{kindValue}, + + + #{kindLabel}, + + + #{kind2Value}, + + + #{kind2Label}, + + #{imgUrl}, + #{remark}, + #{filename} + ) + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/ProductMapper.xml b/src/main/resources/mapper/ProductMapper.xml new file mode 100644 index 0000000..f566106 --- /dev/null +++ b/src/main/resources/mapper/ProductMapper.xml @@ -0,0 +1,328 @@ + + + + + + + + UPDATE + product + + updater = #{updater}, + update_date = now(), + + count = #{count,jdbcType=INTEGER}, + + + price = #{price,jdbcType=DOUBLE}, + + + price_multiple = #{priceMultiple}, + + + weight = #{weight}, + + + WHERE + pro_id = #{proId} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + insert into product (length,width,count,price,kind_value,kind_label,pro_type_value,pro_type_label) + values (#{length},#{width},#{count},#{price},#{kindValue},#{kindLabel},#{proTypeValue},#{proTypeLabel}) + + \ No newline at end of file diff --git a/src/main/resources/mapper/QuestionMapper.xml b/src/main/resources/mapper/QuestionMapper.xml new file mode 100644 index 0000000..c8e240f --- /dev/null +++ b/src/main/resources/mapper/QuestionMapper.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + insert into tbl_question + (question,answer1,answer2,answer3,answer4,answer,type,ansCount,createBy,createDate) + values + (#{question},#{answer1},#{answer2},#{answer3},#{answer4},#{answer},#{type},#{ansCount},#{createBy},now()) + + + + update tbl_question + + + question = #{question,jdbcType=VARCHAR}, + + + answer1 = #{answer1,jdbcType=VARCHAR}, + + + answer2 = #{answer2,jdbcType=VARCHAR}, + + + answer3 = #{answer3,jdbcType=VARCHAR}, + + + answer4 = #{answer4,jdbcType=VARCHAR}, + + + answer = #{answer,jdbcType=VARCHAR}, + + + type = #{type,jdbcType=VARCHAR}, + + + ansCount = #{ansCount,jdbcType=INTEGER}, + + + updateBy = #{updateBy,jdbcType=VARCHAR}, + + + updateDate = now(), + + + where id = #{id,jdbcType=INTEGER} + + + + delete from tbl_question where id = #{id} + + \ No newline at end of file diff --git a/src/main/resources/mapper/QuoteDataMapper.xml b/src/main/resources/mapper/QuoteDataMapper.xml new file mode 100644 index 0000000..68015e7 --- /dev/null +++ b/src/main/resources/mapper/QuoteDataMapper.xml @@ -0,0 +1,414 @@ + + + + + + + + INSERT INTO tbl_quote_data + (id,username,realname,role,shopname,price,isBuy,isBuyToDay,remark,remarkJudge,quoteTime,isSelect,isFillIn,wangwang,proTypeLabel) + VALUES + (NULL,#{username},#{realname},#{role},#{shopname},#{price},#{isBuy},#{isBuyToDay},#{remark},#{remarkJudge},now(),#{isSelect},#{isFillIn},#{wangwang},#{proTypeLabel}) + + + + UPDATE + tbl_quote_data + + + commentManager = #{commentManager}, + commentManagerDate = now(), + + + price = #{price}, + + + buyPrice = #{buyPrice}, + + + wangwang = #{wangwang}, + isFillIn = #{isFillIn}, + fillInDate = now(), + + + commentSelf = #{commentSelf}, + commentSelfDate = now(), + + + WHERE + id = #{id} + + + + + UPDATE + tbl_quote_data + SET + isBuyToDay = + CASE + WHEN + isBuyToDay = '1' + THEN + '0' + ELSE + '1' + END, + isBuyToDayDate = now() + WHERE id = #{id} + + + + + UPDATE + tbl_quote_data + SET + isBuy = + CASE + WHEN + isBuy = '1' + THEN + '0' + ELSE + '1' + END, + buyDate = now() + WHERE id = #{id} + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/QuoteLogMapper.xml b/src/main/resources/mapper/QuoteLogMapper.xml new file mode 100644 index 0000000..a30a8a9 --- /dev/null +++ b/src/main/resources/mapper/QuoteLogMapper.xml @@ -0,0 +1,67 @@ + + + + + + + + + INSERT INTO tbl_quote_log + ( + quoteId, + quoteIp, + os, + realname, + username, + brower, + remark, + shopname, + price + ) + VALUES + ( + NULL, + #{quoteIp}, + #{os}, + #{realname}, + #{username}, + #{brower}, + #{remark}, + #{shopname}, + #{price} + ) + + \ No newline at end of file diff --git a/src/main/resources/mapper/SysDictSearchProMapper.xml b/src/main/resources/mapper/SysDictSearchProMapper.xml new file mode 100644 index 0000000..7892d9c --- /dev/null +++ b/src/main/resources/mapper/SysDictSearchProMapper.xml @@ -0,0 +1,72 @@ + + + + + + + + INSERT INTO sys_dict_search_pro + ( + id, + pro_type_label, + like_pro_type_label, + url, + status, + creator, + createDate + ) + VALUES + ( + NULL, + #{proTypeLabel}, + #{likeProTypeLabel}, + #{url}, + #{status}, + #{creator}, + now() + ) + + + + UPDATE + sys_dict_search_pro + SET + + like_pro_type_label = #{likeProTypeLabel}, + + + url = #{url}, + + updateDate = now(), + updater = #{updater} + WHERE + id = #{id} + + + + + UPDATE + sys_dict_search_pro + SET + status = + CASE + WHEN + status = '1' + THEN + '0' + ELSE + '1' + END + WHERE id = #{id} + + \ No newline at end of file diff --git a/src/main/resources/mapper/SysPermissionMapper.xml b/src/main/resources/mapper/SysPermissionMapper.xml new file mode 100644 index 0000000..b61b65a --- /dev/null +++ b/src/main/resources/mapper/SysPermissionMapper.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/SysRoleMapper.xml b/src/main/resources/mapper/SysRoleMapper.xml new file mode 100644 index 0000000..146988d --- /dev/null +++ b/src/main/resources/mapper/SysRoleMapper.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + delete from tbl_sys_role_permission where roleId = #{roleId} + + + + + insert into tbl_sys_role_permission(roleId,perId) + values + + (#{roleId},#{item}) + + + + + + + + + UPDATE + tbl_sys_role + SET + isRegist = + CASE + WHEN + isRegist = '1' + THEN + '0' + ELSE + '1' + END + WHERE roleId = #{roleId} + + + + INSERT INTO tbl_sys_role + ( + roleId, + roleName, + isRegist, + remark, + createBy, + createDate + ) + VALUES + ( + NULL, + #{roleName}, + #{isRegist}, + #{remark}, + #{createBy}, + now() + ) + + + + update + tbl_sys_role + set + roleName = #{roleName,jdbcType=VARCHAR}, + remark = #{remark,jdbcType=VARCHAR}, + updateDate = now() + where + roleId = #{roleId,jdbcType=INTEGER} + + + + + delete from tbl_sys_role + where roleId = #{roleId,jdbcType=INTEGER} + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/SysUserMapper.xml b/src/main/resources/mapper/SysUserMapper.xml new file mode 100644 index 0000000..a8a6606 --- /dev/null +++ b/src/main/resources/mapper/SysUserMapper.xml @@ -0,0 +1,246 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + UPDATE + tbl_sys_user + SET + userStatus = + CASE + WHEN + userStatus = '1' + THEN + '0' + ELSE + '1' + END, + sysStatus = CASE WHEN sysStatus = '2' THEN '0' ElSE '2' END + WHERE userId = #{userId} + + + + + UPDATE + tbl_sys_user + SET + sysStatus = + CASE + WHEN + sysStatus = '2' + THEN + '1' + ELSE + '2' + END + WHERE userId = #{userId} + + + + + UPDATE + tbl_sys_user + SET + needIp = + CASE + WHEN needIp = '1' + THEN '0' + WHEN needIp = '0' + THEN '1' + ELSE '2' + END + + + + insert into tbl_sys_user + + + realname, + + + username, + + + password, + + + userStatus, + + + role, + + + sysStatus, + + + needIp, + + + createBy, + + + createDate, + + + updateBy, + + + updateDate, + + + + + #{realname,jdbcType=VARCHAR}, + + + #{username,jdbcType=VARCHAR}, + + + #{password,jdbcType=VARCHAR}, + + + #{userStatus,jdbcType=VARCHAR}, + + + #{role,jdbcType=VARCHAR}, + + + #{sysStatus,jdbcType=VARCHAR}, + + + #{needIp,jdbcType=VARCHAR}, + + + #{createBy,jdbcType=VARCHAR}, + + + #{createDate,jdbcType=TIMESTAMP}, + + + #{updateBy,jdbcType=VARCHAR}, + + + #{updateDate,jdbcType=TIMESTAMP}, + + + + + + update tbl_sys_user + + + realname = #{realname,jdbcType=VARCHAR}, + + + username = #{username,jdbcType=VARCHAR}, + + + password = #{password,jdbcType=VARCHAR}, + + + userStatus = #{userStatus,jdbcType=VARCHAR}, + + + role = #{role,jdbcType=VARCHAR}, + + + sysStatus = #{sysStatus,jdbcType=VARCHAR}, + + + needIp = #{needIp,jdbcType=VARCHAR}, + + + birthDay = #{birthDay,jdbcType=VARCHAR}, + + + birthType = #{birthType,jdbcType=VARCHAR}, + + + isBirthDay = #{isBirthDay,jdbcType=INTEGER}, + + + entryDate = #{entryDate,jdbcType=VARCHAR}, + + + createBy = #{createBy,jdbcType=VARCHAR}, + + + createDate = #{createDate,jdbcType=TIMESTAMP}, + + + updateBy = #{updateBy,jdbcType=VARCHAR}, + + + updateDate = #{updateDate,jdbcType=TIMESTAMP}, + + + where userId = #{userId,jdbcType=INTEGER} + + + + delete from tbl_sys_user + where userId = #{userId,jdbcType=INTEGER} + + + + + insert into tbl_sys_user_role(userId, roleId) + values + + (#{userId},#{item}) + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/UpdateLogMapper.xml b/src/main/resources/mapper/UpdateLogMapper.xml new file mode 100644 index 0000000..d666bde --- /dev/null +++ b/src/main/resources/mapper/UpdateLogMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + insert into tbl_update_log + (content,addTime,createBy,createDate) + values + (#{content},#{addTime},#{createBy},now()) + + + + update tbl_update_log + + + content = #{content,jdbcType=VARCHAR}, + + + where id = #{id,jdbcType=INTEGER} + + + + delete from tbl_update_log + where id = #{id,jdbcType=INTEGER} + + \ No newline at end of file diff --git a/src/main/resources/mybatis-config.xml b/src/main/resources/mybatis-config.xml new file mode 100644 index 0000000..c21c99e --- /dev/null +++ b/src/main/resources/mybatis-config.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/quote_price.sql b/src/main/resources/quote_price.sql new file mode 100644 index 0000000..0115544 --- /dev/null +++ b/src/main/resources/quote_price.sql @@ -0,0 +1,587 @@ +/* +SQLyog Ultimate v12.09 (64 bit) +MySQL - 5.7.20-log : Database - quote_price +********************************************************************* +*/ + +/*!40101 SET NAMES utf8 */; + +/*!40101 SET SQL_MODE=''*/; + +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; +CREATE DATABASE /*!32312 IF NOT EXISTS*/`quote_price` /*!40100 DEFAULT CHARACTER SET utf8 */; + +USE `quote_price`; + +/*Table structure for table `bug` */ + +DROP TABLE IF EXISTS `bug`; + +CREATE TABLE `bug` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', + `product` varchar(150) DEFAULT NULL COMMENT '产品', + `bugRemark` varchar(1665) DEFAULT NULL COMMENT '问题界面', + `createBy` varchar(60) DEFAULT NULL COMMENT '提交人', + `createDate` datetime DEFAULT NULL COMMENT '提交时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COMMENT='bug表'; + +/*Table structure for table `product` */ + +DROP TABLE IF EXISTS `product`; + +CREATE TABLE `product` ( + `pro_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `length` double DEFAULT NULL COMMENT '长度', + `width` double DEFAULT NULL COMMENT '宽度', + `count` double DEFAULT NULL COMMENT '数量', + `area` double DEFAULT NULL COMMENT '面积', + `price` double DEFAULT NULL COMMENT '价格', + `price_multiple` double DEFAULT NULL COMMENT '价格倍数', + `discount_price` double DEFAULT NULL COMMENT '折扣价', + `floor_price` double DEFAULT NULL COMMENT '跳楼价', + `weight` double DEFAULT NULL COMMENT '重量', + `kind_value` varchar(135) DEFAULT NULL COMMENT '产品种类1', + `kind_label` varchar(810) DEFAULT NULL COMMENT '种类1说明', + `kind1_value` varchar(100) DEFAULT NULL COMMENT '产品种类', + `kind1_label` varchar(100) DEFAULT NULL COMMENT '产品说明', + `kind2_value` varchar(135) DEFAULT NULL COMMENT '产品种类2', + `kind2_label` varchar(810) DEFAULT NULL COMMENT '种类2说明', + `pro_type_value` varchar(135) DEFAULT NULL COMMENT '产品分类', + `pro_type_label` varchar(1350) DEFAULT NULL COMMENT '产品分类说明', + `creator` bigint(20) DEFAULT NULL COMMENT '创建人', + `create_date` datetime DEFAULT NULL COMMENT '创建时间', + `updater` varchar(20) DEFAULT NULL COMMENT '更新人', + `update_date` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`pro_id`) +) ENGINE=InnoDB AUTO_INCREMENT=15349 DEFAULT CHARSET=utf8 COMMENT='价格表'; + +/*Table structure for table `product_img` */ + +DROP TABLE IF EXISTS `product_img`; + +CREATE TABLE `product_img` ( + `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT 'id', + `pro_type_value` varchar(810) DEFAULT NULL COMMENT '产品类型', + `pro_type_label` varchar(4050) DEFAULT NULL COMMENT '产品类型说明', + `kind_value` varchar(450) DEFAULT NULL COMMENT '产品种类1', + `kind_label` varchar(450) DEFAULT NULL COMMENT '产品种类1说明', + `kind2_value` varchar(450) DEFAULT NULL COMMENT '产品种类2', + `kind2_label` varchar(450) DEFAULT NULL COMMENT '产品种类2说明', + `remark` varchar(350) DEFAULT NULL COMMENT '备注', + `img_url` varchar(520) DEFAULT NULL COMMENT '图片地址', + `filename` varchar(150) DEFAULT NULL COMMENT '文件名称', + `creator` bigint(20) DEFAULT NULL, + `create_date` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `updater` bigint(20) DEFAULT NULL, + `update_date` datetime DEFAULT NULL, + `img_width` varchar(540) DEFAULT NULL COMMENT '图片宽度', + `img_height` varchar(540) DEFAULT NULL COMMENT '图片高度', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=147 DEFAULT CHARSET=utf8; + +/*Table structure for table `sys_dict_product` */ + +DROP TABLE IF EXISTS `sys_dict_product`; + +CREATE TABLE `sys_dict_product` ( + `pro_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', + `kind_value` varchar(2295) DEFAULT NULL COMMENT '产品种类1', + `kind_label` varchar(2295) DEFAULT NULL COMMENT '种类1说明', + `kind2_value` varchar(450) DEFAULT NULL COMMENT '产品种类2', + `kind2_label` varchar(450) DEFAULT NULL COMMENT '种类2说明', + `kind_price` double DEFAULT NULL, + `discount_price` double DEFAULT NULL, + `floor_price` double DEFAULT NULL, + `weight` double DEFAULT NULL, + `pro_type_value` varchar(2295) DEFAULT NULL COMMENT '产品分类', + `pro_type_label` varchar(2295) DEFAULT NULL COMMENT '分类说明', + `remark` varchar(2295) DEFAULT NULL, + `create_by` varchar(270) DEFAULT NULL, + `create_date` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `update_by` varchar(270) DEFAULT NULL, + `update_date` datetime DEFAULT NULL, + PRIMARY KEY (`pro_id`) +) ENGINE=InnoDB AUTO_INCREMENT=391 DEFAULT CHARSET=utf8; + +/*Table structure for table `sys_dict_search_pro` */ + +DROP TABLE IF EXISTS `sys_dict_search_pro`; + +CREATE TABLE `sys_dict_search_pro` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id', + `like_pro_type_label` varchar(100) DEFAULT NULL COMMENT '关键字搜索内容', + `pro_type_label` varchar(50) DEFAULT NULL COMMENT '产品分类', + `url` varchar(100) DEFAULT NULL COMMENT '地址', + `status` varchar(5) DEFAULT NULL COMMENT '开启状态 0:关闭 1:开启', + `createDate` datetime DEFAULT NULL, + `creator` varchar(50) DEFAULT NULL, + `updateDate` datetime DEFAULT NULL, + `updater` varchar(50) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=119 DEFAULT CHARSET=utf8 COMMENT='关键字搜索'; + +/*Table structure for table `t_customer_train_content` */ + +DROP TABLE IF EXISTS `t_customer_train_content`; + +CREATE TABLE `t_customer_train_content` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `pro_type` varchar(60) DEFAULT NULL, + `kind` varchar(60) DEFAULT NULL, + `sort` int(20) DEFAULT NULL, + `content` varchar(15000) DEFAULT NULL, + `create_by` varchar(60) DEFAULT NULL, + `create_date` datetime DEFAULT NULL, + `update_by` varchar(60) DEFAULT NULL, + `update_date` datetime DEFAULT NULL, + `type` varchar(20) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8; + +/*Table structure for table `t_customer_train_kind_label` */ + +DROP TABLE IF EXISTS `t_customer_train_kind_label`; + +CREATE TABLE `t_customer_train_kind_label` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `pro_type` varchar(300) DEFAULT NULL, + `kind_label` varchar(300) DEFAULT NULL, + `remark` varchar(765) DEFAULT NULL, + `sort` int(11) DEFAULT NULL, + `create_by` varchar(60) DEFAULT NULL, + `create_date` datetime DEFAULT NULL, + `update_by` varchar(60) DEFAULT NULL, + `update_date` datetime DEFAULT NULL, + `type` varchar(20) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `pro_type` (`pro_type`), + CONSTRAINT `t_customer_train_kind_label_ibfk_1` FOREIGN KEY (`pro_type`) REFERENCES `t_customer_train_pro_type` (`pro_type`) +) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8; + +/*Table structure for table `t_customer_train_pro_type` */ + +DROP TABLE IF EXISTS `t_customer_train_pro_type`; + +CREATE TABLE `t_customer_train_pro_type` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `pro_type` varchar(300) NOT NULL, + `remark` varchar(1500) DEFAULT NULL, + `sort` int(11) DEFAULT NULL, + `create_by` varchar(60) DEFAULT NULL, + `create_date` datetime DEFAULT NULL, + `update_by` varchar(60) DEFAULT NULL, + `update_date` datetime DEFAULT NULL, + `type` varchar(20) DEFAULT NULL, + PRIMARY KEY (`pro_type`), + KEY `id` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8; + +/*Table structure for table `tbl_article` */ + +DROP TABLE IF EXISTS `tbl_article`; + +CREATE TABLE `tbl_article` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `title` varchar(50) NOT NULL COMMENT '标题', + `content` varchar(5000) NOT NULL COMMENT '主题内容', + `type` varchar(5) DEFAULT NULL COMMENT '文章类型', + `status` varchar(5) DEFAULT NULL COMMENT '文章发表状态', + `imagesUrl` varchar(100) DEFAULT NULL COMMENT '图片地址', + `hit` int(11) DEFAULT NULL COMMENT '点击数', + `remark` varchar(50) DEFAULT NULL COMMENT '标识', + `createBy` varchar(50) DEFAULT NULL COMMENT '添加人', + `createDate` datetime DEFAULT NULL COMMENT '创建日期', + `updateBy` varchar(50) DEFAULT NULL COMMENT '更新人', + `updateDate` datetime DEFAULT NULL COMMENT '更新日期', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8; + +/*Table structure for table `tbl_customer_award` */ + +DROP TABLE IF EXISTS `tbl_customer_award`; + +CREATE TABLE `tbl_customer_award` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `nickname` varchar(150) DEFAULT NULL COMMENT '客服昵称', + `payPercent` double DEFAULT NULL COMMENT '付款百分比', + `askNumber` double DEFAULT NULL COMMENT '询单人数', + `customerPrice` double DEFAULT NULL COMMENT '客单价', + `award` int(11) DEFAULT NULL COMMENT '奖励金额', + `shopname` varchar(150) DEFAULT NULL COMMENT '店铺', + `creator` varchar(150) DEFAULT NULL COMMENT '导入人', + `createDate` datetime DEFAULT NULL COMMENT '导入时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8 COMMENT='客服奖励表'; + +/*Table structure for table `tbl_customer_data` */ + +DROP TABLE IF EXISTS `tbl_customer_data`; + +CREATE TABLE `tbl_customer_data` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `username` varchar(60) DEFAULT NULL COMMENT '用户名,用户删除数据', + `realname` varchar(60) DEFAULT NULL COMMENT '真实姓名', + `role` varchar(300) DEFAULT NULL COMMENT '所属角色', + `price` double DEFAULT NULL COMMENT '报价金额', + `productExplain` varchar(1500) DEFAULT NULL COMMENT '产品说明', + `wangwang` varchar(300) DEFAULT NULL COMMENT '客户旺旺', + `isBuy` varchar(3) DEFAULT NULL COMMENT '是否购买 0:否 1:是', + `commentSelf` varchar(3000) DEFAULT NULL, + `commentManager` varchar(3000) DEFAULT NULL COMMENT '说明', + `commentDate` datetime DEFAULT NULL COMMENT '店长评语日期', + `isDelete` varchar(3) DEFAULT NULL COMMENT '是否删除 0:否 1:是', + `completeDate` datetime DEFAULT NULL COMMENT '成交时间', + `createBy` varchar(60) DEFAULT NULL COMMENT '创建人', + `createDate` datetime DEFAULT NULL COMMENT '创建时间', + `updateBy` varchar(60) DEFAULT NULL COMMENT '更新人', + `updateDate` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=5068 DEFAULT CHARSET=utf8 COMMENT='客服操作数据记录'; + +/*Table structure for table `tbl_express_fee` */ + +DROP TABLE IF EXISTS `tbl_express_fee`; + +CREATE TABLE `tbl_express_fee` ( + `id` int(11) DEFAULT NULL, + `pro_type_value` varchar(60) DEFAULT NULL COMMENT '产品类型', + `pro_type_label` varchar(60) DEFAULT NULL COMMENT '产品类型说明', + `province` varchar(60) DEFAULT NULL COMMENT '省份', + `first_weight_price` double DEFAULT NULL COMMENT '首重价格', + `continued_weight_price` double DEFAULT NULL COMMENT '续重价格', + `start_price` double DEFAULT NULL COMMENT '起步价', + `createBy` varchar(60) DEFAULT NULL, + `createDate` datetime DEFAULT NULL, + `updateBy` varchar(60) DEFAULT NULL, + `updateDate` datetime DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='快递费'; + +/*Table structure for table `tbl_file` */ + +DROP TABLE IF EXISTS `tbl_file`; + +CREATE TABLE `tbl_file` ( + `fileId` int(11) NOT NULL AUTO_INCREMENT, + `fileName` varchar(50) DEFAULT NULL, + `filePath` varchar(255) DEFAULT NULL, + `remark` varchar(255) DEFAULT NULL, + `createBy` varchar(50) DEFAULT NULL, + `createDate` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, + `updateBy` varchar(50) DEFAULT NULL, + `updateDate` datetime DEFAULT NULL, + PRIMARY KEY (`fileId`) +) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8; + +/*Table structure for table `tbl_information` */ + +DROP TABLE IF EXISTS `tbl_information`; + +CREATE TABLE `tbl_information` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `content` varchar(1500) DEFAULT NULL COMMENT '知识点内容', + `type` varchar(30) DEFAULT NULL COMMENT '知识点类型', + `createBy` varchar(30) DEFAULT NULL COMMENT '创建者', + `createDate` datetime DEFAULT NULL COMMENT '创建时间', + `updateBy` varchar(30) DEFAULT NULL COMMENT '更新者', + `updateDate` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=77 DEFAULT CHARSET=utf8 COMMENT='产品知识点;客服须知'; + +/*Table structure for table `tbl_login_ip` */ + +DROP TABLE IF EXISTS `tbl_login_ip`; + +CREATE TABLE `tbl_login_ip` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `agreeIp` varchar(120) DEFAULT NULL COMMENT '允许登录的IP', + `remark` varchar(50) DEFAULT NULL COMMENT '说明', + `createBy` varchar(20) DEFAULT NULL COMMENT '创建人', + `createDate` datetime DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`), + UNIQUE KEY `ip` (`agreeIp`) +) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COMMENT='授权登录IP'; + +/*Table structure for table `tbl_login_log` */ + +DROP TABLE IF EXISTS `tbl_login_log`; + +CREATE TABLE `tbl_login_log` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `remark` varchar(200) DEFAULT NULL COMMENT '登录说明', + `status` varchar(4) DEFAULT NULL COMMENT '登录状态', + `loginTime` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '登录时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=55726 DEFAULT CHARSET=utf8 COMMENT='登录日志'; + +/*Table structure for table `tbl_product_price` */ + +DROP TABLE IF EXISTS `tbl_product_price`; + +CREATE TABLE `tbl_product_price` ( + `id` int(11) DEFAULT NULL, + `sticker_kind` varchar(30) DEFAULT NULL, + `craft_tang` varchar(30) DEFAULT NULL, + `aotu` varchar(30) DEFAULT NULL, + `pro_type_value` varchar(30) DEFAULT NULL, + `kind_value` varchar(30) DEFAULT NULL, + `kind2_value` varchar(30) DEFAULT NULL, + `price500` int(11) DEFAULT NULL, + `price1000` int(11) DEFAULT NULL, + `price2000` int(11) DEFAULT NULL, + `price3000` int(11) DEFAULT NULL, + `price4000` int(11) DEFAULT NULL, + `price5000` int(11) DEFAULT NULL, + `price10000` int(11) DEFAULT NULL, + `size_type` varchar(12) DEFAULT NULL, + `remark` varchar(150) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +/*Table structure for table `tbl_question` */ + +DROP TABLE IF EXISTS `tbl_question`; + +CREATE TABLE `tbl_question` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', + `question` varchar(1500) DEFAULT NULL COMMENT '问题', + `type` varchar(3) DEFAULT NULL COMMENT '问题类型', + `answer1` varchar(150) DEFAULT NULL COMMENT '选项A', + `answer2` varchar(150) DEFAULT NULL COMMENT '选项B', + `answer3` varchar(150) DEFAULT NULL COMMENT '选项C', + `answer4` varchar(150) DEFAULT NULL COMMENT '选项D', + `answer` varchar(150) DEFAULT NULL COMMENT '正确答案', + `ansCount` int(11) DEFAULT NULL COMMENT '填空题空数', + `createBy` varchar(150) DEFAULT NULL COMMENT '创建者', + `createDate` datetime DEFAULT NULL COMMENT '创建时间', + `updateBy` varchar(150) DEFAULT NULL COMMENT '更新者', + `updateDate` datetime DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=51 DEFAULT CHARSET=utf8 COMMENT='产品知识测试表'; + +/*Table structure for table `tbl_quote_data` */ + +DROP TABLE IF EXISTS `tbl_quote_data`; + +CREATE TABLE `tbl_quote_data` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `username` varchar(180) DEFAULT NULL COMMENT '用户名', + `realname` varchar(150) DEFAULT NULL COMMENT '姓名', + `role` varchar(600) DEFAULT NULL COMMENT '角色', + `shopname` varchar(60) DEFAULT NULL COMMENT '数据所属店铺', + `price` double DEFAULT NULL COMMENT '报价价格', + `buyPrice` double DEFAULT NULL COMMENT '实际成交金额', + `wangwang` varchar(300) DEFAULT NULL COMMENT '客户旺旺', + `isBuy` varchar(9) NOT NULL COMMENT '是否成交', + `buyDate` datetime DEFAULT NULL COMMENT '成交时间', + `isBuyToDay` varchar(3) NOT NULL COMMENT '是否当天购买', + `isBuyToDayDate` datetime DEFAULT NULL COMMENT '购买时间', + `remark` varchar(1800) DEFAULT NULL COMMENT '报价记录', + `remarkJudge` varchar(500) DEFAULT NULL COMMENT '报价记录对比', + `quoteTime` datetime NOT NULL COMMENT '报价时间', + `commentSelf` varchar(1500) DEFAULT NULL COMMENT '未成交说明', + `commentSelfDate` datetime DEFAULT NULL COMMENT '日期', + `commentManager` varchar(1500) DEFAULT NULL COMMENT '店长跟单', + `commentManagerDate` datetime DEFAULT NULL COMMENT '店长跟单日期', + `isSelect` varchar(3) DEFAULT NULL COMMENT '是否选择所属店铺', + `selectDate` datetime DEFAULT NULL COMMENT '选择时间', + `isFillIn` varchar(3) DEFAULT NULL COMMENT '是否填写旺旺号', + `fillInDate` datetime DEFAULT NULL COMMENT '填写旺旺时间', + `proTypeLabel` varchar(50) NOT NULL COMMENT '产品类型', + `orderNumber` varchar(25) DEFAULT NULL COMMENT '成交的订单号', + PRIMARY KEY (`id`,`proTypeLabel`), + KEY `index_where` (`shopname`,`quoteTime`,`wangwang`,`realname`,`isBuy`,`isBuyToDay`,`proTypeLabel`,`price`,`buyPrice`,`isFillIn`), + KEY `index_realname` (`realname`,`quoteTime`,`price`,`buyPrice`,`wangwang`,`isBuy`,`isBuyToDay`,`isFillIn`,`proTypeLabel`,`shopname`), + KEY `index_proTypeLabel` (`proTypeLabel`,`quoteTime`,`isFillIn`,`wangwang`,`price`,`isBuy`,`isBuyToDay`), + KEY `index_username` (`quoteTime`,`username`,`realname`), + KEY `index_quoteTime` (`quoteTime`) +) ENGINE=InnoDB AUTO_INCREMENT=320661 DEFAULT CHARSET=utf8; + +/*Table structure for table `tbl_quote_log` */ + +DROP TABLE IF EXISTS `tbl_quote_log`; + +CREATE TABLE `tbl_quote_log` ( + `quoteId` int(8) NOT NULL AUTO_INCREMENT, + `quoteTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '操作时间', + `quoteIp` varchar(120) DEFAULT NULL COMMENT '操作IP', + `os` varchar(60) DEFAULT NULL COMMENT '操作系统', + `realname` varchar(150) DEFAULT NULL COMMENT '姓名', + `username` varchar(150) DEFAULT NULL COMMENT '用户名', + `brower` varchar(150) DEFAULT NULL COMMENT '浏览器', + `remark` varchar(300) DEFAULT NULL COMMENT '备注:操作说明', + `shopname` varchar(200) DEFAULT NULL COMMENT '店铺', + `price` double DEFAULT NULL, + PRIMARY KEY (`quoteId`) +) ENGINE=InnoDB AUTO_INCREMENT=1970236 DEFAULT CHARSET=utf8 COMMENT='用户操作表'; + +/*Table structure for table `tbl_sys_finance` */ + +DROP TABLE IF EXISTS `tbl_sys_finance`; + +CREATE TABLE `tbl_sys_finance` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `add_time` date DEFAULT NULL COMMENT '添加时间', + `supplier` varchar(150) DEFAULT NULL COMMENT '供应商', + `shopname` varchar(150) DEFAULT NULL COMMENT '店铺', + `kind` varchar(150) DEFAULT NULL COMMENT '种类1', + `kind2` varchar(150) DEFAULT NULL COMMENT '种类2', + `order_number` varchar(300) DEFAULT NULL COMMENT '订单号', + `filename` varchar(1500) DEFAULT NULL COMMENT '文件名', + `count` varchar(30) DEFAULT NULL COMMENT '数量', + `number` varchar(30) DEFAULT NULL COMMENT '款数', + `zhang` varchar(30) DEFAULT NULL COMMENT '拼版张数', + `remark` varchar(1500) DEFAULT NULL COMMENT '备注', + `create_date` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '导入时间', + `creator` varchar(300) DEFAULT NULL COMMENT '导入人', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=11620 DEFAULT CHARSET=utf8; + +/*Table structure for table `tbl_sys_finance_difference` */ + +DROP TABLE IF EXISTS `tbl_sys_finance_difference`; + +CREATE TABLE `tbl_sys_finance_difference` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `order_number` varchar(1800) DEFAULT NULL COMMENT '订单号', + `shopname` varchar(450) DEFAULT NULL COMMENT '店铺', + `wangwang` varchar(450) DEFAULT NULL COMMENT '旺旺号', + `pay_time` datetime DEFAULT NULL COMMENT '付款时间', + `price` varchar(90) DEFAULT NULL COMMENT '金额', + `remark` varchar(4500) DEFAULT NULL COMMENT '备注', + `taobao_status` varchar(450) DEFAULT NULL COMMENT '状态', + `open_order_number` varchar(1800) DEFAULT NULL COMMENT '拆分订单号', + `filename` varchar(450) DEFAULT NULL COMMENT '文件名', + `creator` varchar(450) DEFAULT NULL COMMENT '导入人', + `create_date` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '导入时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=59552 DEFAULT CHARSET=utf8; + +/*Table structure for table `tbl_sys_finance_extract` */ + +DROP TABLE IF EXISTS `tbl_sys_finance_extract`; + +CREATE TABLE `tbl_sys_finance_extract` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `order_number` varchar(500) DEFAULT NULL COMMENT '订单号', + `remark` varchar(5000) DEFAULT NULL COMMENT '备注', + `length` varchar(30) DEFAULT NULL COMMENT '长', + `width` varchar(30) DEFAULT NULL COMMENT '宽', + `height` varchar(30) DEFAULT NULL COMMENT '高', + `count` varchar(30) DEFAULT NULL COMMENT '数量', + `filename` varchar(150) DEFAULT NULL COMMENT '文件名', + `creator` varchar(30) DEFAULT NULL COMMENT '导入人', + `create_date` datetime DEFAULT NULL COMMENT '导入时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=196143 DEFAULT CHARSET=utf8; + +/*Table structure for table `tbl_sys_permission` */ + +DROP TABLE IF EXISTS `tbl_sys_permission`; + +CREATE TABLE `tbl_sys_permission` ( + `perId` int(11) NOT NULL AUTO_INCREMENT, + `perName` varchar(50) DEFAULT NULL COMMENT '权限名称', + `type` varchar(100) DEFAULT NULL, + `perCode` varchar(100) DEFAULT NULL, + `url` varchar(100) DEFAULT NULL COMMENT '权限路劲', + `perIcon` varchar(100) DEFAULT NULL COMMENT '图标', + `parentId` int(11) DEFAULT NULL COMMENT '父ID', + `orderNo` varchar(10) DEFAULT NULL COMMENT '排序', + `thirdOrderName` varchar(20) DEFAULT NULL COMMENT '三级菜单名称', + `thirdParentId` int(11) DEFAULT NULL COMMENT '三级菜单父ID', + `createBy` varchar(50) DEFAULT NULL COMMENT '创建人', + `createDate` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', + PRIMARY KEY (`perId`) +) ENGINE=InnoDB AUTO_INCREMENT=86 DEFAULT CHARSET=utf8 COMMENT='权限表'; + +/*Table structure for table `tbl_sys_role` */ + +DROP TABLE IF EXISTS `tbl_sys_role`; + +CREATE TABLE `tbl_sys_role` ( + `roleId` int(11) NOT NULL AUTO_INCREMENT, + `roleName` varchar(50) DEFAULT NULL COMMENT '角色名称', + `remark` varchar(200) DEFAULT NULL COMMENT '角色说明', + `isRegist` varchar(1) DEFAULT NULL COMMENT '注册标识', + `createBy` varchar(50) DEFAULT NULL COMMENT '创建人', + `createDate` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', + `updateBy` varchar(50) DEFAULT NULL COMMENT '更新人', + `updateDate` datetime DEFAULT NULL COMMENT '更新时间', + `isSelf` varchar(3) DEFAULT NULL COMMENT '本公司店铺', + PRIMARY KEY (`roleId`) +) ENGINE=InnoDB AUTO_INCREMENT=1052 DEFAULT CHARSET=utf8; + +/*Table structure for table `tbl_sys_role_permission` */ + +DROP TABLE IF EXISTS `tbl_sys_role_permission`; + +CREATE TABLE `tbl_sys_role_permission` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `roleId` int(11) NOT NULL COMMENT '角色ID', + `perId` int(11) NOT NULL COMMENT '权限ID', + `createDate` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=16856 DEFAULT CHARSET=utf8; + +/*Table structure for table `tbl_sys_user` */ + +DROP TABLE IF EXISTS `tbl_sys_user`; + +CREATE TABLE `tbl_sys_user` ( + `userId` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', + `realname` varchar(50) DEFAULT NULL COMMENT '真实名字', + `username` varchar(50) DEFAULT NULL COMMENT '账号', + `password` varchar(50) DEFAULT NULL COMMENT '密码', + `userStatus` varchar(1) DEFAULT NULL COMMENT '状态', + `role` varchar(200) DEFAULT NULL COMMENT '角色', + `sysStatus` varchar(1) DEFAULT NULL COMMENT '系统状态。0:隐藏,1:显示', + `readLogStatus` varchar(1) DEFAULT NULL COMMENT '阅读更新日志状态 0:未读 1:已读', + `createBy` varchar(50) DEFAULT NULL COMMENT '创建人', + `createDate` datetime DEFAULT NULL COMMENT '创建时间', + `updateBy` varchar(50) DEFAULT NULL COMMENT '更新人', + `updateDate` datetime DEFAULT NULL COMMENT '更新时间', + `birthDay` varchar(20) DEFAULT NULL COMMENT '生日', + `birthType` varchar(1) DEFAULT NULL COMMENT '生日类型 0:农历 1:新历', + `isBirthDay` tinyint(1) DEFAULT NULL COMMENT '是否是生日', + `entryDate` varchar(20) DEFAULT NULL COMMENT '入职时间', + `needIp` varchar(1) DEFAULT NULL COMMENT '是否需要判断IP 0:否 1:是', + PRIMARY KEY (`userId`), + UNIQUE KEY `username` (`username`) +) ENGINE=InnoDB AUTO_INCREMENT=1349 DEFAULT CHARSET=utf8; + +/*Table structure for table `tbl_sys_user_role` */ + +DROP TABLE IF EXISTS `tbl_sys_user_role`; + +CREATE TABLE `tbl_sys_user_role` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户角色id', + `userId` int(11) NOT NULL, + `roleId` int(11) NOT NULL, + `createDate` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + KEY `userId` (`userId`), + KEY `roleId` (`roleId`), + CONSTRAINT `tbl_sys_user_role_ibfk_1` FOREIGN KEY (`userId`) REFERENCES `tbl_sys_user` (`userId`), + CONSTRAINT `tbl_sys_user_role_ibfk_2` FOREIGN KEY (`roleId`) REFERENCES `tbl_sys_role` (`roleId`) +) ENGINE=InnoDB AUTO_INCREMENT=2775 DEFAULT CHARSET=utf8 COMMENT='用户角色表'; + +/*Table structure for table `tbl_update_log` */ + +DROP TABLE IF EXISTS `tbl_update_log`; + +CREATE TABLE `tbl_update_log` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `content` varchar(15000) DEFAULT NULL, + `addTime` datetime DEFAULT NULL, + `createBy` varchar(150) DEFAULT NULL, + `createDate` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=65 DEFAULT CHARSET=utf8; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; diff --git a/src/main/webapp/META-INF/MANIFEST.MF b/src/main/webapp/META-INF/MANIFEST.MF new file mode 100644 index 0000000..254272e --- /dev/null +++ b/src/main/webapp/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + diff --git a/src/main/webapp/WEB-INF/c-1_0-rt.tld b/src/main/webapp/WEB-INF/c-1_0-rt.tld new file mode 100644 index 0000000..2203657 --- /dev/null +++ b/src/main/webapp/WEB-INF/c-1_0-rt.tld @@ -0,0 +1,393 @@ + + + + 1.0 + 1.2 + c_rt + http://java.sun.com/jstl/core_rt + JSTL core RT + JSTL 1.0 core library + + + + org.apache.taglibs.standard.tlv.JstlCoreTLV + + + Provides core validation features for JSTL tags. + + + + + catch + org.apache.taglibs.standard.tag.common.core.CatchTag + JSP + + Catches any Throwable that occurs in its body and optionally + exposes it. + + + var + false + false + + + + + choose + org.apache.taglibs.standard.tag.common.core.ChooseTag + JSP + + Simple conditional tag that establishes a context for + mutually exclusive conditional operations, marked by + <when> and <otherwise> + + + + + if + org.apache.taglibs.standard.tag.rt.core.IfTag + JSP + + Simple conditional tag, which evalutes its body if the + supplied condition is true and optionally exposes a Boolean + scripting variable representing the evaluation of this condition + + + test + true + true + boolean + + + var + false + false + + + scope + false + false + + + + + import + org.apache.taglibs.standard.tag.rt.core.ImportTag + org.apache.taglibs.standard.tei.ImportTEI + JSP + + Retrieves an absolute or relative URL and exposes its contents + to either the page, a String in 'var', or a Reader in 'varReader'. + + + url + true + true + + + var + false + false + + + scope + false + false + + + varReader + false + false + + + context + false + true + + + charEncoding + false + true + + + + + forEach + org.apache.taglibs.standard.tag.rt.core.ForEachTag + org.apache.taglibs.standard.tei.ForEachTEI + JSP + + The basic iteration tag, accepting many different + collection types and supporting subsetting and other + functionality + + + items + false + true + java.lang.Object + + + begin + false + true + int + + + end + false + true + int + + + step + false + true + int + + + var + false + false + + + varStatus + false + false + + + + + forTokens + org.apache.taglibs.standard.tag.rt.core.ForTokensTag + JSP + + Iterates over tokens, separated by the supplied delimeters + + + items + true + true + java.lang.String + + + delims + true + true + java.lang.String + + + begin + false + true + int + + + end + false + true + int + + + step + false + true + int + + + var + false + false + + + varStatus + false + false + + + + + out + org.apache.taglibs.standard.tag.rt.core.OutTag + JSP + + Like <%= ... >, but for expressions. + + + value + true + true + + + default + false + true + + + escapeXml + false + true + + + + + + otherwise + org.apache.taglibs.standard.tag.common.core.OtherwiseTag + JSP + + Subtag of <choose> that follows <when> tags + and runs only if all of the prior conditions evaluated to + 'false' + + + + + param + org.apache.taglibs.standard.tag.rt.core.ParamTag + JSP + + Adds a parameter to a containing 'import' tag's URL. + + + name + true + true + + + value + false + true + + + + + redirect + org.apache.taglibs.standard.tag.rt.core.RedirectTag + JSP + + Redirects to a new URL. + + + var + false + false + + + scope + false + false + + + url + false + true + + + context + false + true + + + + + remove + org.apache.taglibs.standard.tag.common.core.RemoveTag + empty + + Removes a scoped variable (from a particular scope, if specified). + + + var + true + false + + + scope + false + false + + + + + set + org.apache.taglibs.standard.tag.rt.core.SetTag + JSP + + Sets the result of an expression evaluation in a 'scope' + + + var + false + false + + + value + false + true + + + target + false + true + + + property + false + true + + + scope + false + false + + + + + url + org.apache.taglibs.standard.tag.rt.core.UrlTag + JSP + + Creates a URL with optional query parameters. + + + var + false + false + + + scope + false + false + + + value + false + true + + + context + false + true + + + + + when + org.apache.taglibs.standard.tag.rt.core.WhenTag + JSP + + Subtag of <choose> that includes its body if its + condition evalutes to 'true' + + + test + true + true + boolean + + + + diff --git a/src/main/webapp/WEB-INF/c-1_0.tld b/src/main/webapp/WEB-INF/c-1_0.tld new file mode 100644 index 0000000..ce80e8d --- /dev/null +++ b/src/main/webapp/WEB-INF/c-1_0.tld @@ -0,0 +1,416 @@ + + + + 1.0 + 1.2 + c + http://java.sun.com/jstl/core + JSTL core + JSTL 1.0 core library + + + + org.apache.taglibs.standard.tlv.JstlCoreTLV + + + expressionAttributes + + out:value + out:default + out:escapeXml + if:test + import:url + import:context + import:charEncoding + forEach:items + forEach:begin + forEach:end + forEach:step + forTokens:items + forTokens:begin + forTokens:end + forTokens:step + param:encode + param:name + param:value + redirect:context + redirect:url + set:property + set:target + set:value + url:context + url:value + when:test + + + Whitespace-separated list of colon-separated token pairs + describing tag:attribute combinations that accept expressions. + The validator uses this information to determine which + attributes need their syntax validated. + + + + + + catch + org.apache.taglibs.standard.tag.common.core.CatchTag + JSP + + Catches any Throwable that occurs in its body and optionally + exposes it. + + + var + false + false + + + + + choose + org.apache.taglibs.standard.tag.common.core.ChooseTag + JSP + + Simple conditional tag that establishes a context for + mutually exclusive conditional operations, marked by + <when> and <otherwise> + + + + + out + org.apache.taglibs.standard.tag.el.core.OutTag + JSP + + Like <%= ... >, but for expressions. + + + value + true + false + + + default + false + false + + + escapeXml + false + false + + + + + if + org.apache.taglibs.standard.tag.el.core.IfTag + JSP + + Simple conditional tag, which evalutes its body if the + supplied condition is true and optionally exposes a Boolean + scripting variable representing the evaluation of this condition + + + test + true + false + + + var + false + false + + + scope + false + false + + + + + import + org.apache.taglibs.standard.tag.el.core.ImportTag + org.apache.taglibs.standard.tei.ImportTEI + JSP + + Retrieves an absolute or relative URL and exposes its contents + to either the page, a String in 'var', or a Reader in 'varReader'. + + + url + true + false + + + var + false + false + + + scope + false + false + + + varReader + false + false + + + context + false + false + + + charEncoding + false + false + + + + + forEach + org.apache.taglibs.standard.tag.el.core.ForEachTag + org.apache.taglibs.standard.tei.ForEachTEI + JSP + + The basic iteration tag, accepting many different + collection types and supporting subsetting and other + functionality + + + items + false + false + + + begin + false + false + + + end + false + false + + + step + false + false + + + var + false + false + + + varStatus + false + false + + + + + forTokens + org.apache.taglibs.standard.tag.el.core.ForTokensTag + JSP + + Iterates over tokens, separated by the supplied delimeters + + + items + true + false + + + delims + true + false + + + begin + false + false + + + end + false + false + + + step + false + false + + + var + false + false + + + varStatus + false + false + + + + + otherwise + org.apache.taglibs.standard.tag.common.core.OtherwiseTag + JSP + + Subtag of <choose> that follows <when> tags + and runs only if all of the prior conditions evaluated to + 'false' + + + + + param + org.apache.taglibs.standard.tag.el.core.ParamTag + JSP + + Adds a parameter to a containing 'import' tag's URL. + + + name + true + false + + + value + false + false + + + + + redirect + org.apache.taglibs.standard.tag.el.core.RedirectTag + JSP + + Redirects to a new URL. + + + var + false + false + + + scope + false + false + + + url + true + false + + + context + false + false + + + + + remove + org.apache.taglibs.standard.tag.common.core.RemoveTag + empty + + Removes a scoped variable (from a particular scope, if specified). + + + var + true + false + + + scope + false + false + + + + + set + org.apache.taglibs.standard.tag.el.core.SetTag + JSP + + Sets the result of an expression evaluation in a 'scope' + + + var + false + false + + + value + false + false + + + target + false + false + + + property + false + false + + + scope + false + false + + + + + url + org.apache.taglibs.standard.tag.el.core.UrlTag + JSP + + Prints or exposes a URL with optional query parameters + (via the c:param tag). + + + var + false + false + + + scope + false + false + + + value + true + false + + + context + false + false + + + + + when + org.apache.taglibs.standard.tag.el.core.WhenTag + JSP + + Subtag of <choose> that includes its body if its + condition evalutes to 'true' + + + test + true + false + + + + diff --git a/src/main/webapp/WEB-INF/c.tld b/src/main/webapp/WEB-INF/c.tld new file mode 100644 index 0000000..22698c9 --- /dev/null +++ b/src/main/webapp/WEB-INF/c.tld @@ -0,0 +1,563 @@ + + + + + JSTL 1.1 core library + JSTL core + 1.1 + c + http://java.sun.com/jsp/jstl/core + + + + Provides core validation features for JSTL tags. + + + org.apache.taglibs.standard.tlv.JstlCoreTLV + + + + + + Catches any Throwable that occurs in its body and optionally + exposes it. + + catch + org.apache.taglibs.standard.tag.common.core.CatchTag + JSP + + +Name of the exported scoped variable for the +exception thrown from a nested action. The type of the +scoped variable is the type of the exception thrown. + + var + false + false + + + + + + Simple conditional tag that establishes a context for + mutually exclusive conditional operations, marked by + <when> and <otherwise> + + choose + org.apache.taglibs.standard.tag.common.core.ChooseTag + JSP + + + + + Simple conditional tag, which evalutes its body if the + supplied condition is true and optionally exposes a Boolean + scripting variable representing the evaluation of this condition + + if + org.apache.taglibs.standard.tag.rt.core.IfTag + JSP + + +The test condition that determines whether or +not the body content should be processed. + + test + true + true + boolean + + + +Name of the exported scoped variable for the +resulting value of the test condition. The type +of the scoped variable is Boolean. + + var + false + false + + + +Scope for var. + + scope + false + false + + + + + + Retrieves an absolute or relative URL and exposes its contents + to either the page, a String in 'var', or a Reader in 'varReader'. + + import + org.apache.taglibs.standard.tag.rt.core.ImportTag + org.apache.taglibs.standard.tei.ImportTEI + JSP + + +The URL of the resource to import. + + url + true + true + + + +Name of the exported scoped variable for the +resource's content. The type of the scoped +variable is String. + + var + false + false + + + +Scope for var. + + scope + false + false + + + +Name of the exported scoped variable for the +resource's content. The type of the scoped +variable is Reader. + + varReader + false + false + + + +Name of the context when accessing a relative +URL resource that belongs to a foreign +context. + + context + false + true + + + +Character encoding of the content at the input +resource. + + charEncoding + false + true + + + + + + The basic iteration tag, accepting many different + collection types and supporting subsetting and other + functionality + + forEach + org.apache.taglibs.standard.tag.rt.core.ForEachTag + org.apache.taglibs.standard.tei.ForEachTEI + JSP + + +Collection of items to iterate over. + + items + false + true + java.lang.Object + + + +If items specified: +Iteration begins at the item located at the +specified index. First item of the collection has +index 0. +If items not specified: +Iteration begins with index set at the value +specified. + + begin + false + true + int + + + +If items specified: +Iteration ends at the item located at the +specified index (inclusive). +If items not specified: +Iteration ends when index reaches the value +specified. + + end + false + true + int + + + +Iteration will only process every step items of +the collection, starting with the first one. + + step + false + true + int + + + +Name of the exported scoped variable for the +current item of the iteration. This scoped +variable has nested visibility. Its type depends +on the object of the underlying collection. + + var + false + false + + + +Name of the exported scoped variable for the +status of the iteration. Object exported is of type +javax.servlet.jsp.jstl.core.LoopTagStatus. This scoped variable has nested +visibility. + + varStatus + false + false + + + + + + Iterates over tokens, separated by the supplied delimeters + + forTokens + org.apache.taglibs.standard.tag.rt.core.ForTokensTag + JSP + + +String of tokens to iterate over. + + items + true + true + java.lang.String + + + +The set of delimiters (the characters that +separate the tokens in the string). + + delims + true + true + java.lang.String + + + +Iteration begins at the token located at the +specified index. First token has index 0. + + begin + false + true + int + + + +Iteration ends at the token located at the +specified index (inclusive). + + end + false + true + int + + + +Iteration will only process every step tokens +of the string, starting with the first one. + + step + false + true + int + + + +Name of the exported scoped variable for the +current item of the iteration. This scoped +variable has nested visibility. + + var + false + false + + + +Name of the exported scoped variable for the +status of the iteration. Object exported is of +type +javax.servlet.jsp.jstl.core.LoopTag +Status. This scoped variable has nested +visibility. + + varStatus + false + false + + + + + + Like <%= ... >, but for expressions. + + out + org.apache.taglibs.standard.tag.rt.core.OutTag + JSP + + +Expression to be evaluated. + + value + true + true + + + +Default value if the resulting value is null. + + default + false + true + + + +Determines whether characters <,>,&,'," in the +resulting string should be converted to their +corresponding character entity codes. Default value is +true. + + escapeXml + false + true + + + + + + + Subtag of <choose> that follows <when> tags + and runs only if all of the prior conditions evaluated to + 'false' + + otherwise + org.apache.taglibs.standard.tag.common.core.OtherwiseTag + JSP + + + + + Adds a parameter to a containing 'import' tag's URL. + + param + org.apache.taglibs.standard.tag.rt.core.ParamTag + JSP + + +Name of the query string parameter. + + name + true + true + + + +Value of the parameter. + + value + false + true + + + + + + Redirects to a new URL. + + redirect + org.apache.taglibs.standard.tag.rt.core.RedirectTag + JSP + + +The URL of the resource to redirect to. + + url + false + true + + + +Name of the context when redirecting to a relative URL +resource that belongs to a foreign context. + + context + false + true + + + + + + Removes a scoped variable (from a particular scope, if specified). + + remove + org.apache.taglibs.standard.tag.common.core.RemoveTag + empty + + +Name of the scoped variable to be removed. + + var + true + false + + + +Scope for var. + + scope + false + false + + + + + + Sets the result of an expression evaluation in a 'scope' + + set + org.apache.taglibs.standard.tag.rt.core.SetTag + JSP + + +Name of the exported scoped variable to hold the value +specified in the action. The type of the scoped variable is +whatever type the value expression evaluates to. + + var + false + false + + + +Expression to be evaluated. + + value + false + true + + + +Target object whose property will be set. Must evaluate to +a JavaBeans object with setter property property, or to a +java.util.Map object. + + target + false + true + + + +Name of the property to be set in the target object. + + property + false + true + + + +Scope for var. + + scope + false + false + + + + + + Creates a URL with optional query parameters. + + url + org.apache.taglibs.standard.tag.rt.core.UrlTag + JSP + + +Name of the exported scoped variable for the +processed url. The type of the scoped variable is +String. + + var + false + false + + + +Scope for var. + + scope + false + false + + + +URL to be processed. + + value + false + true + + + +Name of the context when specifying a relative URL +resource that belongs to a foreign context. + + context + false + true + + + + + + Subtag of <choose> that includes its body if its + condition evalutes to 'true' + + when + org.apache.taglibs.standard.tag.rt.core.WhenTag + JSP + + +The test condition that determines whether or not the +body content should be processed. + + test + true + true + boolean + + + + diff --git a/src/main/webapp/WEB-INF/dispatcherServlet-servlet.xml b/src/main/webapp/WEB-INF/dispatcherServlet-servlet.xml new file mode 100644 index 0000000..a554979 --- /dev/null +++ b/src/main/webapp/WEB-INF/dispatcherServlet-servlet.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/fmt-1_0-rt.tld b/src/main/webapp/WEB-INF/fmt-1_0-rt.tld new file mode 100644 index 0000000..45d1545 --- /dev/null +++ b/src/main/webapp/WEB-INF/fmt-1_0-rt.tld @@ -0,0 +1,403 @@ + + + + 1.0 + 1.2 + fmt_rt + http://java.sun.com/jstl/fmt_rt + JSTL fmt RT + JSTL 1.0 i18n-capable formatting library + + + + org.apache.taglibs.standard.tlv.JstlFmtTLV + + + Provides core validation features for JSTL tags. + + + + + requestEncoding + org.apache.taglibs.standard.tag.rt.fmt.RequestEncodingTag + empty + + Sets the request character encoding + + + value + false + true + + + + + setLocale + org.apache.taglibs.standard.tag.rt.fmt.SetLocaleTag + empty + + Stores the given locale in the locale configuration variable + + + value + true + true + + + variant + false + true + + + scope + false + false + + + + + timeZone + org.apache.taglibs.standard.tag.rt.fmt.TimeZoneTag + JSP + + Specifies the time zone for any time formatting or parsing actions + nested in its body + + + value + true + true + + + + + setTimeZone + org.apache.taglibs.standard.tag.rt.fmt.SetTimeZoneTag + empty + + Stores the given time zone in the time zone configuration variable + + + value + true + true + + + var + false + false + + + scope + false + false + + + + + bundle + org.apache.taglibs.standard.tag.rt.fmt.BundleTag + JSP + + Loads a resource bundle to be used by its tag body + + + basename + true + true + + + prefix + false + true + + + + + setBundle + org.apache.taglibs.standard.tag.rt.fmt.SetBundleTag + empty + + Loads a resource bundle and stores it in the named scoped variable or + the bundle configuration variable + + + basename + true + true + + + var + false + false + + + scope + false + false + + + + + message + org.apache.taglibs.standard.tag.rt.fmt.MessageTag + JSP + + Maps key to localized message and performs parametric replacement + + + key + false + true + + + bundle + false + true + + + var + false + false + + + scope + false + false + + + + + param + org.apache.taglibs.standard.tag.rt.fmt.ParamTag + JSP + + Supplies an argument for parametric replacement to a containing + <message> tag + + + value + false + true + + + + + formatNumber + org.apache.taglibs.standard.tag.rt.fmt.FormatNumberTag + JSP + + Formats a numeric value as a number, currency, or percentage + + + value + false + true + + + type + false + true + + + pattern + false + true + + + currencyCode + false + true + + + currencySymbol + false + true + + + groupingUsed + false + true + + + maxIntegerDigits + false + true + + + minIntegerDigits + false + true + + + maxFractionDigits + false + true + + + minFractionDigits + false + true + + + var + false + false + + + scope + false + false + + + + + parseNumber + org.apache.taglibs.standard.tag.rt.fmt.ParseNumberTag + JSP + + Parses the string representation of a number, currency, or percentage + + + value + false + true + + + type + false + true + + + pattern + false + true + + + parseLocale + false + true + + + integerOnly + false + true + + + var + false + false + + + scope + false + false + + + + + formatDate + org.apache.taglibs.standard.tag.rt.fmt.FormatDateTag + empty + + Formats a date and/or time using the supplied styles and pattern + + + value + true + true + + + type + false + true + + + dateStyle + false + true + + + timeStyle + false + true + + + pattern + false + true + + + timeZone + false + true + + + var + false + false + + + scope + false + false + + + + + parseDate + org.apache.taglibs.standard.tag.rt.fmt.ParseDateTag + JSP + + Parses the string representation of a date and/or time + + + value + false + true + + + type + false + true + + + dateStyle + false + true + + + timeStyle + false + true + + + pattern + false + true + + + timeZone + false + true + + + parseLocale + false + true + + + var + false + false + + + scope + false + false + + + + diff --git a/src/main/webapp/WEB-INF/fmt-1_0.tld b/src/main/webapp/WEB-INF/fmt-1_0.tld new file mode 100644 index 0000000..20523ee --- /dev/null +++ b/src/main/webapp/WEB-INF/fmt-1_0.tld @@ -0,0 +1,442 @@ + + + + 1.0 + 1.2 + fmt + http://java.sun.com/jstl/fmt + JSTL fmt + JSTL 1.0 i18n-capable formatting library + + + + org.apache.taglibs.standard.tlv.JstlFmtTLV + + + expressionAttributes + + requestEncoding:value + setLocale:value + setLocale:variant + timeZone:value + setTimeZone:value + bundle:basename + bundle:prefix + setBundle:basename + message:key + message:bundle + param:value + formatNumber:value + formatNumber:pattern + formatNumber:currencyCode + formatNumber:currencySymbol + formatNumber:groupingUsed + formatNumber:maxIntegerDigits + formatNumber:minIntegerDigits + formatNumber:maxFractionDigits + formatNumber:minFractionDigits + parseNumber:value + parseNumber:pattern + parseNumber:parseLocale + parseNumber:integerOnly + formatDate:value + formatDate:pattern + formatDate:timeZone + parseDate:value + parseDate:pattern + parseDate:timeZone + parseDate:parseLocale + + + Whitespace-separated list of colon-separated token pairs + describing tag:attribute combinations that accept expressions. + The validator uses this information to determine which + attributes need their syntax validated. + + + + + + requestEncoding + org.apache.taglibs.standard.tag.el.fmt.RequestEncodingTag + empty + + Sets the request character encoding + + + value + false + false + + + + + setLocale + org.apache.taglibs.standard.tag.el.fmt.SetLocaleTag + empty + + Stores the given locale in the locale configuration variable + + + value + true + false + + + variant + false + false + + + scope + false + false + + + + + timeZone + org.apache.taglibs.standard.tag.el.fmt.TimeZoneTag + JSP + + Specifies the time zone for any time formatting or parsing actions + nested in its body + + + value + true + false + + + + + setTimeZone + org.apache.taglibs.standard.tag.el.fmt.SetTimeZoneTag + empty + + Stores the given time zone in the time zone configuration variable + + + value + true + false + + + var + false + false + + + scope + false + false + + + + + bundle + org.apache.taglibs.standard.tag.el.fmt.BundleTag + JSP + + Loads a resource bundle to be used by its tag body + + + basename + true + false + + + prefix + false + false + + + + + setBundle + org.apache.taglibs.standard.tag.el.fmt.SetBundleTag + empty + + Loads a resource bundle and stores it in the named scoped variable or + the bundle configuration variable + + + basename + true + false + + + var + false + false + + + scope + false + false + + + + + message + org.apache.taglibs.standard.tag.el.fmt.MessageTag + JSP + + Maps key to localized message and performs parametric replacement + + + key + false + false + + + bundle + false + false + + + var + false + false + + + scope + false + false + + + + + param + org.apache.taglibs.standard.tag.el.fmt.ParamTag + JSP + + Supplies an argument for parametric replacement to a containing + <message> tag + + + value + false + false + + + + + formatNumber + org.apache.taglibs.standard.tag.el.fmt.FormatNumberTag + JSP + + Formats a numeric value as a number, currency, or percentage + + + value + false + false + + + type + false + false + + + pattern + false + false + + + currencyCode + false + false + + + currencySymbol + false + false + + + groupingUsed + false + false + + + maxIntegerDigits + false + false + + + minIntegerDigits + false + false + + + maxFractionDigits + false + false + + + minFractionDigits + false + false + + + var + false + false + + + scope + false + false + + + + + parseNumber + org.apache.taglibs.standard.tag.el.fmt.ParseNumberTag + JSP + + Parses the string representation of a number, currency, or percentage + + + value + false + false + + + type + false + false + + + pattern + false + false + + + parseLocale + false + false + + + integerOnly + false + false + + + var + false + false + + + scope + false + false + + + + + formatDate + org.apache.taglibs.standard.tag.el.fmt.FormatDateTag + empty + + Formats a date and/or time using the supplied styles and pattern + + + value + true + false + + + type + false + false + + + dateStyle + false + false + + + timeStyle + false + false + + + pattern + false + false + + + timeZone + false + false + + + var + false + false + + + scope + false + false + + + + + parseDate + org.apache.taglibs.standard.tag.el.fmt.ParseDateTag + JSP + + Parses the string representation of a date and/or time + + + value + false + false + + + type + false + false + + + dateStyle + false + false + + + timeStyle + false + false + + + pattern + false + false + + + timeZone + false + false + + + parseLocale + false + false + + + var + false + false + + + scope + false + false + + + + diff --git a/src/main/webapp/WEB-INF/fmt.tld b/src/main/webapp/WEB-INF/fmt.tld new file mode 100644 index 0000000..3b9a54a --- /dev/null +++ b/src/main/webapp/WEB-INF/fmt.tld @@ -0,0 +1,671 @@ + + + + + JSTL 1.1 i18n-capable formatting library + JSTL fmt + 1.1 + fmt + http://java.sun.com/jsp/jstl/fmt + + + + Provides core validation features for JSTL tags. + + + org.apache.taglibs.standard.tlv.JstlFmtTLV + + + + + + Sets the request character encoding + + requestEncoding + org.apache.taglibs.standard.tag.rt.fmt.RequestEncodingTag + empty + + +Name of character encoding to be applied when +decoding request parameters. + + value + false + true + + + + + + Stores the given locale in the locale configuration variable + + setLocale + org.apache.taglibs.standard.tag.rt.fmt.SetLocaleTag + empty + + +A String value is interpreted as the +printable representation of a locale, which +must contain a two-letter (lower-case) +language code (as defined by ISO-639), +and may contain a two-letter (upper-case) +country code (as defined by ISO-3166). +Language and country codes must be +separated by hyphen (-) or underscore +(_). + + value + true + true + + + +Vendor- or browser-specific variant. +See the java.util.Locale javadocs for +more information on variants. + + variant + false + true + + + +Scope of the locale configuration variable. + + scope + false + false + + + + + + Specifies the time zone for any time formatting or parsing actions + nested in its body + + timeZone + org.apache.taglibs.standard.tag.rt.fmt.TimeZoneTag + JSP + + +The time zone. A String value is interpreted as +a time zone ID. This may be one of the time zone +IDs supported by the Java platform (such as +"America/Los_Angeles") or a custom time zone +ID (such as "GMT-8"). See +java.util.TimeZone for more information on +supported time zone formats. + + value + true + true + + + + + + Stores the given time zone in the time zone configuration variable + + setTimeZone + org.apache.taglibs.standard.tag.rt.fmt.SetTimeZoneTag + empty + + +The time zone. A String value is interpreted as +a time zone ID. This may be one of the time zone +IDs supported by the Java platform (such as +"America/Los_Angeles") or a custom time zone +ID (such as "GMT-8"). See java.util.TimeZone for +more information on supported time zone +formats. + + value + true + true + + + +Name of the exported scoped variable which +stores the time zone of type +java.util.TimeZone. + + var + false + false + + + +Scope of var or the time zone configuration +variable. + + scope + false + false + + + + + + Loads a resource bundle to be used by its tag body + + bundle + org.apache.taglibs.standard.tag.rt.fmt.BundleTag + JSP + + +Resource bundle base name. This is the bundle's +fully-qualified resource name, which has the same +form as a fully-qualified class name, that is, it uses +"." as the package component separator and does not +have any file type (such as ".class" or ".properties") +suffix. + + basename + true + true + + + +Prefix to be prepended to the value of the message +key of any nested <fmt:message> action. + + prefix + false + true + + + + + + Loads a resource bundle and stores it in the named scoped variable or + the bundle configuration variable + + setBundle + org.apache.taglibs.standard.tag.rt.fmt.SetBundleTag + empty + + +Resource bundle base name. This is the bundle's +fully-qualified resource name, which has the same +form as a fully-qualified class name, that is, it uses +"." as the package component separator and does not +have any file type (such as ".class" or ".properties") +suffix. + + basename + true + true + + + +Name of the exported scoped variable which stores +the i18n localization context of type +javax.servlet.jsp.jstl.fmt.LocalizationC +ontext. + + var + false + false + + + +Scope of var or the localization context +configuration variable. + + scope + false + false + + + + + + Maps key to localized message and performs parametric replacement + + message + org.apache.taglibs.standard.tag.rt.fmt.MessageTag + JSP + + +Message key to be looked up. + + key + false + true + + + +Localization context in whose resource +bundle the message key is looked up. + + bundle + false + true + + + +Name of the exported scoped variable +which stores the localized message. + + var + false + false + + + +Scope of var. + + scope + false + false + + + + + + Supplies an argument for parametric replacement to a containing + <message> tag + + param + org.apache.taglibs.standard.tag.rt.fmt.ParamTag + JSP + + +Argument used for parametric replacement. + + value + false + true + + + + + + Formats a numeric value as a number, currency, or percentage + + formatNumber + org.apache.taglibs.standard.tag.rt.fmt.FormatNumberTag + JSP + + +Numeric value to be formatted. + + value + false + true + + + +Specifies whether the value is to be +formatted as number, currency, or +percentage. + + type + false + true + + + +Custom formatting pattern. + + pattern + false + true + + + +ISO 4217 currency code. Applied only +when formatting currencies (i.e. if type is +equal to "currency"); ignored otherwise. + + currencyCode + false + true + + + +Currency symbol. Applied only when +formatting currencies (i.e. if type is equal +to "currency"); ignored otherwise. + + currencySymbol + false + true + + + +Specifies whether the formatted output +will contain any grouping separators. + + groupingUsed + false + true + + + +Maximum number of digits in the integer +portion of the formatted output. + + maxIntegerDigits + false + true + + + +Minimum number of digits in the integer +portion of the formatted output. + + minIntegerDigits + false + true + + + +Maximum number of digits in the +fractional portion of the formatted output. + + maxFractionDigits + false + true + + + +Minimum number of digits in the +fractional portion of the formatted output. + + minFractionDigits + false + true + + + +Name of the exported scoped variable +which stores the formatted result as a +String. + + var + false + false + + + +Scope of var. + + scope + false + false + + + + + + Parses the string representation of a number, currency, or percentage + + parseNumber + org.apache.taglibs.standard.tag.rt.fmt.ParseNumberTag + JSP + + +String to be parsed. + + value + false + true + + + +Specifies whether the string in the value +attribute should be parsed as a number, +currency, or percentage. + + type + false + true + + + +Custom formatting pattern that determines +how the string in the value attribute is to be +parsed. + + pattern + false + true + + + +Locale whose default formatting pattern (for +numbers, currencies, or percentages, +respectively) is to be used during the parse +operation, or to which the pattern specified +via the pattern attribute (if present) is +applied. + + parseLocale + false + true + + + +Specifies whether just the integer portion of +the given value should be parsed. + + integerOnly + false + true + + + +Name of the exported scoped variable which +stores the parsed result (of type +java.lang.Number). + + var + false + false + + + +Scope of var. + + scope + false + false + + + + + + Formats a date and/or time using the supplied styles and pattern + + formatDate + org.apache.taglibs.standard.tag.rt.fmt.FormatDateTag + empty + + +Date and/or time to be formatted. + + value + true + true + + + +Specifies whether the time, the date, or both +the time and date components of the given +date are to be formatted. + + type + false + true + + + +Predefined formatting style for dates. Follows +the semantics defined in class +java.text.DateFormat. Applied only +when formatting a date or both a date and +time (i.e. if type is missing or is equal to +"date" or "both"); ignored otherwise. + + dateStyle + false + true + + + +Predefined formatting style for times. Follows +the semantics defined in class +java.text.DateFormat. Applied only +when formatting a time or both a date and +time (i.e. if type is equal to "time" or "both"); +ignored otherwise. + + timeStyle + false + true + + + +Custom formatting style for dates and times. + + pattern + false + true + + + +Time zone in which to represent the formatted +time. + + timeZone + false + true + + + +Name of the exported scoped variable which +stores the formatted result as a String. + + var + false + false + + + +Scope of var. + + scope + false + false + + + + + + Parses the string representation of a date and/or time + + parseDate + org.apache.taglibs.standard.tag.rt.fmt.ParseDateTag + JSP + + +Date string to be parsed. + + value + false + true + + + +Specifies whether the date string in the +value attribute is supposed to contain a +time, a date, or both. + + type + false + true + + + +Predefined formatting style for days +which determines how the date +component of the date string is to be +parsed. Applied only when formatting a +date or both a date and time (i.e. if type +is missing or is equal to "date" or "both"); +ignored otherwise. + + dateStyle + false + true + + + +Predefined formatting styles for times +which determines how the time +component in the date string is to be +parsed. Applied only when formatting a +time or both a date and time (i.e. if type +is equal to "time" or "both"); ignored +otherwise. + + timeStyle + false + true + + + +Custom formatting pattern which +determines how the date string is to be +parsed. + + pattern + false + true + + + +Time zone in which to interpret any time +information in the date string. + + timeZone + false + true + + + +Locale whose predefined formatting styles +for dates and times are to be used during +the parse operation, or to which the +pattern specified via the pattern +attribute (if present) is applied. + + parseLocale + false + true + + + +Name of the exported scoped variable in +which the parsing result (of type +java.util.Date) is stored. + + var + false + false + + + +Scope of var. + + scope + false + false + + + + diff --git a/src/main/webapp/WEB-INF/fn.tld b/src/main/webapp/WEB-INF/fn.tld new file mode 100644 index 0000000..12d4ca8 --- /dev/null +++ b/src/main/webapp/WEB-INF/fn.tld @@ -0,0 +1,207 @@ + + + + + JSTL 1.1 functions library + JSTL functions + 1.1 + fn + http://java.sun.com/jsp/jstl/functions + + + + Tests if an input string contains the specified substring. + + contains + org.apache.taglibs.standard.functions.Functions + boolean contains(java.lang.String, java.lang.String) + + <c:if test="${fn:contains(name, searchString)}"> + + + + + + Tests if an input string contains the specified substring in a case insensitive way. + + containsIgnoreCase + org.apache.taglibs.standard.functions.Functions + boolean containsIgnoreCase(java.lang.String, java.lang.String) + + <c:if test="${fn:containsIgnoreCase(name, searchString)}"> + + + + + + Tests if an input string ends with the specified suffix. + + endsWith + org.apache.taglibs.standard.functions.Functions + boolean endsWith(java.lang.String, java.lang.String) + + <c:if test="${fn:endsWith(filename, ".txt")}"> + + + + + + Escapes characters that could be interpreted as XML markup. + + escapeXml + org.apache.taglibs.standard.functions.Functions + java.lang.String escapeXml(java.lang.String) + + ${fn:escapeXml(param:info)} + + + + + + Returns the index withing a string of the first occurrence of a specified substring. + + indexOf + org.apache.taglibs.standard.functions.Functions + int indexOf(java.lang.String, java.lang.String) + + ${fn:indexOf(name, "-")} + + + + + + Joins all elements of an array into a string. + + join + org.apache.taglibs.standard.functions.Functions + java.lang.String join(java.lang.String[], java.lang.String) + + ${fn:join(array, ";")} + + + + + + Returns the number of items in a collection, or the number of characters in a string. + + length + org.apache.taglibs.standard.functions.Functions + int length(java.lang.Object) + + You have ${fn:length(shoppingCart.products)} in your shopping cart. + + + + + + Returns a string resulting from replacing in an input string all occurrences + of a "before" string into an "after" substring. + + replace + org.apache.taglibs.standard.functions.Functions + java.lang.String replace(java.lang.String, java.lang.String, java.lang.String) + + ${fn:replace(text, "-", "•")} + + + + + + Splits a string into an array of substrings. + + split + org.apache.taglibs.standard.functions.Functions + java.lang.String[] split(java.lang.String, java.lang.String) + + ${fn:split(customerNames, ";")} + + + + + + Tests if an input string starts with the specified prefix. + + startsWith + org.apache.taglibs.standard.functions.Functions + boolean startsWith(java.lang.String, java.lang.String) + + <c:if test="${fn:startsWith(product.id, "100-")}"> + + + + + + Returns a subset of a string. + + substring + org.apache.taglibs.standard.functions.Functions + java.lang.String substring(java.lang.String, int, int) + + P.O. Box: ${fn:substring(zip, 6, -1)} + + + + + + Returns a subset of a string following a specific substring. + + substringAfter + org.apache.taglibs.standard.functions.Functions + java.lang.String substringAfter(java.lang.String, java.lang.String) + + P.O. Box: ${fn:substringAfter(zip, "-")} + + + + + + Returns a subset of a string before a specific substring. + + substringBefore + org.apache.taglibs.standard.functions.Functions + java.lang.String substringBefore(java.lang.String, java.lang.String) + + Zip (without P.O. Box): ${fn:substringBefore(zip, "-")} + + + + + + Converts all of the characters of a string to lower case. + + toLowerCase + org.apache.taglibs.standard.functions.Functions + java.lang.String toLowerCase(java.lang.String) + + Product name: ${fn.toLowerCase(product.name)} + + + + + + Converts all of the characters of a string to upper case. + + toUpperCase + org.apache.taglibs.standard.functions.Functions + java.lang.String toUpperCase(java.lang.String) + + Product name: ${fn.UpperCase(product.name)} + + + + + + Removes white spaces from both ends of a string. + + trim + org.apache.taglibs.standard.functions.Functions + java.lang.String trim(java.lang.String) + + Name: ${fn.trim(name)} + + + + diff --git a/src/main/webapp/WEB-INF/permittedTaglibs.tld b/src/main/webapp/WEB-INF/permittedTaglibs.tld new file mode 100644 index 0000000..8c0c404 --- /dev/null +++ b/src/main/webapp/WEB-INF/permittedTaglibs.tld @@ -0,0 +1,34 @@ + + + + + Restricts JSP pages to the JSTL tag libraries + + permittedTaglibs + 1.1 + permittedTaglibs + http://jakarta.apache.org/taglibs/standard/permittedTaglibs + + + + javax.servlet.jsp.jstl.tlv.PermittedTaglibsTLV + + + + Whitespace-separated list of taglib URIs to permit. This example + TLD for the Standard Taglib allows only JSTL 'el' taglibs to be + imported. + + permittedTaglibs + + http://java.sun.com/jsp/jstl/core + http://java.sun.com/jsp/jstl/fmt + http://java.sun.com/jsp/jstl/sql + http://java.sun.com/jsp/jstl/xml + + + + diff --git a/src/main/webapp/WEB-INF/scriptfree.tld b/src/main/webapp/WEB-INF/scriptfree.tld new file mode 100644 index 0000000..62ceb43 --- /dev/null +++ b/src/main/webapp/WEB-INF/scriptfree.tld @@ -0,0 +1,51 @@ + + + + + Validates JSP pages to prohibit use of scripting elements. + + 1.1 + scriptfree + http://jakarta.apache.org/taglibs/standard/scriptfree + + + + Validates prohibitions against scripting elements. + + + javax.servlet.jsp.jstl.tlv.ScriptFreeTLV + + + + Controls whether or not declarations are considered valid. + + allowDeclarations + false + + + + Controls whether or not scriptlets are considered valid. + + allowScriptlets + false + + + + Controls whether or not top-level expressions are considered valid. + + allowExpressions + false + + + + Controls whether or not expressions used to supply request-time + attribute values are considered valid. + + allowRTExpressions + false + + + diff --git a/src/main/webapp/WEB-INF/sql-1_0-rt.tld b/src/main/webapp/WEB-INF/sql-1_0-rt.tld new file mode 100644 index 0000000..c2fe525 --- /dev/null +++ b/src/main/webapp/WEB-INF/sql-1_0-rt.tld @@ -0,0 +1,188 @@ + + + + 1.0 + 1.2 + sql_rt + http://java.sun.com/jstl/sql_rt + JSTL sql RT + JSTL 1.0 sql library + + + + org.apache.taglibs.standard.tlv.JstlSqlTLV + + + Provides core validation features for JSTL tags. + + + + + transaction + org.apache.taglibs.standard.tag.rt.sql.TransactionTag + JSP + + Provides nested database action elements with a shared Connection, + set up to execute all statements as one transaction. + + + dataSource + false + true + + + isolation + false + true + + + + + query + org.apache.taglibs.standard.tag.rt.sql.QueryTag + JSP + + Executes the SQL query defined in its body or through the + sql attribute. + + + var + true + false + + + scope + false + false + + + sql + false + true + + + dataSource + false + true + + + startRow + false + true + + + maxRows + false + true + + + + + update + org.apache.taglibs.standard.tag.rt.sql.UpdateTag + JSP + + Executes the SQL update defined in its body or through the + sql attribute. + + + var + false + false + + + scope + false + false + + + sql + false + true + + + dataSource + false + true + + + + + param + org.apache.taglibs.standard.tag.rt.sql.ParamTag + JSP + + Sets a parameter in an SQL statement to the specified value. + + + value + false + true + + + + + dateParam + org.apache.taglibs.standard.tag.rt.sql.DateParamTag + empty + + Sets a parameter in an SQL statement to the specified java.util.Date value. + + + value + true + true + + + type + false + true + + + + + setDataSource + org.apache.taglibs.standard.tag.rt.sql.SetDataSourceTag + empty + + Creates a simple DataSource suitable only for prototyping. + + + var + false + false + + + scope + false + false + + + dataSource + false + true + + + driver + false + true + + + url + false + true + + + user + false + true + + + password + false + true + + + diff --git a/src/main/webapp/WEB-INF/sql-1_0.tld b/src/main/webapp/WEB-INF/sql-1_0.tld new file mode 100644 index 0000000..2f8a328 --- /dev/null +++ b/src/main/webapp/WEB-INF/sql-1_0.tld @@ -0,0 +1,213 @@ + + + + 1.0 + 1.2 + sql + http://java.sun.com/jstl/sql + JSTL sql + JSTL 1.0 sql library + + + + org.apache.taglibs.standard.tlv.JstlSqlTLV + + + expressionAttributes + + transaction:dataSource + transaction:isolation + query:sql + query:dataSource + query:startRow + query:maxRows + update:sql + update:dataSource + param:value + dateParam:value + dateParam:type + setDataSource:dataSource + setDataSource:driver + setDataSource:url + setDataSource:user + setDataSource:password + + + Whitespace-separated list of colon-separated token pairs + describing tag:attribute combinations that accept expressions. + The validator uses this information to determine which + attributes need their syntax validated. + + + + + + transaction + org.apache.taglibs.standard.tag.el.sql.TransactionTag + JSP + + Provides nested database action elements with a shared Connection, + set up to execute all statements as one transaction. + + + dataSource + false + false + + + isolation + false + false + + + + + query + org.apache.taglibs.standard.tag.el.sql.QueryTag + JSP + + Executes the SQL query defined in its body or through the + sql attribute. + + + var + true + false + + + scope + false + false + + + sql + false + false + + + dataSource + false + false + + + startRow + false + false + + + maxRows + false + false + + + + + update + org.apache.taglibs.standard.tag.el.sql.UpdateTag + JSP + + Executes the SQL update defined in its body or through the + sql attribute. + + + var + false + false + + + scope + false + false + + + sql + false + false + + + dataSource + false + false + + + + + param + org.apache.taglibs.standard.tag.el.sql.ParamTag + JSP + + Sets a parameter in an SQL statement to the specified value. + + + value + false + false + + + + + dateParam + org.apache.taglibs.standard.tag.el.sql.DateParamTag + empty + + Sets a parameter in an SQL statement to the specified java.util.Date val +ue. + + + value + true + true + + + type + false + true + + + + + setDataSource + org.apache.taglibs.standard.tag.el.sql.SetDataSourceTag + empty + + Creates a simple DataSource suitable only for prototyping. + + + var + false + false + + + scope + false + false + + + dataSource + false + false + + + driver + false + false + + + url + false + false + + + user + false + false + + + password + false + false + + + diff --git a/src/main/webapp/WEB-INF/sql.tld b/src/main/webapp/WEB-INF/sql.tld new file mode 100644 index 0000000..e53445b --- /dev/null +++ b/src/main/webapp/WEB-INF/sql.tld @@ -0,0 +1,289 @@ + + + + + JSTL 1.1 sql library + JSTL sql + 1.1 + sql + http://java.sun.com/jsp/jstl/sql + + + + Provides core validation features for JSTL tags. + + + org.apache.taglibs.standard.tlv.JstlSqlTLV + + + + + + Provides nested database action elements with a shared Connection, + set up to execute all statements as one transaction. + + transaction + org.apache.taglibs.standard.tag.rt.sql.TransactionTag + JSP + + +DataSource associated with the database to access. A +String value represents a relative path to a JNDI +resource or the parameters for the JDBC +DriverManager facility. + + dataSource + false + true + + + +Transaction isolation level. If not specified, it is the +isolation level the DataSource has been configured +with. + + isolation + false + true + + + + + + Executes the SQL query defined in its body or through the + sql attribute. + + query + org.apache.taglibs.standard.tag.rt.sql.QueryTag + JSP + + +Name of the exported scoped variable for the +query result. The type of the scoped variable is +javax.servlet.jsp.jstl.sql. +Result (see Chapter 16 "Java APIs"). + + var + true + false + + + +Scope of var. + + scope + false + false + + + +SQL query statement. + + sql + false + true + + + +Data source associated with the database to +query. A String value represents a relative path +to a JNDI resource or the parameters for the +DriverManager class. + + dataSource + false + true + + + +The returned Result object includes the rows +starting at the specified index. The first row of +the original query result set is at index 0. If not +specified, rows are included starting from the +first row at index 0. + + startRow + false + true + + + +The maximum number of rows to be included in +the query result. If not specified, or set to -1, no +limit on the maximum number of rows is +enforced. + + maxRows + false + true + + + + + + Executes the SQL update defined in its body or through the + sql attribute. + + update + org.apache.taglibs.standard.tag.rt.sql.UpdateTag + JSP + + +Name of the exported scoped variable for the result +of the database update. The type of the scoped +variable is java.lang.Integer. + + var + false + false + + + +Scope of var. + + scope + false + false + + + +SQL update statement. + + sql + false + true + + + +Data source associated with the database to update. +A String value represents a relative path to a JNDI +resource or the parameters for the JDBC +DriverManager class. + + dataSource + false + true + + + + + + Sets a parameter in an SQL statement to the specified value. + + param + org.apache.taglibs.standard.tag.rt.sql.ParamTag + JSP + + +Parameter value. + + value + false + true + + + + + + Sets a parameter in an SQL statement to the specified java.util.Date value. + + dateParam + org.apache.taglibs.standard.tag.rt.sql.DateParamTag + empty + + +Parameter value for DATE, TIME, or +TIMESTAMP column in a database table. + + value + true + true + + + +One of "date", "time" or "timestamp". + + type + false + true + + + + + + Creates a simple DataSource suitable only for prototyping. + + setDataSource + org.apache.taglibs.standard.tag.rt.sql.SetDataSourceTag + empty + + +Name of the exported scoped variable +for the data source specified. Type can +be String or DataSource. + + var + false + false + + + +If var is specified, scope of the +exported variable. Otherwise, scope of +the data source configuration variable. + + scope + false + false + + + +Data source. If specified as a string, it +can either be a relative path to a JNDI +resource, or a JDBC parameters string +as defined in Section 10.1.1. + + dataSource + false + true + + + +JDBC parameter: driver class name. + + driver + false + true + + + +JDBC parameter: URL associated with +the database. + + url + false + true + + + +JDBC parameter: database user on +whose behalf the connection to the +database is being made. + + user + false + true + + + +JDBC parameter: user password + + password + false + true + + + diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..4d2c437 --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,99 @@ + + + + login.jsp + + + + webAppRootKey + quote_price + + + + + contextConfigLocation + classpath:applicationContext.xml + + + + + org.springframework.web.context.ContextLoaderListener + + + + + + + + + dispatcherServlet + org.springframework.web.servlet.DispatcherServlet + + 1 + + + + + dispatcherServlet + / + + + + + CharacterEncodingFilter + org.springframework.web.filter.CharacterEncodingFilter + + encoding + utf-8 + + + forceRequestEncoding + true + + + forceResponseEncoding + true + + + + + CharacterEncodingFilter + /* + + + + + log4jConfigLocation + classpath:log4j.properties + + + + org.springframework.web.util.Log4jConfigListener + + + + shiroFilter + org.springframework.web.filter.DelegatingFilterProxy + + + + targetFilterLifecycle + true + + + + shiroFilter + /* + + + + 600 + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/x-1_0-rt.tld b/src/main/webapp/WEB-INF/x-1_0-rt.tld new file mode 100644 index 0000000..e7062b7 --- /dev/null +++ b/src/main/webapp/WEB-INF/x-1_0-rt.tld @@ -0,0 +1,256 @@ + + + + 1.0 + 1.2 + x_rt + http://java.sun.com/jstl/xml_rt + JSTL XML RT + JSTL 1.0 XML library + + + + org.apache.taglibs.standard.tlv.JstlXmlTLV + + + Provides validation features for JSTL XML tags. + + + + + choose + org.apache.taglibs.standard.tag.common.core.ChooseTag + JSP + + Simple conditional tag that establishes a context for + mutually exclusive conditional operations, marked by + <when> and <otherwise> + + + + + out + org.apache.taglibs.standard.tag.rt.xml.ExprTag + empty + + Like <%= ... >, but for XPath expressions. + + + select + true + false + + + escapeXml + false + true + + + + + if + org.apache.taglibs.standard.tag.common.xml.IfTag + JSP + + XML conditional tag, which evalutes its body if the + supplied XPath expression evalutes to 'true' as a boolean + + + select + true + false + + + var + false + false + + + scope + false + false + + + + + forEach + org.apache.taglibs.standard.tag.common.xml.ForEachTag + JSP + + XML iteration tag. + + + var + false + false + + + select + true + false + + + + + otherwise + org.apache.taglibs.standard.tag.common.core.OtherwiseTag + JSP + + Subtag of <choose> that follows <when> tags + and runs only if all of the prior conditions evaluated to + 'false' + + + + + param + org.apache.taglibs.standard.tag.rt.xml.ParamTag + JSP + + Adds a parameter to a containing 'transform' tag's Transformer + + + name + true + true + + + value + false + true + + + + + parse + org.apache.taglibs.standard.tag.rt.xml.ParseTag + org.apache.taglibs.standard.tei.XmlParseTEI + JSP + + Parses XML content from 'source' attribute or 'body' + + + var + false + false + + + varDom + false + false + + + scope + false + false + + + scopeDom + false + false + + + xml + false + true + + + systemId + false + true + + + filter + false + true + + + + + set + org.apache.taglibs.standard.tag.common.xml.SetTag + empty + + Saves the result of an XPath expression evaluation in a 'scope' + + + var + true + false + + + select + false + false + + + scope + false + false + + + + + transform + org.apache.taglibs.standard.tag.rt.xml.TransformTag + org.apache.taglibs.standard.tei.XmlTransformTEI + JSP + + Conducts a transformation given a source XML document + and an XSLT stylesheet + + + var + false + false + + + scope + false + false + + + result + false + true + + + xml + false + true + + + xmlSystemId + false + true + + + xslt + false + true + + + xsltSystemId + false + true + + + + + when + org.apache.taglibs.standard.tag.common.xml.WhenTag + JSP + + Subtag of <choose> that includes its body if its + expression evalutes to 'true' + + + select + true + false + + + + diff --git a/src/main/webapp/WEB-INF/x-1_0.tld b/src/main/webapp/WEB-INF/x-1_0.tld new file mode 100644 index 0000000..2237ccb --- /dev/null +++ b/src/main/webapp/WEB-INF/x-1_0.tld @@ -0,0 +1,273 @@ + + + + 1.0 + 1.2 + x + http://java.sun.com/jstl/xml + JSTL XML + JSTL 1.0 XML library + + + + org.apache.taglibs.standard.tlv.JstlXmlTLV + + + expressionAttributes + + out:escapeXml + parse:xml + parse:systemId + parse:filter + transform:xml + transform:xmlSystemId + transform:xslt + transform:xsltSystemId + transform:result + + + Whitespace-separated list of colon-separated token pairs + describing tag:attribute combinations that accept expressions. + The validator uses this information to determine which + attributes need their syntax validated. + + + + + + choose + org.apache.taglibs.standard.tag.common.core.ChooseTag + JSP + + Simple conditional tag that establishes a context for + mutually exclusive conditional operations, marked by + <when> and <otherwise> + + + + + out + org.apache.taglibs.standard.tag.el.xml.ExprTag + empty + + Like <%= ... >, but for XPath expressions. + + + select + true + false + + + escapeXml + false + false + + + + + if + org.apache.taglibs.standard.tag.common.xml.IfTag + JSP + + XML conditional tag, which evalutes its body if the + supplied XPath expression evalutes to 'true' as a boolean + + + select + true + false + + + var + false + false + + + scope + false + false + + + + + forEach + org.apache.taglibs.standard.tag.common.xml.ForEachTag + JSP + + XML iteration tag. + + + var + false + false + + + select + true + false + + + + + otherwise + org.apache.taglibs.standard.tag.common.core.OtherwiseTag + JSP + + Subtag of <choose> that follows <when> tags + and runs only if all of the prior conditions evaluated to + 'false' + + + + + param + org.apache.taglibs.standard.tag.el.xml.ParamTag + JSP + + Adds a parameter to a containing 'transform' tag's Transformer + + + name + true + false + + + value + false + false + + + + + parse + org.apache.taglibs.standard.tag.el.xml.ParseTag + org.apache.taglibs.standard.tei.XmlParseTEI + JSP + + Parses XML content from 'source' attribute or 'body' + + + var + false + false + + + varDom + false + false + + + scope + false + false + + + scopeDom + false + false + + + xml + false + false + + + systemId + false + false + + + filter + false + false + + + + + set + org.apache.taglibs.standard.tag.common.xml.SetTag + empty + + Saves the result of an XPath expression evaluation in a 'scope' + + + var + true + false + + + select + false + false + + + scope + false + false + + + + + transform + org.apache.taglibs.standard.tag.el.xml.TransformTag + org.apache.taglibs.standard.tei.XmlTransformTEI + JSP + + Conducts a transformation given a source XML document + and an XSLT stylesheet + + + var + false + false + + + scope + false + false + + + result + false + false + + + xml + false + false + + + xmlSystemId + false + false + + + xslt + false + false + + + xsltSystemId + false + false + + + + + when + org.apache.taglibs.standard.tag.common.xml.WhenTag + JSP + + Subtag of <choose> that includes its body if its + expression evalutes to 'true' + + + select + true + false + + + + diff --git a/src/main/webapp/WEB-INF/x.tld b/src/main/webapp/WEB-INF/x.tld new file mode 100644 index 0000000..e52ffe8 --- /dev/null +++ b/src/main/webapp/WEB-INF/x.tld @@ -0,0 +1,448 @@ + + + + + JSTL 1.1 XML library + JSTL XML + 1.1 + x + http://java.sun.com/jsp/jstl/xml + + + + Provides validation features for JSTL XML tags. + + + org.apache.taglibs.standard.tlv.JstlXmlTLV + + + + + + Simple conditional tag that establishes a context for + mutually exclusive conditional operations, marked by + <when> and <otherwise> + + choose + org.apache.taglibs.standard.tag.common.core.ChooseTag + JSP + + + + + Like <%= ... >, but for XPath expressions. + + out + org.apache.taglibs.standard.tag.rt.xml.ExprTag + empty + + +XPath expression to be evaluated. + + select + true + false + + + +Determines whether characters <,>,&,'," in the +resulting string should be converted to their +corresponding character entity codes. Default +value is true. + + escapeXml + false + true + + + + + + XML conditional tag, which evalutes its body if the + supplied XPath expression evalutes to 'true' as a boolean + + if + org.apache.taglibs.standard.tag.common.xml.IfTag + JSP + + +The test condition that tells whether or not the +body content should be processed. + + select + true + false + + + +Name of the exported scoped variable for the +resulting value of the test condition. The type +of the scoped variable is Boolean. + + var + false + false + + + +Scope for var. + + scope + false + false + + + + + + XML iteration tag. + + forEach + org.apache.taglibs.standard.tag.common.xml.ForEachTag + JSP + + +Name of the exported scoped variable for the +current item of the iteration. This scoped variable +has nested visibility. Its type depends on the +result of the XPath expression in the select +attribute. + + var + false + false + + + +XPath expression to be evaluated. + + select + true + false + + + +Iteration begins at the item located at the +specified index. First item of the collection has +index 0. + + begin + false + true + int + + + +Iteration ends at the item located at the specified +index (inclusive). + + end + false + true + int + + + +Iteration will only process every step items of +the collection, starting with the first one. + + step + false + true + int + + + +Name of the exported scoped variable for the +status of the iteration. Object exported is of type +javax.servlet.jsp.jstl.core.LoopTagStatus. This scoped variable has nested visibility. + + varStatus + false + false + + + + + + Subtag of <choose> that follows <when> tags + and runs only if all of the prior conditions evaluated to + 'false' + + otherwise + org.apache.taglibs.standard.tag.common.core.OtherwiseTag + JSP + + + + + Adds a parameter to a containing 'transform' tag's Transformer + + param + org.apache.taglibs.standard.tag.rt.xml.ParamTag + JSP + + +Name of the transformation parameter. + + name + true + true + + + +Value of the parameter. + + value + false + true + + + + + + Parses XML content from 'source' attribute or 'body' + + parse + org.apache.taglibs.standard.tag.rt.xml.ParseTag + org.apache.taglibs.standard.tei.XmlParseTEI + JSP + + +Name of the exported scoped variable for +the parsed XML document. The type of the +scoped variable is implementation +dependent. + + var + false + false + + + +Name of the exported scoped variable for +the parsed XML document. The type of the +scoped variable is +org.w3c.dom.Document. + + varDom + false + false + + + +Scope for var. + + scope + false + false + + + +Scope for varDom. + + scopeDom + false + false + + + +Deprecated. Use attribute 'doc' instead. + + xml + false + true + + + +Source XML document to be parsed. + + doc + false + true + + + +The system identifier (URI) for parsing the +XML document. + + systemId + false + true + + + +Filter to be applied to the source +document. + + filter + false + true + + + + + + Saves the result of an XPath expression evaluation in a 'scope' + + set + org.apache.taglibs.standard.tag.common.xml.SetTag + empty + + +Name of the exported scoped variable to hold +the value specified in the action. The type of the +scoped variable is whatever type the select +expression evaluates to. + + var + true + false + + + +XPath expression to be evaluated. + + select + false + false + + + +Scope for var. + + scope + false + false + + + + + + Conducts a transformation given a source XML document + and an XSLT stylesheet + + transform + org.apache.taglibs.standard.tag.rt.xml.TransformTag + org.apache.taglibs.standard.tei.XmlTransformTEI + JSP + + +Name of the exported +scoped variable for the +transformed XML +document. The type of the +scoped variable is +org.w3c.dom.Document. + + var + false + false + + + +Scope for var. + + scope + false + false + + + +Result +Object that captures or +processes the transformation +result. + + result + false + true + + + +Deprecated. Use attribute +'doc' instead. + + xml + false + true + + + +Source XML document to be +transformed. (If exported by +<x:set>, it must correspond +to a well-formed XML +document, not a partial +document.) + + doc + false + true + + + +Deprecated. Use attribute +'docSystemId' instead. + + xmlSystemId + false + true + + + +The system identifier (URI) +for parsing the XML +document. + + docSystemId + false + true + + + +javax.xml.transform.Source +Transformation stylesheet as +a String, Reader, or +Source object. + + xslt + false + true + + + +The system identifier (URI) +for parsing the XSLT +stylesheet. + + xsltSystemId + false + true + + + + + + Subtag of <choose> that includes its body if its + expression evalutes to 'true' + + when + org.apache.taglibs.standard.tag.common.xml.WhenTag + JSP + + +The test condition that tells whether or +not the body content should be +processed + + select + true + false + + + + diff --git a/src/main/webapp/favicon.ico b/src/main/webapp/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..9d4d0860ea0ef526da979436bb7185f371ed6b31 GIT binary patch literal 15406 zcmeI2y=xRf7{=#_AOz8fh^SFcIb#S(?sBm(Z z1WCI152UhCLB&Qvqd`F%3nhLOe*K;MI*uNpLe>s!MtW;f?_+qixp&09{eRA&%8;@TnF_%DwxFPIxE|*J3 zjaN=$4-mIYT%yF|J8t<~8#Z2Ak#`(_tKT*DTf@Zb9LX;Ts3!t*$(*HR`)RGpREN)y${LZM_J@@NXn3pG zROZzUt0IQ{xBQE@A~Ga zUmAbzM}cBMJ;oosU)3`9D(0WZUuo$!r+`zyDX<(B&_t3YS~CjVIte1U%_-m%a0)mD zoB~b(r$Frrq`JDgR_T4bo=}@mO4Uv)T%_{w{(PEu{;7IGZF+qON2EqCX)fO6o5kL) z2fVhX>>5jr)Ix<>{^IQmNU2WiK&&@z4+7umx50H|sZ`<*jK$5aRw|4fpvAFh)l@YJ`57huN2JM4Gxjr+WiWd3kG2A+f2GQ6T+ zkHA68T~_x5i0%0gzxn5nc-Z^b8;f^v4Ru&hpJ9B~Z;lo7v?TH`*SFff<6ljo#rmN6 zo4tOpe;vOTTdCYjfd1#RDOIuKH2j{Nb(tH@>J3;4ORt=Wn(gpGoG@>uk^B z<`0h+`fv(fnwx3<8909~FV}x53F2=wpV!=zegwX|_{-_%?{Bzq=uiHpe1B~A_jj(@ frd~g>_nfm%0jGddz$xGqa0)mDoB~dP|51TovOn0V literal 0 HcmV?d00001 diff --git a/src/main/webapp/file/领淘报价系统操作手册.docx b/src/main/webapp/file/领淘报价系统操作手册.docx new file mode 100644 index 0000000000000000000000000000000000000000..9c0cb79f54a7fd3b6b05476cfe03e0ca547a691f GIT binary patch literal 1795953 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 N=g)d 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