commit aea5d30edb015102b1829aac6f4d7f4ab9b71e0d Author: wangpengfei <1928057482@qq.com> Date: Mon Jan 20 14:22:51 2025 +0800 初始化 diff --git a/external/pom.xml b/external/pom.xml new file mode 100644 index 0000000..9ff5a6e --- /dev/null +++ b/external/pom.xml @@ -0,0 +1,177 @@ + + + + externalInterface + com.yxt + 1.0-SNAPSHOT + + 4.0.0 + + com.yxt.external + external + + + 8 + 8 + UTF-8 + + + + com.alibaba + easyexcel + 3.3.2 + + + com.yxt + yxt-common-base + 0.0.1 + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + + mysql + mysql-connector-java + runtime + + + com.baomidou + mybatis-plus-boot-starter + + + com.baomidou + mybatis-plus-annotation + + + org.projectlombok + lombok + 1.18.24 + true + + + + com.yxt + yxt-common-base + 0.0.1 + + + + org.springframework.boot + spring-boot-starter-web + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + + + mysql + mysql-connector-java + runtime + + + + com.baomidou + mybatis-plus-boot-starter + + + com.baomidou + mybatis-plus-annotation + + + junit + junit + compile + + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + + + cn.dev33 + sa-token-spring-boot-starter + 1.37.0 + + + cn.hutool + hutool-all + 5.8.23 + + + cn.hutool + hutool-core + 5.8.23 + + + com.google.zxing + core + 3.5.2 + + + io.springfox + springfox-swagger2 + 2.9.2 + + + io.springfox + springfox-swagger-ui + 2.8.0 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + 2.5.6 + + + + repackage + + + + + + + + src/main/java + + **/*Mapper.xml + + + + src/main/resources + + **/*.* + + false + + + + \ No newline at end of file diff --git a/external/src/main/java/com/yxt/external/apiadmin/AdminHomeRest.java b/external/src/main/java/com/yxt/external/apiadmin/AdminHomeRest.java new file mode 100644 index 0000000..e01d20b --- /dev/null +++ b/external/src/main/java/com/yxt/external/apiadmin/AdminHomeRest.java @@ -0,0 +1,10 @@ +package com.yxt.external.apiadmin; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController("com.yxt.wms.apiadmin.AdminHomeRest") +@RequestMapping("/apiadmin/home") +public class AdminHomeRest { + +} diff --git a/external/src/main/java/com/yxt/external/apiadmin/aggregation/CrmCustomerTempRest.java b/external/src/main/java/com/yxt/external/apiadmin/aggregation/CrmCustomerTempRest.java new file mode 100644 index 0000000..8a13f10 --- /dev/null +++ b/external/src/main/java/com/yxt/external/apiadmin/aggregation/CrmCustomerTempRest.java @@ -0,0 +1,48 @@ +package com.yxt.external.apiadmin.aggregation; + +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo;; +import com.yxt.external.feign.crmcustomer.CrmCustomerFeign; +import com.yxt.external.feign.crmcustomer.CrmCustomerTempQuery; +import com.yxt.external.feign.crmcustomer.CrmCustomerTempVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; + +/** + * Project: anrui-crm(客户管理)
+ * File: CrmCustomerTempFeignFallback.java
+ * Class: com.yxt.anrui.crm.biz.crmcustomertemp.CrmCustomerTempRest
+ * Description: 潜在客户信息.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2022-01-12 11:21:17
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@Api(tags = "潜在客户信息") +@RestController +@RequestMapping("v1/crmcustomertemp") +public class CrmCustomerTempRest { + + @Autowired + private CrmCustomerFeign crmCustomerFeign; + + + @ApiOperation("根据orgSid查询客户数量") + @GetMapping("/getCustomerByOrgSid") + public ResultBean getCustomerByOrgSid(@RequestParam("orgSid") String orgSid) { + return crmCustomerFeign.getCustomerByOrgSid(orgSid); + } + @ApiOperation("根据条件分页查询数据的列表") + @PostMapping("/listPage1") + public ResultBean> listPage1(@RequestBody PagerQuery pq) { + return crmCustomerFeign.listPage1(pq); + } +} diff --git a/external/src/main/java/com/yxt/external/apiadmin/aggregation/PurchaseBillRest.java b/external/src/main/java/com/yxt/external/apiadmin/aggregation/PurchaseBillRest.java new file mode 100644 index 0000000..f4ccc41 --- /dev/null +++ b/external/src/main/java/com/yxt/external/apiadmin/aggregation/PurchaseBillRest.java @@ -0,0 +1,58 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.yxt.external.apiadmin.aggregation; + +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo; +import com.yxt.external.biz.func.purchase.PurchaseBillDto; +import com.yxt.external.feign.purchase.PurchaseBillFeign; +import com.yxt.external.feign.purchase.PurchaseBillQuery; +import com.yxt.external.feign.purchase.PurchaseBillVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +@Api(tags = "采购单") +@RestController +@RequestMapping("/apiadmin/purchasebill") +public class PurchaseBillRest { + + @Autowired + private PurchaseBillFeign purchaseBillFeign; + + @ApiOperation("新增采购单") + @PostMapping("/savePurchase") + public ResultBean savePurchase(@RequestBody PurchaseBillDto dto){ + return purchaseBillFeign.savePurchase(dto); + } + @ApiOperation("根据条件分页查询数据的列表") + @PostMapping("/listPage") + public ResultBean> listPage(@RequestBody PagerQuery pq){ + return purchaseBillFeign.listPage(pq); + } +} diff --git a/external/src/main/java/com/yxt/external/apiadmin/aggregation/PurchaseInventoryBillRest.java b/external/src/main/java/com/yxt/external/apiadmin/aggregation/PurchaseInventoryBillRest.java new file mode 100644 index 0000000..6284fc7 --- /dev/null +++ b/external/src/main/java/com/yxt/external/apiadmin/aggregation/PurchaseInventoryBillRest.java @@ -0,0 +1,30 @@ +package com.yxt.external.apiadmin.aggregation; + +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo; +import com.yxt.external.biz.func.purchaseinventorybill.PurchaseInventoryBillDto3; +import com.yxt.external.feign.warehouse.purchaseinventorybill.PurchaseInventoryBillFeign; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * @author wangpengfei + * @date 2024/8/1 17:46 + */ +@Api(tags = "采购入库") +@RestController +@RequestMapping("/apiadmin/purchaseinventorybill") +public class PurchaseInventoryBillRest { + @Autowired + PurchaseInventoryBillFeign purchaseInventoryBillFeign; + + @ApiOperation("确认(对外)") + @PostMapping("/confirmByBill") + ResultBean confirmByBill(@RequestBody PurchaseInventoryBillDto3 dto) { + return purchaseInventoryBillFeign.confirmByBill(dto); + } + +} diff --git a/external/src/main/java/com/yxt/external/apiadmin/aggregation/SmsSalesBillRest.java b/external/src/main/java/com/yxt/external/apiadmin/aggregation/SmsSalesBillRest.java new file mode 100644 index 0000000..918542b --- /dev/null +++ b/external/src/main/java/com/yxt/external/apiadmin/aggregation/SmsSalesBillRest.java @@ -0,0 +1,69 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.yxt.external.apiadmin.aggregation; + +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo; +import com.yxt.external.biz.func.smssalesbill.SmsSalesBillDto; +import com.yxt.external.feign.sales.smssalesbill.SmsSalesBillFeign; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + + +/** + * Project: ss-sales(ss-sales)
+ * File: SmsSalesBillFeignFallback.java
+ * Class: com.yxt.sales.apiadmin.biz.smssalesbill.SmsSalesBillRest
+ * Description: 销售订单.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2024-07-04 15:18:10
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@Api(tags = "销售订单") +@RestController("com.yxt.sales.apiadmin.biz.smssalesbill.SmsSalesBillRest") +@RequestMapping("v1/smssalesbill") +public class SmsSalesBillRest { + + @Autowired + private SmsSalesBillFeign smsSalesBillFeign; + + + @ApiOperation("新增销售单(对外)") + @PostMapping("/saveSales") + public ResultBean saveSales(@RequestBody SmsSalesBillDto dto){ + return smsSalesBillFeign.saveSales(dto); + } +} diff --git a/external/src/main/java/com/yxt/external/apiadmin/aggregation/SupplierInfoRest.java b/external/src/main/java/com/yxt/external/apiadmin/aggregation/SupplierInfoRest.java new file mode 100644 index 0000000..0b8b7ac --- /dev/null +++ b/external/src/main/java/com/yxt/external/apiadmin/aggregation/SupplierInfoRest.java @@ -0,0 +1,81 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.yxt.external.apiadmin.aggregation; + +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo; +import com.yxt.external.biz.func.supplierinfo.SupplierInfoChoice; +import com.yxt.external.biz.func.supplierinfo.SupplierInfoDetailsVo; +import com.yxt.external.biz.func.supplierinfo.SupplierInfoQuery; +import com.yxt.external.biz.func.supplierinfo.SupplierInfoVo; +import com.yxt.external.feign.supplier.supplierinfo.SupplierInfoFeign; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * Project: yxt-base(仓储基础信息供应商)
+ * File: BaseSupplierInfoFeignFallback.java
+ * Class: com.yxt.anrui.as.biz.basesupplierinfo.BaseSupplierInfoRest
+ * Description: 供应商信息.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2024-03-13 16:51:56
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@Api(tags = "供应商信息") +@RestController +@RequestMapping("/apiadmin/supplierinfo") +public class SupplierInfoRest { + + @Autowired + private SupplierInfoFeign supplierInfoFeign; + + + @ApiOperation("供应商数量") + @GetMapping("/getSupplierCountByOrgSid") + public ResultBean getSupplierCountByOrgSid(@RequestParam("orgSid") String orgSid){ + return supplierInfoFeign.getSupplierCountByOrgSid(orgSid); + } + @ApiOperation("根据SID获取一条记录") + @GetMapping("/fetchDetailsBySid/{sid}") + public ResultBean fetchDetailsBySid(@PathVariable("sid") String sid){ + return supplierInfoFeign.fetchDetailsBySid(sid); + } + @ApiOperation("根据条件分页查询数据的列表") + @PostMapping("/listPage1") + public ResultBean> listPage1(@RequestBody PagerQuery pq){ + ResultBean rb = ResultBean.fireFail(); + return supplierInfoFeign.listPage1(pq); + } +} diff --git a/external/src/main/java/com/yxt/external/apiadmin/aggregation/WarehouseInfoRest.java b/external/src/main/java/com/yxt/external/apiadmin/aggregation/WarehouseInfoRest.java new file mode 100644 index 0000000..6637fd8 --- /dev/null +++ b/external/src/main/java/com/yxt/external/apiadmin/aggregation/WarehouseInfoRest.java @@ -0,0 +1,87 @@ +package com.yxt.external.apiadmin.aggregation; + +import com.yxt.common.base.utils.StringUtils; +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo; +import com.yxt.external.biz.func.supplierinfo.SupplierInfoDetailsVo; +import com.yxt.external.biz.func.warehouseinfo.*; +import com.yxt.external.feign.supplier.supplierinfo.SupplierInfoFeign; +import com.yxt.external.feign.warehouse.warehouseinfo.WarehouseInfoFeign; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author wangpengfei + * @date 2024/2/27 16:14 + */ +@Api(tags = "仓库信息") +@RestController +@RequestMapping("/apiadmin/warehouseinfo") +public class WarehouseInfoRest { + + @Autowired + WarehouseInfoFeign warehouseInfoFeign; + @Autowired + SupplierInfoFeign supplierInfoFeign; + + + @PostMapping("/list") + public ResultBean> list(@RequestBody WarehouseInfoMapQuery query) { + ResultBean rb =new ResultBean(); + List vos=warehouseInfoFeign.list(query).getData(); + for (ProjectDetailsVo vo : vos) { + if(StringUtils.isNotBlank(vo.getSupplierName())){ + SupplierInfoDetailsVo v=supplierInfoFeign.fetchDetailsBySid(vo.getSupplierName()).getData(); + vo.setSupplierName(v.getSupplierName()); + vo.setSupplierType(v.getSupplierTypeName()); + } + } + return rb.success().setData(vos); + } + @GetMapping("/getWarehouseBySid/{sid}") + public ResultBean getWarehouseBySid(@PathVariable("sid") String sid) { + ResultBean rb =new ResultBean().fail(); + ProjectDetailsVo vo=warehouseInfoFeign.getWarehouseBySid(sid).getData(); + for (GoodsDetailsVo goodsDetail : vo.getGoodsDetails()) { + String sidss =goodsDetail.getSupplierName(); + if(StringUtils.isNotBlank(sidss)){ + SupplierInfoDetailsVo v=supplierInfoFeign.fetchDetailsBySid(sidss).getData(); + goodsDetail.setSupplierName(v.getSupplierName()); + goodsDetail.setSupplierType(v.getSupplierTypeName()); + } + } + + return rb.success().setData(vo); + } + @PostMapping("/listPageN") + public ResultBean> listPageN(@RequestBody PagerQuery query) { + ResultBean rb =new ResultBean(); + PagerVo vos=warehouseInfoFeign.listPageN(query).getData(); + for (ProjectDetailsVo vo : vos.getRecords()) { + for (GoodsDetailsVo goodsDetail : vo.getGoodsDetails()) { + String sidss =goodsDetail.getSupplierName(); + if(StringUtils.isNotBlank(sidss)){ + SupplierInfoDetailsVo v=supplierInfoFeign.fetchDetailsBySid(sidss).getData(); + goodsDetail.setSupplierName(v.getSupplierName()); + goodsDetail.setSupplierType(v.getSupplierTypeName()); + } + } + } + return rb.success().setData(vos); + } + @ApiOperation("初始化") + @GetMapping("/initialization/{sid}") + public ResultBean initialization(@PathVariable("sid") String sid) { + return warehouseInfoFeign.initialization(sid); + } + @ApiOperation("统计各省仓库") + @GetMapping("/getWarehouseCountByOrgSid") + public ResultBean> getWarehouseCountByOrgSid(@RequestParam("orgSid") String orgSid) { + return warehouseInfoFeign.getWarehouseCountByOrgSid(orgSid); + } +} diff --git a/external/src/main/java/com/yxt/external/apiwx/WxHomeRest.java b/external/src/main/java/com/yxt/external/apiwx/WxHomeRest.java new file mode 100644 index 0000000..67125f0 --- /dev/null +++ b/external/src/main/java/com/yxt/external/apiwx/WxHomeRest.java @@ -0,0 +1,10 @@ +package com.yxt.external.apiwx; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController("com.yxt.wms.apiwx.WxHomeRest") +@RequestMapping("/apiwx/home") +public class WxHomeRest { + +} diff --git a/external/src/main/java/com/yxt/external/biz/func/purchase/PurchaseBillDto.java b/external/src/main/java/com/yxt/external/biz/func/purchase/PurchaseBillDto.java new file mode 100644 index 0000000..4f93a90 --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/func/purchase/PurchaseBillDto.java @@ -0,0 +1,106 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.yxt.external.biz.func.purchase; + + +import com.yxt.common.core.dto.Dto; +import com.yxt.external.biz.func.purchaseappendix.PurchaseAppendixUrl; +import com.yxt.external.biz.func.purchasebillamount.PurchaseBillAmountDto; +import com.yxt.external.biz.func.purchasebilldetail.PurchaseBillDetailDto; +import com.yxt.external.biz.func.purchasebillextend.PurchaseBillExtendDto; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +@ApiModel(value = "采购单 数据传输对象", description = "采购单 数据传输对象") +public class PurchaseBillDto implements Dto { + + private String sid; + + @ApiModelProperty("备注") + private String remarks; + @ApiModelProperty("制单人sid") + private String createBySid; + @ApiModelProperty("制单人姓名") + private String createByName; // 制单人姓名 + @ApiModelProperty("来源单sid(工单sid)") + private String sourceBillSid; // 来源单sid(工单sid) + @ApiModelProperty("来源单编号/外部编号") + private String sourceBillNo; // 来源单编号/外部编号 + @ApiModelProperty("单据编号") + private String billNo; // 单据编号 + @ApiModelProperty("采购类型Key") + private String purchaseTypeKey; // 采购类型Key + @ApiModelProperty("采购类型Value(厂家采购、外采、其他)") + private String purchaseTypeValue; // 采购类型Value(厂家采购、外采、其他) + @ApiModelProperty("采购原因key") + private String purchaseReasonKey; // 采购原因key + @ApiModelProperty("采购原因(储备/客户订单/在修车辆)") + private String purchaseReasonValue; // 采购原因(储备/客户订单/在修车辆) + @ApiModelProperty("付款方式key") + private String payTypeKey; // 付款方式key + @ApiModelProperty("付款方式value(预付款/月结/单笔付款)") + private String payTypeValue; // 付款方式value(预付款/月结/单笔付款) + @ApiModelProperty("供应商sid") + private String supplierSid; // 供应商sid + @ApiModelProperty("供应商名称") + private String supplierName; // 供应商名称 + @ApiModelProperty("供应商联系电话") + private String supplierPhone; // 供应商联系电话 + @ApiModelProperty("采购员sid(单选)") + private String purchaserSid; // 采购员sid(单选) + @ApiModelProperty("采购员姓名") + private String purchaserName; // 采购员姓名 + @ApiModelProperty("预计到货日期") + private String deliveryDate; // 预计到货日期 + @ApiModelProperty("仓库sid") + private String wareHouseSid; + @ApiModelProperty("仓库名称") + private String wareHouseName; + @ApiModelProperty("使用组织sid") + private String useOrgSid; + @ApiModelProperty("创建组织sid") + private String createOrgSid; + @ApiModelProperty("创建部门sid") + private String deptSid; + @ApiModelProperty("创建部门") + private String deptName; + @ApiModelProperty("组织编码") + private String orgCode; + + @ApiModelProperty("采购单费用/预付款") + private PurchaseBillAmountDto purchaseBillAmount; + @ApiModelProperty("采购单扩展") + private PurchaseBillExtendDto purchaseBillExtend; + @ApiModelProperty("采购单商品明细") + private List purchaseBillDetailList; + @ApiModelProperty("附件") + private List purchaseAppendixList = new ArrayList<>(); +} \ No newline at end of file diff --git a/external/src/main/java/com/yxt/external/biz/func/purchaseappendix/PurchaseAppendixUrl.java b/external/src/main/java/com/yxt/external/biz/func/purchaseappendix/PurchaseAppendixUrl.java new file mode 100644 index 0000000..1ba4311 --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/func/purchaseappendix/PurchaseAppendixUrl.java @@ -0,0 +1,53 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.yxt.external.biz.func.purchaseappendix; + + +import com.yxt.common.core.dto.Dto; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * Project: caigou(采购)
+ * File: PurchaseAppendixDto.java
+ * Class: com.yxt.purchase.api.purchaseappendix.PurchaseAppendixDto
+ * Description: 附件表 数据传输对象.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2024-07-03 14:44:55
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@Data +@ApiModel(value = "附件表 数据传输对象", description = "附件表 数据传输对象") +public class PurchaseAppendixUrl implements Dto { + + @ApiModelProperty("附件路径") + private String url; +} \ No newline at end of file diff --git a/external/src/main/java/com/yxt/external/biz/func/purchasebillamount/PurchaseBillAmountDto.java b/external/src/main/java/com/yxt/external/biz/func/purchasebillamount/PurchaseBillAmountDto.java new file mode 100644 index 0000000..1826152 --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/func/purchasebillamount/PurchaseBillAmountDto.java @@ -0,0 +1,101 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.yxt.external.biz.func.purchasebillamount; + + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.yxt.common.core.dto.Dto; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * Project: caigou(采购)
+ * File: PurchaseBillAmountDto.java
+ * Class: com.yxt.purchase.api.purchasebillamount.PurchaseBillAmountDto
+ * Description: 采购单-费用/预付款 数据传输对象.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2024-07-03 14:44:55
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@Data +@ApiModel(value = "采购单-费用/预付款 数据传输对象", description = "采购单-费用/预付款 数据传输对象") +public class PurchaseBillAmountDto implements Dto { + + private String sid; // sid + + @ApiModelProperty("采购单sid") + private String billSid; // 采购单sid + @ApiModelProperty("误差调整金额") + private BigDecimal errorAmount; // 误差调整金额 + @ApiModelProperty("优惠金额") + private BigDecimal discountAmount; // 优惠金额 + @ApiModelProperty("应付金额") + private BigDecimal payableAmount; // 应付金额 + @ApiModelProperty("采购运费") + private BigDecimal freight; // 采购运费 + @ApiModelProperty("运费分摊方式Key") + private String freightShareTypeKey; // 运费分摊方式Key + @ApiModelProperty("运费分摊方式Value") + private String freightShareTypeValue; // 运费分摊方式Value + @ApiModelProperty("其它费用") + private BigDecimal otherAmount; // 其它费用 + @ApiModelProperty("其他费用分摊方式Key") + private String otherShareTypeKey; // 其他费用分摊方式Key + @ApiModelProperty("其他费用分摊方式Value") + private String otherShareTypeValue; // 其他费用分摊方式Value + @ApiModelProperty("币种") + private String currencyKey; + @ApiModelProperty("币种") + private String currencyValue; + @ApiModelProperty("预付金额") + private BigDecimal prepayment; // 预付金额 + @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + @ApiModelProperty("付款期限") + private Date paymentTerm; // 付款期限 + @ApiModelProperty("收款开户行") + private String bankName; // 收款开户行 + @ApiModelProperty("收款账户") + private String bankAccountName; // 收款账户 + @ApiModelProperty("收款银行账号") + private String bankAccount; // 收款银行账号 + + @ApiModelProperty("付款账号(银行账号)") + private String payBankAccount; + @ApiModelProperty("结算账户key") + private String settleAccountKey; + @ApiModelProperty("结算账户value") + private String settleAccountValue; + @ApiModelProperty("本次付款") + private BigDecimal thisPayAmount; +} \ No newline at end of file diff --git a/external/src/main/java/com/yxt/external/biz/func/purchasebilldetail/PurchaseBillDetailDto.java b/external/src/main/java/com/yxt/external/biz/func/purchasebilldetail/PurchaseBillDetailDto.java new file mode 100644 index 0000000..01f9d40 --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/func/purchasebilldetail/PurchaseBillDetailDto.java @@ -0,0 +1,106 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.yxt.external.biz.func.purchasebilldetail; + + +import com.yxt.common.core.dto.Dto; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@ApiModel(value = "采购单据明细 数据传输对象", description = "采购单据明细 数据传输对象") +public class PurchaseBillDetailDto implements Dto { + + private String sid; + + @ApiModelProperty("备注") + private String remarks; + @ApiModelProperty("单据sid") + private String billSid; + @ApiModelProperty("商品基础信息Sid") + private String goodsSpuSid; + @ApiModelProperty("商品名称") + private String goodsSpuName; + @ApiModelProperty("商品Skusid") + private String goodsSkuSid; + @ApiModelProperty("商品Sku名称") + private String goodsSkuTitle; + @ApiModelProperty("商品编码") + private String goodsSkuCode; + @ApiModelProperty("商品条码") + private String goodsSN; + @ApiModelProperty("货号") + private String goodsNum; + @ApiModelProperty("规格型号") + private String goodsSkuOwnSpec; + @ApiModelProperty("商品图片") + private String goodsImgUrl; + @ApiModelProperty("计量单位") + private String unit; + @ApiModelProperty("单价") + private BigDecimal cost; + @ApiModelProperty("数量") + private BigDecimal count; + @ApiModelProperty("数量(pcs)") + private BigDecimal pcsCount; + @ApiModelProperty("吊牌价") + private BigDecimal tagPrice; + @ApiModelProperty("折扣率") + private BigDecimal discountRate; + @ApiModelProperty("折后单价") + private BigDecimal discountPrice; + @ApiModelProperty("分摊金额") + private BigDecimal shareAmount; + @ApiModelProperty("分配比例") + private BigDecimal shareRate; + @ApiModelProperty("采购金额") + private BigDecimal amount; + @ApiModelProperty("税率") + private BigDecimal taxRate; + @ApiModelProperty("未含税价") + private BigDecimal unTaxPrice; + @ApiModelProperty("未含税总价(未含税价*采购数量)") + private BigDecimal unTaxTotalAmount; + @ApiModelProperty("采购周期") + private Integer cycle; + @ApiModelProperty("预期到货日期") + private String deliveryDate; + @ApiModelProperty("总税额") + private BigDecimal taxAmount; + + /* + * 商品扩展字段 + * */ + @ApiModelProperty("批次号") + private String batchNumber; + @ApiModelProperty("生产日期") + private String madeDate; + @ApiModelProperty("过期日期") + private String expireDate; +} \ No newline at end of file diff --git a/external/src/main/java/com/yxt/external/biz/func/purchasebillextend/PurchaseBillExtendDto.java b/external/src/main/java/com/yxt/external/biz/func/purchasebillextend/PurchaseBillExtendDto.java new file mode 100644 index 0000000..67d978c --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/func/purchasebillextend/PurchaseBillExtendDto.java @@ -0,0 +1,59 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.yxt.external.biz.func.purchasebillextend; + + +import com.yxt.common.core.dto.Dto; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@ApiModel(value = "采购单扩展 数据传输对象", description = "采购单扩展 数据传输对象") +public class PurchaseBillExtendDto implements Dto { + + private String sid; // sid + + @ApiModelProperty("采购单sid") + private String billSid; // 采购单sid + @ApiModelProperty("物流单号") + private String logisticsNum; // 物流单号 + @ApiModelProperty("生产进度") + private String productProgress; // 生产进度 + @ApiModelProperty("收货状态key") + private String receiveStateKey; // 收货状态 + @ApiModelProperty("收货状态value") + private String receiveStateValue; + @ApiModelProperty("发货状态key") + private String deliveryStateKey; // 发货状态 + @ApiModelProperty("发货状态value") + private String deliveryStateValue; + + @ApiModelProperty("已发货数量") + private BigDecimal deliveryCount; +} \ No newline at end of file diff --git a/external/src/main/java/com/yxt/external/biz/func/purchaseinventorybill/PurchaseInventoryBillDto3.java b/external/src/main/java/com/yxt/external/biz/func/purchaseinventorybill/PurchaseInventoryBillDto3.java new file mode 100644 index 0000000..e782ded --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/func/purchaseinventorybill/PurchaseInventoryBillDto3.java @@ -0,0 +1,42 @@ +package com.yxt.external.biz.func.purchaseinventorybill; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.yxt.external.biz.func.purchaseinventorybilldetail.PurchaseInventoryBillDetailDto2; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author wangpengfei + * @date 2024/8/27 14:35 + */ +@Data +public class PurchaseInventoryBillDto3 { + + @ApiModelProperty("来源单sid") + private String sourceBillSid; + @ApiModelProperty("来源单号") + private String sourceBillNo; + + + @ApiModelProperty("操作员sid") + private String operatorSid; + @ApiModelProperty("操作员名称") + private String operatorName; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @ApiModelProperty("操作时间") + private String operatorTime; + @ApiModelProperty("使用组织sid") + private String useOrgSid; + @ApiModelProperty("创建组织sid") + private String createOrgSid; + @ApiModelProperty("备注") + private String remarks; + @ApiModelProperty("商品列表") + private List list = new ArrayList<>(); + private String userSid; + private String userName; + private String storageTime; +} diff --git a/external/src/main/java/com/yxt/external/biz/func/purchaseinventorybilldetail/PurchaseInventoryBillDetailDto2.java b/external/src/main/java/com/yxt/external/biz/func/purchaseinventorybilldetail/PurchaseInventoryBillDetailDto2.java new file mode 100644 index 0000000..1f29bbb --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/func/purchaseinventorybilldetail/PurchaseInventoryBillDetailDto2.java @@ -0,0 +1,69 @@ +package com.yxt.external.biz.func.purchaseinventorybilldetail; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/4/15 + **/ +@Data +public class PurchaseInventoryBillDetailDto2 { + private String sid; + @ApiModelProperty("来源单sid") + private String sourceBillSid; + @ApiModelProperty("图示") + private String illustration; + @ApiModelProperty("商品spusid") + private String goodsSpuSid; + @ApiModelProperty("商品SpuName") + private String goodsSpuName; + @ApiModelProperty("商品skusid") + private String goodsSkuSid; + @ApiModelProperty("商品名称") + private String goodsSkuTitle; + @ApiModelProperty("商品编码") + private String goodsSkuCode; + @ApiModelProperty("商品条码") + private String goodsBarCode; + @ApiModelProperty("规格值") + private String specValue; + private String ownSpec; + @ApiModelProperty("箱条码") + private String boxBarCode; + @ApiModelProperty("箱规格") + private String boxSpec; + + @ApiModelProperty("单位") + private String unit; + private String goodsUnitName; + @ApiModelProperty("成本单价") + private BigDecimal price; + private BigDecimal costPrice; + @ApiModelProperty("总价") + private BigDecimal totalPrice; + @ApiModelProperty("数量") + private BigDecimal count; + @ApiModelProperty("辅助单位") + private String auxiliaryUnits; + @ApiModelProperty("序列号") + private String serialNumber; + @ApiModelProperty("生产批次号") + private String batch; + + @ApiModelProperty("入库库位sid") + private String warehouseRackSid; + @ApiModelProperty("入库库位名") + private String warehouseRackName; + @ApiModelProperty("使用组织sid") + private String useOrgSid; + @ApiModelProperty("创建组织sid") + private String createOrgSid; + private String remarks; + private String warehouseName; + private String warehouseSid; + +} diff --git a/external/src/main/java/com/yxt/external/biz/func/smssalesbill/AccountVo.java b/external/src/main/java/com/yxt/external/biz/func/smssalesbill/AccountVo.java new file mode 100644 index 0000000..c05f5d4 --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/func/smssalesbill/AccountVo.java @@ -0,0 +1,21 @@ +package com.yxt.external.biz.func.smssalesbill; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author Fan + * @description + * @date 2024/7/24 17:19 + */ +@Data +public class AccountVo { + + @ApiModelProperty("结算账户") + private String bankAccount; // 结算账户 + @ApiModelProperty("结算账户") + private String bankAccountKey; // 结算账户 + @ApiModelProperty("结算金额") + private String amount; // 结算金额 + +} diff --git a/external/src/main/java/com/yxt/external/biz/func/smssalesbill/SmsSalesBillDto.java b/external/src/main/java/com/yxt/external/biz/func/smssalesbill/SmsSalesBillDto.java new file mode 100644 index 0000000..2204404 --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/func/smssalesbill/SmsSalesBillDto.java @@ -0,0 +1,185 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.yxt.external.biz.func.smssalesbill; + + +import com.yxt.common.core.dto.Dto; +import com.yxt.external.biz.func.smssalesbilldetail.SmsSalesBillDetailDetailsVo; +import com.yxt.external.utils.FileQueryUrl; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * Project: ss-sales(ss-sales)
+ * File: SmsSalesBillDto.java
+ * Class: com.yxt.sales.apiadmin.api.smssalesbill.SmsSalesBillDto
+ * Description: 销售订单 数据传输对象.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2024-07-04 15:18:10
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@Data +@ApiModel(value = "销售订单 数据传输对象", description = "销售订单 数据传输对象") +public class SmsSalesBillDto implements Dto { + + private String sid; // sid + @ApiModelProperty("制单人sid") + private String createBySid; // 制单人姓名 + @ApiModelProperty("制单人姓名") + private String createByName; // 制单人姓名 + @ApiModelProperty("使用组织sid") + private String useOrgSid; // 使用组织sid + @ApiModelProperty("创建组织sid") + private String createOrgSid; // 创建组织sid + @ApiModelProperty("制单部门sid") + private String deptSid; // 制单部门sid + @ApiModelProperty("制单部门") + private String deptName; // 制单部门 + @ApiModelProperty("制单日期") + private String createTime; // 制单日期 + @ApiModelProperty("单据类型key(线下订单/预售订单等)") + private String billTypeKey; // 单据类型key(线下订单/预售订单等) + @ApiModelProperty("单据类型value") + private String billTypeValue; // 单据类型value + @ApiModelProperty("仓库sid") + private String warehouseSid; // 仓库sid + @ApiModelProperty("仓库名称") + private String warehouseName; // 仓库名称 + @ApiModelProperty("配送方式Key") + private String deliveryTypeKey; // 配送方式Key + @ApiModelProperty("配送方式Value") + private String deliveryTypeValue; // 配送方式Value + @ApiModelProperty("物流公司") + private String logisticsName; // 物流公司 + @ApiModelProperty("销售用户sid单选)(销售用户sid)") + private String salesUserSid; // 销售用户sid单选)(销售用户sid) + @ApiModelProperty("销售姓名") + private String salesName; // 销售姓名 + @ApiModelProperty("是否货到付款(1是,0否)") + private String isFirstPay; // 是否货到付款(1是,0否) + @ApiModelProperty("备注") + private String remarks; // 备注 + @ApiModelProperty("开单价格Key(标准售价、吊牌价、批发价、上次购买价)") + private String billPriceTypeKey; // 开单价格Key(标准售价、吊牌价、批发价、上次购买价) + @ApiModelProperty("开单价格value") + private String billPriceTypeValue; // 开单价格value + //-------------- 客户信息 -------------------- + @ApiModelProperty("客户sid") + private String customerSid; // 客户sid + @ApiModelProperty("客户名称") + private String customerName; // 客户名称 + @ApiModelProperty("收货人姓名") + private String shipperName; // 收货人姓名 + @ApiModelProperty("收货人手机") + private String shipperMob; // 收货人手机 + @ApiModelProperty("收货省sid") + private String deliveryProvinceSid; // 收货省sid + @ApiModelProperty("收货省") + private String deliveryProvince; // 收货省 + @ApiModelProperty("收货市sid") + private String deliveryCitySid; // 收货市sid + @ApiModelProperty("收货市") + private String deliveryCity; // 收货市 + @ApiModelProperty("收货县区sid") + private String deliveryCountySid; // 收货县区sid + @ApiModelProperty("收货县区") + private String deliveryCounty; // 收货县区 + @ApiModelProperty("收货详细地址") + private String deliveryAddress; // 收货详细地址 + @ApiModelProperty("邮编 ") + private String postCode; // 邮编 + //---------------发票信息------------ + @ApiModelProperty("是否需要开发票(是1,否0)") + private String isInvoicing; // 是否需要开发票(是1,否0) + @ApiModelProperty("发票类型Key") + private String invoiceTypeKey; // 发票类型Key + @ApiModelProperty("发票类型") + private String invoiceType; // 发票类型 + @ApiModelProperty("开票名称") + private String invoiceTitle; // 开票名称 + @ApiModelProperty("税号") + private String taxpayerNo; // 税号 + @ApiModelProperty("税率") + private String taxRate; // 税率 + //商品信息 + @ApiModelProperty("商品列表") + private List goodsList; // 商品列表 + + //费用信息 + @ApiModelProperty("折扣率") + private String discountRate; // 折扣率 + @ApiModelProperty("整体优惠券") + private String coupon; // 整体优惠券 + @ApiModelProperty("整体优惠金额") + private String discountAmount; // 整体优惠金额 + @ApiModelProperty("优惠后金额") + private String amount; // 优惠后金额 + @ApiModelProperty("应收合计") + private String dueAmount; // 应收合计 + @ApiModelProperty("运费") + private String freight; // 运费 + @ApiModelProperty("本次收款") + private String thisPay; // 本次收款 + @ApiModelProperty("本次欠款") + private String thisDebt; // 本次欠款 + @ApiModelProperty("总欠款") + private String totalDebt; // 总欠款 + @ApiModelProperty("预收款余额") + private String advanceBalance; // 预收款余额 + //结算 + @ApiModelProperty("结算账户") + private List accounts; + @ApiModelProperty("结算账户") + private String bankAccount; // 结算账户 + @ApiModelProperty("结算账户") + private String bankAccountKey; // 结算账户 + @ApiModelProperty("付款凭证") + private List files = new ArrayList<>(); // 付款凭证 + + + //-------------补充------------- + @ApiModelProperty("快递公司sid") + private String logisticsNameSid; // 快递公司sid + @ApiModelProperty("收货人sid") + private String shipperSid; // 收货人sid + @ApiModelProperty("固定电话") + private String phone; // 固定电话 + @ApiModelProperty("店铺sid") + private String shopSid; // 店铺sid + @ApiModelProperty("店铺名称") + private String shopName; // 店铺名称 + @ApiModelProperty("订单号") + private String billNo; // 订单号 + +} diff --git a/external/src/main/java/com/yxt/external/biz/func/smssalesbilldetail/SmsSalesBillDetailDetailsVo.java b/external/src/main/java/com/yxt/external/biz/func/smssalesbilldetail/SmsSalesBillDetailDetailsVo.java new file mode 100644 index 0000000..cc5bfd3 --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/func/smssalesbilldetail/SmsSalesBillDetailDetailsVo.java @@ -0,0 +1,114 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.yxt.external.biz.func.smssalesbilldetail; + + +import com.yxt.common.core.vo.Vo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * Project: ss-sales(ss-sales)
+ * File: SmsSalesBillDetailVo.java
+ * Class: com.yxt.sales.apiadmin.api.smssalesbilldetail.SmsSalesBillDetailVo
+ * Description: 销售订单-商品清单 视图数据对象.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2024-07-04 15:18:10
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@Data +@ApiModel(value = "销售订单-商品清单 视图数据详情", description = "销售订单-商品清单 视图数据详情") +public class SmsSalesBillDetailDetailsVo implements Vo { + + + + @ApiModelProperty("商品基础信息Sid") + private String goodSpuSid; // 商品基础信息Sid + @ApiModelProperty("商品名称") + private String goodsSpuName; // 商品名称 + @ApiModelProperty("商品Skusid") + private String goodsSkuSid; // 商品Skusid + @ApiModelProperty("商品Sku名称") + private String goodsSkuTitle; // 商品Sku名称 + @ApiModelProperty("商品编码") + private String goodsSkuCode; // 商品编码 + @ApiModelProperty("规格型号") + private String goodsSkuOwnSpec; // 规格型号 + @ApiModelProperty("重量(kg)") + private String weight; // 重量(kg) + @ApiModelProperty("体积(立方米)") + private String volume; // 体积(立方米) + @ApiModelProperty("计量单位") + private String unit; // 计量单位 + @ApiModelProperty("辅单位数量") + private String auxiliaryUnit; // 辅单位数量 + @ApiModelProperty("销售单价") + private String price; // 销售单价 + @ApiModelProperty("数量") + private String count; // 数量 + @ApiModelProperty("折扣率") + private String discountRtate; // 折扣率 + @ApiModelProperty("折后单价") + private String discountPrice; // 折后单价 + @ApiModelProperty("应收款") + private String dueAmount; // 应收款 + @ApiModelProperty("商品成本") + private String cost; // 商品成本 + @ApiModelProperty("分摊优惠") + private String discountAmount; // 分摊优惠 + @ApiModelProperty("惠后金额") + private String amount; // 惠后金额 + @ApiModelProperty("库存数量") + private String inventoryCount; // 库存数量 + @ApiModelProperty("备注") + private String remarks; // 备注 + + @ApiModelProperty("批次号") + private String batchNumber; // 批次号 + @ApiModelProperty("税率") + private String taxRate; // 库存数量 + @ApiModelProperty("税额") + private String taxAmount; // 税额 + @ApiModelProperty("未含税价") + private String unTaxPrice; // 未含税价 + @ApiModelProperty("总税额(未含税总额)") + private String taxTotalAmount; // 总税额(未含税总额) + @ApiModelProperty("图片") + private String goodsImgUrl; // 图片 + + /** + * 图片 + */ + private List pic = new ArrayList<>(); +} diff --git a/external/src/main/java/com/yxt/external/biz/func/supplierinfo/SupplierInfo.java b/external/src/main/java/com/yxt/external/biz/func/supplierinfo/SupplierInfo.java new file mode 100644 index 0000000..1ef525b --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/func/supplierinfo/SupplierInfo.java @@ -0,0 +1,112 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.yxt.external.biz.func.supplierinfo; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.yxt.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * Project: yxt-base(供应商管理)
+ * File: BaseSupplierInfo.java
+ * Class: com.yxt.base.api.basesupplierinfo.BaseSupplierInfo
+ * Description: 供应商信息.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2024-03-18 13:33:13
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@Data +@ApiModel(value = "供应商信息", description = "供应商信息") +@TableName("base_supplier_info") +public class SupplierInfo extends BaseEntity { + private static final long serialVersionUID = 1L; + + @ApiModelProperty("编码") + private String supplierCode; // 编码 + @ApiModelProperty("供应商名称") + private String supplierName; // 供应商名称 + @ApiModelProperty("供应商名称拼音") + private String supplierPY; // 供应商名称拼音 + @ApiModelProperty("供应商类型sid") + private String supplierTypeSid; // 供应商类型sid + @ApiModelProperty("供应商类型") + private String supplierTypeName; // 供应商类型 + @ApiModelProperty("省sid") + private String provinceSid; // 省sid + @ApiModelProperty("province") + private String province; // + @ApiModelProperty("市sid") + private String citySid; // 市sid + @ApiModelProperty("city") + private String city; // + @ApiModelProperty("收货县区sid") + private String countySid; // 收货县区sid + @ApiModelProperty("county") + private String county; // + @ApiModelProperty("详细地址") + private String address; // 详细地址 + @ApiModelProperty("手机") + private String contactMobile; // 手机 + @ApiModelProperty("电话") + private String contactTelePhone; // 电话 + @ApiModelProperty("联系人") + private String contactName; // 联系人 + @ApiModelProperty("传真") + private String fax; // 传真 + @ApiModelProperty("邮编") + private String zipCode; // 邮编 + @ApiModelProperty("电子邮件") + private String email; // 电子邮件 + @ApiModelProperty("网址") + private String website; // 网址 + @ApiModelProperty("开票公司名称") + private String billingCompanyName; // 开票公司名称 + @ApiModelProperty("税号") + private String registNum; // 税号 + @ApiModelProperty("法人") + private String legalName; // 法人 + @ApiModelProperty("采购员") + private String purchaser; // 采购员 + @ApiModelProperty("排序") + private Integer sortNo; // 排序 + @ApiModelProperty("开票类型key") + private String billingTypeKey; // 开票类型key + @ApiModelProperty("开票类型value") + private String billingTypeValue; // 开票类型value + @ApiModelProperty("使用组织sid") + private String useOrgSid; // 使用组织sid + @ApiModelProperty("创建组织名称") + private String createOrgName; // 创建组织名称 + @ApiModelProperty("创建组织sid") + private String createOrgSid; // 创建组织sid + private double taxRate; +} diff --git a/external/src/main/java/com/yxt/external/biz/func/supplierinfo/SupplierInfoChoice.java b/external/src/main/java/com/yxt/external/biz/func/supplierinfo/SupplierInfoChoice.java new file mode 100644 index 0000000..c8dea3f --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/func/supplierinfo/SupplierInfoChoice.java @@ -0,0 +1,54 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.yxt.external.biz.func.supplierinfo; + + +import com.yxt.common.core.vo.Vo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * Project: yxt-base(供应商管理)
+ * File: BaseSupplierInfoVo.java
+ * Class: com.yxt.base.api.basesupplierinfo.BaseSupplierInfoVo
+ * Description: 供应商信息 视图数据对象.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2024-03-18 13:33:13
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@Data +@ApiModel(value = "供应商信息 视图数据对象", description = "供应商信息 视图数据对象") +public class SupplierInfoChoice implements Vo { + + private String sid; + @ApiModelProperty("供应商名称") + private String supplierName; +} diff --git a/external/src/main/java/com/yxt/external/biz/func/supplierinfo/SupplierInfoDetailsVo.java b/external/src/main/java/com/yxt/external/biz/func/supplierinfo/SupplierInfoDetailsVo.java new file mode 100644 index 0000000..a93db1d --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/func/supplierinfo/SupplierInfoDetailsVo.java @@ -0,0 +1,118 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.yxt.external.biz.func.supplierinfo; + + +import com.yxt.common.core.vo.Vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * Project: yxt-base(供应商管理)
+ * File: BaseSupplierInfoVo.java
+ * Class: com.yxt.base.api.basesupplierinfo.BaseSupplierInfoVo
+ * Description: 供应商信息 视图数据对象.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2024-03-18 13:33:13
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@Data +@ApiModel(value = "供应商信息 视图数据详情", description = "供应商信息 视图数据详情") +public class SupplierInfoDetailsVo implements Vo { + + private String sid; // sid + + @ApiModelProperty("编码") + private String supplierCode; // 编码 + @ApiModelProperty("供应商名称") + private String supplierName; // 供应商名称 + @ApiModelProperty("供应商名称拼音") + private String supplierPY; // 供应商名称拼音 + @ApiModelProperty("供应商类型sid") + private String supplierTypeSid; // 供应商类型sid + @ApiModelProperty("供应商类型") + private String supplierTypeName; // 供应商类型 + @ApiModelProperty("省sid") + private String provinceSid; // 省sid + @ApiModelProperty("province") + private String province; // + @ApiModelProperty("市sid") + private String citySid; // 市sid + @ApiModelProperty("city") + private String city; // + @ApiModelProperty("收货县区sid") + private String countySid; // 收货县区sid + @ApiModelProperty("county") + private String county; // + @ApiModelProperty("详细地址") + private String address; // 详细地址 + @ApiModelProperty("手机") + private String contactMobile; // 手机 + @ApiModelProperty("电话") + private String contactTelePhone; // 电话 + @ApiModelProperty("联系人") + private String contactName; // 联系人 + @ApiModelProperty("传真") + private String fax; // 传真 + @ApiModelProperty("邮编") + private String zipCode; // 邮编 + @ApiModelProperty("电子邮件") + private String email; // 电子邮件 + @ApiModelProperty("网址") + private String website; // 网址 + @ApiModelProperty("开票公司名称") + private String billingCompanyName; // 开票公司名称 + @ApiModelProperty("税号") + private String registNum; // 税号 + @ApiModelProperty("法人") + private String legalName; // 法人 + @ApiModelProperty("采购员") + private String purchaser; // 采购员 + @ApiModelProperty("排序") + private Integer sortNo; // 排序 + @ApiModelProperty("开票类型key") + private String billingTypeKey; // 开票类型key + @ApiModelProperty("开票类型value") + private String billingTypeValue; // 开票类型value + @ApiModelProperty("使用组织sid") + private String useOrgSid; // 使用组织sid + @ApiModelProperty("创建组织名称") + private String createOrgName; // 创建组织名称 + @ApiModelProperty("创建组织sid") + private String createOrgSid; // 创建组织sid + @ApiModelProperty("供应商开户行") +// private List baseSupplierBankList; + private double taxRate; + private String remarks; +} \ No newline at end of file diff --git a/external/src/main/java/com/yxt/external/biz/func/supplierinfo/SupplierInfoDto.java b/external/src/main/java/com/yxt/external/biz/func/supplierinfo/SupplierInfoDto.java new file mode 100644 index 0000000..1600da2 --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/func/supplierinfo/SupplierInfoDto.java @@ -0,0 +1,121 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.yxt.external.biz.func.supplierinfo; + + +import com.yxt.common.core.dto.Dto; +//import com.yxt.oms.biz.func.supplierbank.SupplierBankDto; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * Project: yxt-base(供应商管理)
+ * File: BaseSupplierInfoDto.java
+ * Class: com.yxt.base.api.basesupplierinfo.BaseSupplierInfoDto
+ * Description: 供应商信息 数据传输对象.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2024-03-18 13:33:13
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@Data +@ApiModel(value = "供应商信息 数据传输对象", description = "供应商信息 数据传输对象") +public class SupplierInfoDto implements Dto { + + private String sid; // sid + + @ApiModelProperty("编码") + private String supplierCode; // 编码 + @ApiModelProperty("供应商名称") + private String supplierName; // 供应商名称 + @ApiModelProperty("供应商名称拼音") + private String supplierPY; // 供应商名称拼音 + @ApiModelProperty("供应商类型sid") + private String supplierTypeSid; // 供应商类型sid + @ApiModelProperty("供应商类型") + private String supplierTypeName; // 供应商类型 + @ApiModelProperty("省sid") + private String provinceSid; // 省sid + @ApiModelProperty("province") + private String province; // + @ApiModelProperty("市sid") + private String citySid; // 市sid + @ApiModelProperty("city") + private String city; // + @ApiModelProperty("收货县区sid") + private String countySid; // 收货县区sid + @ApiModelProperty("county") + private String county; // + @ApiModelProperty("详细地址") + private String address; // 详细地址 + @ApiModelProperty("手机") + private String contactMobile; // 手机 + @ApiModelProperty("电话") + private String contactTelePhone; // 电话 + @ApiModelProperty("联系人") + private String contactName; // 联系人 + @ApiModelProperty("传真") + private String fax; // 传真 + @ApiModelProperty("邮编") + private String zipCode; // 邮编 + @ApiModelProperty("电子邮件") + private String email; // 电子邮件 + @ApiModelProperty("网址") + private String website; // 网址 + @ApiModelProperty("开票公司名称") + private String billingCompanyName; // 开票公司名称 + @ApiModelProperty("税号") + private String registNum; // 税号 + @ApiModelProperty("法人") + private String legalName; // 法人 + @ApiModelProperty("采购员") + private String purchaser; // 采购员 + @ApiModelProperty("排序") + private Integer sortNo; // 排序 + @ApiModelProperty("开票类型key") + private String billingTypeKey; // 开票类型key + @ApiModelProperty("开票类型value") + private String billingTypeValue; // 开票类型value + @ApiModelProperty("使用组织sid") + private String useOrgSid; // 使用组织sid + @ApiModelProperty("创建组织名称") + private String createOrgName; // 创建组织名称 + @ApiModelProperty("创建组织sid") + private String createOrgSid; // 创建组织sid + @ApiModelProperty("开户行信息") +// private List baseSupplierBankList; + private String userSid; + private String orgPath; + private double taxRate; + private String remarks; + private String orgSid; +} \ No newline at end of file diff --git a/external/src/main/java/com/yxt/external/biz/func/supplierinfo/SupplierInfoMapper.java b/external/src/main/java/com/yxt/external/biz/func/supplierinfo/SupplierInfoMapper.java new file mode 100644 index 0000000..0364bcc --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/func/supplierinfo/SupplierInfoMapper.java @@ -0,0 +1,67 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.yxt.external.biz.func.supplierinfo; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; + +/** + * Project: yxt-base(仓储基础信息供应商)
+ * File: BaseSupplierInfoMapper.java
+ * Class: com.yxt.anrui.as.biz.basesupplierinfo.BaseSupplierInfoMapper
+ * Description: 供应商信息.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2024-03-13 16:51:56
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@Mapper +public interface SupplierInfoMapper extends BaseMapper { + + IPage selectPageVo(IPage page, @Param(Constants.WRAPPER) Wrapper qw); + + List selectListAllVo(@Param(Constants.WRAPPER) Wrapper qw); + + @Select("select * from base_supplier_info") + List selectListVo(); + + @Update("update base_supplier_info set isDelete = '1' where sid = #{sid}") + int updateBySidIsDelete(String sid); + + @Select("select * from base_supplier_info") + List choiceSupplierInfo(String createOrgSid); +} \ No newline at end of file diff --git a/external/src/main/java/com/yxt/external/biz/func/supplierinfo/SupplierInfoQuery.java b/external/src/main/java/com/yxt/external/biz/func/supplierinfo/SupplierInfoQuery.java new file mode 100644 index 0000000..ae1348a --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/func/supplierinfo/SupplierInfoQuery.java @@ -0,0 +1,70 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.yxt.external.biz.func.supplierinfo; + + +import com.yxt.common.core.query.Query; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * Project: yxt-base(供应商管理)
+ * File: BaseSupplierInfoQuery.java
+ * Class: com.yxt.base.api.basesupplierinfo.BaseSupplierInfoQuery
+ * Description: 供应商信息 查询条件.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2024-03-18 13:33:13
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@Data +@ApiModel(value = "供应商信息 查询条件", description = "供应商信息 查询条件") +public class SupplierInfoQuery implements Query { + + @ApiModelProperty("供应商名称") + private String supplierName; + @ApiModelProperty("供应商类型") + private String supplierTypeName; + @ApiModelProperty("电话") + private String contactTelePhone; + @ApiModelProperty("联系人") + private String contactName; + + @ApiModelProperty("其他查询条件") + private String otherQuery; + private String orgLevelKey;//权限等级 + @ApiModelProperty("菜单路由") + private String menuUrl; + @ApiModelProperty("组织全路径sid") + private String orgPath; + @ApiModelProperty("用户sid") + private String userSid; + private int index; +} diff --git a/external/src/main/java/com/yxt/external/biz/func/supplierinfo/SupplierInfoService.java b/external/src/main/java/com/yxt/external/biz/func/supplierinfo/SupplierInfoService.java new file mode 100644 index 0000000..0c13932 --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/func/supplierinfo/SupplierInfoService.java @@ -0,0 +1,37 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.yxt.external.biz.func.supplierinfo; + +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo; +import org.springframework.stereotype.Service; + +import java.util.List; +@Service +public class SupplierInfoService { + +} \ No newline at end of file diff --git a/external/src/main/java/com/yxt/external/biz/func/supplierinfo/SupplierInfoVo.java b/external/src/main/java/com/yxt/external/biz/func/supplierinfo/SupplierInfoVo.java new file mode 100644 index 0000000..bbf5010 --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/func/supplierinfo/SupplierInfoVo.java @@ -0,0 +1,67 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.yxt.external.biz.func.supplierinfo; + + +import com.yxt.common.core.vo.Vo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * Project: yxt-base(供应商管理)
+ * File: BaseSupplierInfoVo.java
+ * Class: com.yxt.base.api.basesupplierinfo.BaseSupplierInfoVo
+ * Description: 供应商信息 视图数据对象.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2024-03-18 13:33:13
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@Data +@ApiModel(value = "供应商信息 视图数据对象", description = "供应商信息 视图数据对象") +public class SupplierInfoVo implements Vo { + + private String sid; // sid + + @ApiModelProperty("供应商名称") + private String supplierName; + @ApiModelProperty("供应商类型") + private String supplierTypeName; + @ApiModelProperty("详细地址") + private String address; + @ApiModelProperty("电话") + private String contactTelePhone; + @ApiModelProperty("联系人") + private String contactName; + @ApiModelProperty("手机") + private String contactMobile; + private double taxRate; + private String remarks; +} diff --git a/external/src/main/java/com/yxt/external/biz/func/warehouseinfo/GoodsDetailsVo.java b/external/src/main/java/com/yxt/external/biz/func/warehouseinfo/GoodsDetailsVo.java new file mode 100644 index 0000000..9031b31 --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/func/warehouseinfo/GoodsDetailsVo.java @@ -0,0 +1,14 @@ +package com.yxt.external.biz.func.warehouseinfo; + +import lombok.Data; + +/** + * @author wangpengfei + * @date 2024/11/8 16:56 + */ +@Data +public class GoodsDetailsVo { + private String goodsDetail; + private String supplierName; + private String supplierType; +} diff --git a/external/src/main/java/com/yxt/external/biz/func/warehouseinfo/ProjectDetailsVo.java b/external/src/main/java/com/yxt/external/biz/func/warehouseinfo/ProjectDetailsVo.java new file mode 100644 index 0000000..b543a45 --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/func/warehouseinfo/ProjectDetailsVo.java @@ -0,0 +1,31 @@ +package com.yxt.external.biz.func.warehouseinfo; + +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author wangpengfei + * @date 2024/10/17 15:17 + */ +@Data +public class ProjectDetailsVo { + private String sid; + private String warehouseName;//仓库名称 + private String warehouseCode;//仓库编码 + private String contacts;//联系人 + private String mob;//手机 + private String telephone;//联系电话 + private String manager;//主管 + private String address;//地址 + private String lngAndLat;//经纬度 + private String longitude;//经度 + private String latitude;//纬度 + private String squareMeter;//平方米 + private String supplierName; + private String supplierType; + private String goodsDetail; + private List goodsDetails=new ArrayList<>(); + private String remarks; +} diff --git a/external/src/main/java/com/yxt/external/biz/func/warehouseinfo/WarehouseInfo.java b/external/src/main/java/com/yxt/external/biz/func/warehouseinfo/WarehouseInfo.java new file mode 100644 index 0000000..ca33ffc --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/func/warehouseinfo/WarehouseInfo.java @@ -0,0 +1,32 @@ +package com.yxt.external.biz.func.warehouseinfo; + +import com.yxt.common.core.domain.BaseEntity; +import lombok.Data; + +/** + * @author wangpengfei + * @date 2024/2/26 13:36 + */ +@Data +public class WarehouseInfo extends BaseEntity { + + private String warehouseName;//仓库名称 + private String warehouseCode;//仓库编码 + private String contacts;//联系人 + private String mob;//手机 + private String telephone;//联系电话 + private String manager;//主管 + private String areaSid;//地区sid + private String address;//地址 + private String belongingPlace;//归属地 + private String lngAndLat;//经纬度 + private String longitude;//经度 + private String latitude;//纬度 + private String warehouseTypeKey;//仓库类型Key + private String warehouseTypeValue;//仓库类型value + private Integer usageStatus;//使用状态,0停用 1正常 + private String squareMeter;//平方米 + private Integer sortNo;//排序 + private String useOrgSid;//创建组织sid + private String createOrgSid;//创建组织sid +} diff --git a/external/src/main/java/com/yxt/external/biz/func/warehouseinfo/WarehouseInfoMapQuery.java b/external/src/main/java/com/yxt/external/biz/func/warehouseinfo/WarehouseInfoMapQuery.java new file mode 100644 index 0000000..c5d8586 --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/func/warehouseinfo/WarehouseInfoMapQuery.java @@ -0,0 +1,24 @@ +package com.yxt.external.biz.func.warehouseinfo; + +import com.yxt.common.core.query.Query; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @author wangpengfei + * @date 2024/8/29 11:52 + */ +@Data +public class WarehouseInfoMapQuery implements Query { + private String name;//仓库名称 + @ApiModelProperty("组织sid") + private String orgPath; + private List sids; + private String warehouseName; + private String address; + private String warehouseCode; + private String belongingPlace; + private String endTime; +} diff --git a/external/src/main/java/com/yxt/external/biz/func/warehouseinfo/WarehouseInfoVo.java b/external/src/main/java/com/yxt/external/biz/func/warehouseinfo/WarehouseInfoVo.java new file mode 100644 index 0000000..cf09d6e --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/func/warehouseinfo/WarehouseInfoVo.java @@ -0,0 +1,49 @@ +package com.yxt.external.biz.func.warehouseinfo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.yxt.common.core.vo.Vo; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +/** + * @author wangpengfei + * @date 2024/2/26 13:37 + */ +@Data +public class WarehouseInfoVo implements Vo { + private String id; + private String sid; + private String lockVersion; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date modifyTime; + private String remarks; + private Integer isEnable; + private Integer state; + private Integer isDelete; + private String warehouseName;//仓库名称 + private String warehouseCode;//仓库编码 + private String contacts;//联系人 + private String mob;//手机 + private String telephone;//联系电话 + private String manager;//主管 + private String areaSid;//地区sid + private String address;//地址 + private String belongingPlace;//归属地 + private String lngAndLat;//经纬度 + private String longitude;//经度 + private String latitude;//纬度 + private String warehouseTypeKey;//仓库类型Key + private String warehouseTypeValue;//仓库类型value + private Integer usageStatus;//使用状态,0停用 1正常 + private String squareMeter;//平方米 + private Integer sortNo;//排序 + private String useOrgSid;//创建组织sid + private String createOrgSid;//创建组织sid + private String userSid; + private String orgPath; + private String gsd; +} diff --git a/external/src/main/java/com/yxt/external/biz/func/warehouseinfo/WarehouseInfoVoSheng.java b/external/src/main/java/com/yxt/external/biz/func/warehouseinfo/WarehouseInfoVoSheng.java new file mode 100644 index 0000000..036ccfc --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/func/warehouseinfo/WarehouseInfoVoSheng.java @@ -0,0 +1,16 @@ +package com.yxt.external.biz.func.warehouseinfo; + +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author wangpengfei + * @date 2024/9/12 14:08 + */ +@Data +public class WarehouseInfoVoSheng { + private String belongingPlace;//归属地 + List list=new ArrayList<>(); +} diff --git a/external/src/main/java/com/yxt/external/biz/package-info.java b/external/src/main/java/com/yxt/external/biz/package-info.java new file mode 100644 index 0000000..a54ce07 --- /dev/null +++ b/external/src/main/java/com/yxt/external/biz/package-info.java @@ -0,0 +1,4 @@ +/** + * 宇信通 仓库管理 项目后台逻辑和接口 + */ +package com.yxt.external.biz; \ No newline at end of file diff --git a/external/src/main/java/com/yxt/external/config/SaTokenConfigure.java b/external/src/main/java/com/yxt/external/config/SaTokenConfigure.java new file mode 100644 index 0000000..3881019 --- /dev/null +++ b/external/src/main/java/com/yxt/external/config/SaTokenConfigure.java @@ -0,0 +1,114 @@ +package com.yxt.external.config;//package com.yxt.wms.config; +// +//import cn.dev33.satoken.interceptor.SaInterceptor; +//import cn.dev33.satoken.stp.StpUtil; +//import org.springframework.beans.factory.annotation.Value; +//import org.springframework.context.annotation.Configuration; +//import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +//import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +// +///** +// * @author wangpengfei +// * @date 2023/5/16 14:43 +// */ +//@Configuration +//public class SaTokenConfigure implements WebMvcConfigurer { +// @Value("${image.url.prefix:http://127.0.0.1:8080/upload/}") +// private String urlPrefix; +// // 注册 Sa-Token 拦截器 +// @Override +// public void addInterceptors(InterceptorRegistry registry) { +// // 注册 Sa-Token 拦截器,校验规则为 StpUtil.checkLogin() 登录校验。 +// +// registry.addInterceptor(new SaInterceptor(handler -> StpUtil.checkLogin())) +// .addPathPatterns("/**") +// .excludePathPatterns("/sysuser/doLogin") +// .excludePathPatterns("/lpkgiftcard/gifCardByCustomerSid") +// .excludePathPatterns("/empcardgift/gifCardByCustomerSid") +// .excludePathPatterns("/empcard/getEmpCardByCustomerSid") +// .excludePathPatterns("/lpkgiftcard/getGifCardBySid/**") +// .excludePathPatterns("/empcardgift/getGifCardBySid/**") +// .excludePathPatterns("/empcard/getEmpCardBySid/**") +// .excludePathPatterns("/lpkgiftcard/isSaturAndSun/**") +// .excludePathPatterns("/empcardgift/isSaturAndSun/**") +// .excludePathPatterns("/empcard/isSaturAndSun/**") +// .excludePathPatterns("/lpkgiftcard/getReservationBySid/**") +// .excludePathPatterns("/lpksreservoorder/submission") +// .excludePathPatterns("/lpksreservoorder/exportExcelByStore") +// .excludePathPatterns("/empsreservoorder/createNewUserBagOrder") +// .excludePathPatterns("/lpksreservoorders/submission") +// .excludePathPatterns("/empsreservoorder/ordersList") +// .excludePathPatterns("/empsreservoorder/submission") +// .excludePathPatterns("/empsreservoorder/submissionEmp") +// .excludePathPatterns("/empcardgift/generateCard") +// .excludePathPatterns("/lpkgiftcard/bindCard") +// .excludePathPatterns("/empcard/bindCard") +// .excludePathPatterns("/lpksreservoorder/orderByCardSid/**") +// .excludePathPatterns("/lpksreservoorder/orderListByUserSid/**") +// .excludePathPatterns("/lpksreservoorder/orderDetails/**") +// .excludePathPatterns("/newcomerrecorecord/recommendNewUsers") +// .excludePathPatterns("/newcomerrecorecord/recommendedAssistance") +// .excludePathPatterns("/newcomerrecorecord/recordList/**") +// .excludePathPatterns("/transferrecords/transferRecordsList") +// .excludePathPatterns("/empsreservoorder/createVegeOrder") +// .excludePathPatterns("/empsreservoorder/OrderDetails/**") +// .excludePathPatterns("/empsreservoorder/changePayState/**") +// .excludePathPatterns("/lpkgoods/goodsDetails/**") +// .excludePathPatterns("/lpkstore/getAllStoreByQuery") +// .excludePathPatterns("/vegetablecellar/receiveTransferGoods") +// .excludePathPatterns("/transferrecords/submission") +// .excludePathPatterns("/lpkgiftcard/getCardByBank") +// .excludePathPatterns("/empcard/getEmpCard") +// .excludePathPatterns("/empcardgift/shareEmpCard/**") +// .excludePathPatterns("/empcardgift/generateEmpCardGift") +// .excludePathPatterns("/empcardgift/generateEmpCard") +// .excludePathPatterns("/lpkcustomer/wxSilentLogin") +// .excludePathPatterns("/lpkgiftcard/gifCardsByCustomerSid") +// .excludePathPatterns("/lpkgoods/getAllGiftBag") +// .excludePathPatterns("/appletgiftbag/getGiftBagBySid/**") +// .excludePathPatterns("/appletgiftbag/appletGiftBagList") +// .excludePathPatterns("/lpkgiftcard/cardShareDetail/**") +// .excludePathPatterns("/lpkgiftcard/cardShareGoodsDetail/**") +// .excludePathPatterns("/empcardgift/generateTopEmpCard/**") +// .excludePathPatterns("/empsreservoorder/createOrder") +// .excludePathPatterns("/appletgiftbag/recommendRecord/**") +// //2024-01-17 +// .excludePathPatterns("/lpkgiftcard/getAllGoodsType/**") +// .excludePathPatterns("/appletnotice/getNotice") +// .excludePathPatterns("/empsreservoorder/getPreOrder") +// .excludePathPatterns("/lpkgoods/getAllGoodsType/**") +// .excludePathPatterns("/transferrecords/submission") +// .excludePathPatterns("/vegetablecellar/receiveTransferGoods") +// .excludePathPatterns("/customerstore/isSaturAndSun") +// .excludePathPatterns("/lpkgiftcard/getGoodsByType/**") +// .excludePathPatterns("/lpkgoods/getGoodsTypeAndBrand") +// .excludePathPatterns("/lpkgoods/getGoodsByType") +// .excludePathPatterns("/lpksreservoorders/orderListByUserSid") +// .excludePathPatterns("/appletgiftbag/newUserQuota") +// .excludePathPatterns("/shoppingcart/addShoppingCart") +// .excludePathPatterns("/shoppingcart/getGoodsWeight") +// .excludePathPatterns("/shoppingcart/shoppingCartList") +// .excludePathPatterns("/shoppingcart/delShoppingCart/**") +// .excludePathPatterns("/lpkgoods/vegeCellarTypeList") +// .excludePathPatterns("/vegetablecellar/addGoods/**") +// .excludePathPatterns("/lpkgoods/vegeCellarList") +// .excludePathPatterns("/customerstore/getStoreBySid/**") +// .excludePathPatterns("/lpkgiftcard/bindAllCard") +// .excludePathPatterns("/lpkcustomer/customerInfo/**") +// .excludePathPatterns("/vegetablecellar/saveGoods") +// .excludePathPatterns("/transferrecords/getTransferByCode/**") +// //2024-01-18 +// .excludePathPatterns("/lpkcustomer/getCustomerInfo/**") +// .excludePathPatterns("/lpkcustomer/modifyUserNickName") +// .excludePathPatterns("/lpkcustomer/modifyHeadImage") +// .excludePathPatterns("/upload/**") +// .excludePathPatterns("/lpkcustomer/getPhoneNumber") +// .excludePathPatterns("/lpkcustomer/getRealInfo/**") +// .excludePathPatterns("/lpkcustomer/saveRealInfo") +// .excludePathPatterns("/pms/PmsBrand/getList") +// .excludePathPatterns("/LpkCustomerBank/getBankList") +// .excludePathPatterns("/lpkcustomer/updateCustomerBank") +// .excludePathPatterns("//wxapi/**") +// ; +// } +//} diff --git a/external/src/main/java/com/yxt/external/config/SaTokenGloableException.java b/external/src/main/java/com/yxt/external/config/SaTokenGloableException.java new file mode 100644 index 0000000..8e25041 --- /dev/null +++ b/external/src/main/java/com/yxt/external/config/SaTokenGloableException.java @@ -0,0 +1,67 @@ +package com.yxt.external.config; + +import com.yxt.common.base.config.handler.GlobalExceptionHandler; +import com.yxt.common.core.result.ResultBean; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.validation.BindException; +import org.springframework.validation.ObjectError; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.servlet.NoHandlerFoundException; + +/** + * @author dimengzhe + * @date 2020/9/12 3:23 + * @description 全局异常处理 + */ +@RestControllerAdvice +public class SaTokenGloableException extends GlobalExceptionHandler { + + private static final Logger L = LoggerFactory.getLogger(GlobalExceptionHandler.class); + + public SaTokenGloableException() { + } + @ExceptionHandler({Exception.class}) + public ResultBean handleException(Exception e) { + if(null !=e.getMessage()){ + if(e.getMessage().contains("token 无效:")){ + L.error(e.getMessage(), e); + return ResultBean.fireFail().setCode("5000").setMsg("系统异常::" + e.getMessage()); + } + if(e.getMessage().contains("未能读取到有效 token")){ +// L.error(e.getMessage(), e); + return ResultBean.fireFail().setMsg("系统异常::" + e.getMessage()); + } + } + + L.error(e.getMessage(), e); + return ResultBean.fireFail().setMsg("系统异常::" + e.getMessage()); + } + @ExceptionHandler({NoHandlerFoundException.class}) + public ResultBean handlerNoFoundException(Exception e) { + L.error(e.getMessage(), e); + return ResultBean.fireFail().setCode("404").setMsg("路径不存在,请检查路径是否正确"); + } + +// @ExceptionHandler({Exception.class}) +// public ResultBean handleException(Exception e) { +// L.error(e.getMessage(), e); +// return ResultBean.fireFail().setMsg("系统异常::" + e.getMessage()); +// } + + @ExceptionHandler({BindException.class}) + public ResultBean validatedBindException(BindException e) { + L.error(e.getMessage(), e); + String message = ((ObjectError)e.getAllErrors().get(0)).getDefaultMessage(); + return ResultBean.fireFail().setCode("405").setMsg(message); + } + + @ExceptionHandler({MethodArgumentNotValidException.class}) + public ResultBean validExceptionHandler(MethodArgumentNotValidException e) { + L.error(e.getMessage(), e); + String message = e.getBindingResult().getFieldError().getDefaultMessage(); + return ResultBean.fireFail().setCode("405").setMsg(message); + } +} diff --git a/external/src/main/java/com/yxt/external/config/Swagger2Configuration.java b/external/src/main/java/com/yxt/external/config/Swagger2Configuration.java new file mode 100644 index 0000000..1b61ed7 --- /dev/null +++ b/external/src/main/java/com/yxt/external/config/Swagger2Configuration.java @@ -0,0 +1,42 @@ +package com.yxt.external.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +/** + * @author wangpengfei + * @date 2024/7/1 15:48 + */ + +@Configuration +@EnableSwagger2 +public class Swagger2Configuration { + @Bean + public Docket createRestApi(){ + return new Docket(DocumentationType.SWAGGER_2) + .apiInfo(apiInfo()) + .select() +// .apis(RequestHandlerSelectors.withClassAnnotation(Api.class)) + .apis(RequestHandlerSelectors.basePackage("com.yxt.wms.apiadmin.aggregation")) + .paths(PathSelectors.any()) + .build(); + } + + //基本信息的配置,信息会在api文档上显示 + private ApiInfo apiInfo(){ + return new ApiInfoBuilder() + .title("zg测试的接口文档") + .description("xx相关接口的文档") + .termsOfServiceUrl("http://localhost:8080/hello") + .version("1.0") + .build(); + } + +} diff --git a/external/src/main/java/com/yxt/external/config/package-info.java b/external/src/main/java/com/yxt/external/config/package-info.java new file mode 100644 index 0000000..7c7dbe8 --- /dev/null +++ b/external/src/main/java/com/yxt/external/config/package-info.java @@ -0,0 +1,4 @@ +/** + * 宇信通监管项目-光伏(山海新能源)项目后台逻辑和接口-接口声明 + */ +package com.yxt.external.config; \ No newline at end of file diff --git a/external/src/main/java/com/yxt/external/externalApplication.java b/external/src/main/java/com/yxt/external/externalApplication.java new file mode 100644 index 0000000..3dedf53 --- /dev/null +++ b/external/src/main/java/com/yxt/external/externalApplication.java @@ -0,0 +1,24 @@ +package com.yxt.external; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.scheduling.annotation.EnableScheduling; + +/** + * @author wangpengfei + * @date ${DATE} ${TIME} + */ +@SpringBootApplication(scanBasePackages = { + "com.yxt.common.base.config", + "com.yxt.external" +}) +@EnableDiscoveryClient +@EnableScheduling +@EnableFeignClients +public class externalApplication { + public static void main(String[] args) { + SpringApplication.run(externalApplication.class, args); + } +} \ No newline at end of file diff --git a/external/src/main/java/com/yxt/external/feign/crmcustomer/CrmCustomerFeign.java b/external/src/main/java/com/yxt/external/feign/crmcustomer/CrmCustomerFeign.java new file mode 100644 index 0000000..4dbb34c --- /dev/null +++ b/external/src/main/java/com/yxt/external/feign/crmcustomer/CrmCustomerFeign.java @@ -0,0 +1,24 @@ +package com.yxt.external.feign.crmcustomer; + +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +@FeignClient( + contextId = "ss-common-purchase-CrmCustomer", + name = "ss-common-customer", + path = "v1/crmcustomertemp") +public interface CrmCustomerFeign { + @ApiOperation("根据orgSid查询客户数量") + @GetMapping("/getCustomerByOrgSid") + public ResultBean getCustomerByOrgSid(@RequestParam("orgSid") String orgSid); + @ApiOperation("根据条件分页查询数据的列表") + @PostMapping("/listPage1") + public ResultBean> listPage1(@RequestBody PagerQuery pq); +} \ No newline at end of file diff --git a/external/src/main/java/com/yxt/external/feign/crmcustomer/CrmCustomerTempQuery.java b/external/src/main/java/com/yxt/external/feign/crmcustomer/CrmCustomerTempQuery.java new file mode 100644 index 0000000..3638a6d --- /dev/null +++ b/external/src/main/java/com/yxt/external/feign/crmcustomer/CrmCustomerTempQuery.java @@ -0,0 +1,76 @@ +package com.yxt.external.feign.crmcustomer; + + +import com.yxt.common.core.query.Query; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * Project: anrui-crm(客户管理)
+ * File: CrmCustomerTempQuery.java
+ * Class: com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTempQuery
+ * Description: 潜在客户信息 查询条件.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2022-01-12 11:21:16
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@ApiModel(value = "潜在客户信息 查询条件", description = "潜在客户信息 查询条件") +@Data +public class CrmCustomerTempQuery implements Query { + + @ApiModelProperty(value = "组织全路径") + private String orgSidPath; + + @ApiModelProperty("客户类型key(自然人/法人)") + private String customerTypeKey; + + @ApiModelProperty("客户级别(意向客户/准客户/成交客户/集团内销/黑名单客户)") + private String levelKey; + + @ApiModelProperty("客户名称") + private String name; + + @ApiModelProperty("联系电话") + private String mobile; + + @ApiModelProperty("提醒开始日期") + private String remindStartDay; + + @ApiModelProperty("提醒结束日期") + private String remindEndDay; + + @ApiModelProperty("业务员sid") + private String staffSid; + + + + @ApiModelProperty("客户sid") + private List customerSidList; + + @ApiModelProperty("创建开始日期") + private String createStartDate; + + @ApiModelProperty("创建结束日期") + private String createEndDate; + + @ApiModelProperty("销售专员") + private String staffName; + private String useOrgSid; + + private String orgLevelKey;//权限等级 + @ApiModelProperty("菜单路由") + private String menuUrl; + @ApiModelProperty("组织全路径sid") + private String orgPath; + @ApiModelProperty("用户sid") + private String userSid; + private int index; + private String customerName; +} diff --git a/external/src/main/java/com/yxt/external/feign/crmcustomer/CrmCustomerTempVo.java b/external/src/main/java/com/yxt/external/feign/crmcustomer/CrmCustomerTempVo.java new file mode 100644 index 0000000..6b624b5 --- /dev/null +++ b/external/src/main/java/com/yxt/external/feign/crmcustomer/CrmCustomerTempVo.java @@ -0,0 +1,192 @@ +package com.yxt.external.feign.crmcustomer; + + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.yxt.common.core.vo.Vo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * Project: anrui-crm(客户管理)
+ * File: CrmCustomerTempVo.java
+ * Class: com.yxt.anrui.crm.api.crmcustomertemp.CrmCustomerTempVo
+ * Description: 潜在客户信息 视图数据对象.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2022-01-12 11:21:16
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@ApiModel(value = "潜在客户信息 视图数据对象", description = "潜在客户信息 视图数据对象") +@Data +public class CrmCustomerTempVo implements Vo { + + @ApiModelProperty("潜在客户sid") + private String sid; + + @ApiModelProperty("分公司名称") + private String createOrgName; + + @ApiModelProperty("业务员名称") + private String staffName; + + @ApiModelProperty("部门名称") + private String deptName; + + @ApiModelProperty("创建人sid") + private String createBySid; + + @ApiModelProperty("登记日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date createTime; + + @ApiModelProperty("客户编号(部门编码+客户类型(1位,0个人,1企业)+部门内部流水号(6位))") + private String customerNo; + + @ApiModelProperty("客户类型(自然人/法人)") + private String customerType; + + @ApiModelProperty("客户类型key") + private String customerTypeKey; + + @ApiModelProperty("客户分类(个人:司机/个体老板/其他。企业:企业型客户/一级经销商/二级经销商/终端物流客户)") + private String customerClass; + + @ApiModelProperty("客户分类key") + private String customerClassKey; + + @ApiModelProperty("客户来源(公司资源/自主开发/交接客户/转介绍客户/集团内销)") + private String source; + + @ApiModelProperty("客户来源key") + private String sourceKey; + + @ApiModelProperty("客户级别(意向客户/准客户/成交客户/集团内销/黑名单客户)") + private String level; + + @ApiModelProperty("客户级别key") + private String levelKey; + + @ApiModelProperty("客户名称") + private String name; + + @ApiModelProperty("证件类型key") + private String certificateTypeKey; + + @ApiModelProperty("证件类型(个人为身份证/企业为营业执照)") + private String certificateType; + + @ApiModelProperty("证件号码(个人为身份证号/企业为统一社会信用代码)") + private String IDNumber; + + @ApiModelProperty("证件有效期") + private String endDate; + + @ApiModelProperty("行政区划代码(省)") + private String address_province; + + @ApiModelProperty("行政区划代码(市)") + private String address_city; + + @ApiModelProperty("行政区划代码(县)") + private String address_county; + + @ApiModelProperty("省") + private String province; + + @ApiModelProperty("市") + private String city; + + @ApiModelProperty("县") + private String county; + + @ApiModelProperty("客户地址") + private String address; + + @ApiModelProperty("邮编") + private String zipCode; + + @ApiModelProperty("电子邮箱") + private String e_mail; + + @ApiModelProperty("联系人") + private String contacts; + + @ApiModelProperty("联系电话") + private String mobile; + + @ApiModelProperty("紧急联系电话") + private String emergencyContact; + + @ApiModelProperty("紧急联系电话") + private String emergencyMobile; + + @ApiModelProperty("微信号码") + private String weixin; + + @ApiModelProperty("业务人员sid") + private String staffSid; + + @ApiModelProperty("创建组织sid") + private String createOrgSid; + + @ApiModelProperty("性别") + private String sex; + + @ApiModelProperty("性别key") + private String sexKey; + + @ApiModelProperty("客户生日") + private String birthday; + + @ApiModelProperty("所在公司名称") + private String companyName; + + @ApiModelProperty("跟进状态key") + private String follow_state_key; + + @ApiModelProperty("跟进状态") + private String follow_state; + + @ApiModelProperty("是否开启提醒key(1开启,0不开启)") + private String isOnRemindkey; + + @ApiModelProperty("是否开启提醒(1开启,0不开启)") + private String isOnRemind; + + @ApiModelProperty("提醒日期") + private String remind_day; + + @ApiModelProperty("提醒备注") + private String remind_remark; + + @ApiModelProperty("客户头像") + private String customerPhoto; + + @ApiModelProperty("见面方式key") + private String visitWayKey; + + @ApiModelProperty("见面方式(到店/电话/拜访)") + private String visitWay; + + @ApiModelProperty("备注") + private String remarks; + + @ApiModelProperty("意向车型数量") + private String yxcounts; + + @ApiModelProperty("跟进记录数量") + private String gjcounts; + + + + private String useOrgSid; + private String customerOrgSid; + private String customerOrgName; + +} diff --git a/external/src/main/java/com/yxt/external/feign/package-info.java b/external/src/main/java/com/yxt/external/feign/package-info.java new file mode 100644 index 0000000..2e3320c --- /dev/null +++ b/external/src/main/java/com/yxt/external/feign/package-info.java @@ -0,0 +1,4 @@ +/** + * 宇信通监管项目-光伏(山海新能源)项目后台逻辑和接口-接口声明 + */ +package com.yxt.external.feign; \ No newline at end of file diff --git a/external/src/main/java/com/yxt/external/feign/purchase/PurchaseBillFeign.java b/external/src/main/java/com/yxt/external/feign/purchase/PurchaseBillFeign.java new file mode 100644 index 0000000..c9b2c29 --- /dev/null +++ b/external/src/main/java/com/yxt/external/feign/purchase/PurchaseBillFeign.java @@ -0,0 +1,23 @@ +package com.yxt.external.feign.purchase; + +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo; +import com.yxt.external.biz.func.purchase.PurchaseBillDto; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.*; + +@FeignClient( + contextId = "ss-common-purchase-PurchaseBill", + name = "ss-common-purchase", + path = "/apiadmin/purchasebill") +public interface PurchaseBillFeign { + @ApiOperation("新增采购单") + @PostMapping("/savePurchase") + public ResultBean savePurchase(@RequestBody PurchaseBillDto dto); + + @ApiOperation("根据条件分页查询数据的列表") + @PostMapping("/listPage") + public ResultBean> listPage(@RequestBody PagerQuery pq); +} \ No newline at end of file diff --git a/external/src/main/java/com/yxt/external/feign/purchase/PurchaseBillQuery.java b/external/src/main/java/com/yxt/external/feign/purchase/PurchaseBillQuery.java new file mode 100644 index 0000000..9679334 --- /dev/null +++ b/external/src/main/java/com/yxt/external/feign/purchase/PurchaseBillQuery.java @@ -0,0 +1,71 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.yxt.external.feign.purchase; + +import com.yxt.common.core.query.Query; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "采购单 查询条件", description = "采购单 查询条件") +public class PurchaseBillQuery implements Query { + + @ApiModelProperty("创建开始日期") + private String createStartTime; + @ApiModelProperty("创建结束日期") + private String createEndTime; + @ApiModelProperty("供应商名称") + private String supplierSid; + @ApiModelProperty("仓库名称") + private String wareHouseSid; + @ApiModelProperty("收货状态key") + private String receiveStateKey; + @ApiModelProperty("物流单号") + private String logisticsNum; + @ApiModelProperty("单据编号") + private String billNo; + @ApiModelProperty("采购员") + private String purchaserName; + @ApiModelProperty("备注") + private String remarks; + @ApiModelProperty("发货状态key") + private String deliveryStateKey; + @ApiModelProperty("商品sid") + private String goodsSid; + + private String orgLevelKey;//权限等级 + @ApiModelProperty("菜单路由") + private String menuUrl; + @ApiModelProperty("组织全路径sid") + private String orgPath; + @ApiModelProperty("用户sid") + private String userSid; + private int index; + + @ApiModelProperty("审核状态key") + private String examineStateKey; +} diff --git a/external/src/main/java/com/yxt/external/feign/purchase/PurchaseBillVo.java b/external/src/main/java/com/yxt/external/feign/purchase/PurchaseBillVo.java new file mode 100644 index 0000000..691e17c --- /dev/null +++ b/external/src/main/java/com/yxt/external/feign/purchase/PurchaseBillVo.java @@ -0,0 +1,91 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.yxt.external.feign.purchase; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.yxt.common.core.vo.Vo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +@ApiModel(value = "采购单 视图数据对象", description = "采购单 视图数据对象") +public class PurchaseBillVo implements Vo { + + private String sid; // sid + + @ApiModelProperty("审核状态") + private String state; + @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + @ApiModelProperty("业务日期") + private Date createTime; + @ApiModelProperty("单据编号") + private String billNo; + @ApiModelProperty("供应商名称") + private String supplierName; + @ApiModelProperty("采购员姓名") + private String purchaserName; + @ApiModelProperty("仓库名称") + private String wareHouseName; + @ApiModelProperty("收货状态value") + private String receiveStateValue; + @ApiModelProperty("商品总额") + private String amountTotal; + @ApiModelProperty("采购运费") + private BigDecimal freight; + @ApiModelProperty("其它费用") + private BigDecimal otherAmount; + @ApiModelProperty("预付金额") + private BigDecimal prepayment; + @ApiModelProperty("总税额") + private BigDecimal taxAmount; + @ApiModelProperty("物流单号") + private String logisticsNum; + @ApiModelProperty("生产进度") + private String productProgress; + @ApiModelProperty("未含税总价(未含税价*采购数量)") + private BigDecimal unTaxTotalAmount; + @ApiModelProperty("总采购数量") + private String countTotal; + @ApiModelProperty("已入库数量") + private BigDecimal enterWareCount; + @ApiModelProperty("已入库金额") + private BigDecimal enterWareAmount; + @ApiModelProperty("已发货数量") + private BigDecimal deliveryCount; + @ApiModelProperty("发货状态value") + private String deliveryStateValue; + @ApiModelProperty("备注") + private String remarks; + @ApiModelProperty("制单人姓名") + private String createByName; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + @ApiModelProperty("最后修改时间") + private Date modifyTime; +} diff --git a/external/src/main/java/com/yxt/external/feign/sales/smssalesbill/SmsSalesBillFeign.java b/external/src/main/java/com/yxt/external/feign/sales/smssalesbill/SmsSalesBillFeign.java new file mode 100644 index 0000000..6c9d7e9 --- /dev/null +++ b/external/src/main/java/com/yxt/external/feign/sales/smssalesbill/SmsSalesBillFeign.java @@ -0,0 +1,27 @@ +package com.yxt.external.feign.sales.smssalesbill; + +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo; +import com.yxt.external.biz.func.smssalesbill.SmsSalesBillDto; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @description: + * @author: fzz + * @date: 2024/7/4 + **/ +@FeignClient( + contextId = "ss-common-sales-SmsSalesBill", + name = "ss-common-sales", + path = "/v1/smssalesbill") +public interface SmsSalesBillFeign { + + @ApiOperation("新增销售单(对外)") + @PostMapping("/saveSales") + public ResultBean saveSales(@RequestBody SmsSalesBillDto dto); +} diff --git a/external/src/main/java/com/yxt/external/feign/supplier/supplierinfo/SupplierInfoFeign.java b/external/src/main/java/com/yxt/external/feign/supplier/supplierinfo/SupplierInfoFeign.java new file mode 100644 index 0000000..b04ff50 --- /dev/null +++ b/external/src/main/java/com/yxt/external/feign/supplier/supplierinfo/SupplierInfoFeign.java @@ -0,0 +1,43 @@ +package com.yxt.external.feign.supplier.supplierinfo; + +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo; +import com.yxt.external.biz.func.supplierinfo.SupplierInfoChoice; +import com.yxt.external.biz.func.supplierinfo.SupplierInfoDetailsVo; +import com.yxt.external.biz.func.supplierinfo.SupplierInfoQuery; +import com.yxt.external.biz.func.supplierinfo.SupplierInfoVo; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * Project: anrui_portal(门户建设)
+ * File: SysRoleFeign.java
+ * Class: com.yxt.anrui.portal.api.sysrole.SysRoleFeign
+ * Description: 角色.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2021-08-03 00:24:29
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@FeignClient( + contextId = "ss-common-supplier-SupplierInfo", + name = "ss-common-supplier", + path = "/apiadmin/supplierinfo") +public interface SupplierInfoFeign { + @ApiOperation("供应商数量") + @GetMapping("/getSupplierCountByOrgSid") + public ResultBean getSupplierCountByOrgSid(@RequestParam("orgSid") String orgSid); + @ApiOperation("根据SID获取一条记录") + @GetMapping("/fetchDetailsBySid/{sid}") + public ResultBean fetchDetailsBySid(@PathVariable("sid") String sid); + @ApiOperation("根据条件分页查询数据的列表") + @PostMapping("/listPage1") + public ResultBean> listPage1(@RequestBody PagerQuery pq); +} \ No newline at end of file diff --git a/external/src/main/java/com/yxt/external/feign/supplier/supplierinfo/SupplierInfoFeignFallback.java b/external/src/main/java/com/yxt/external/feign/supplier/supplierinfo/SupplierInfoFeignFallback.java new file mode 100644 index 0000000..b04b90d --- /dev/null +++ b/external/src/main/java/com/yxt/external/feign/supplier/supplierinfo/SupplierInfoFeignFallback.java @@ -0,0 +1,45 @@ +package com.yxt.external.feign.supplier.supplierinfo; + +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo; +import com.yxt.external.biz.func.supplierinfo.SupplierInfoChoice; +import com.yxt.external.biz.func.supplierinfo.SupplierInfoDetailsVo; +import com.yxt.external.biz.func.supplierinfo.SupplierInfoQuery; +import com.yxt.external.biz.func.supplierinfo.SupplierInfoVo; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * Project: anrui_portal(门户建设)
+ * File: SysRoleFeignFallback.java
+ * Class: com.yxt.anrui.portal.api.sysrole.SysRoleFeignFallback
+ * Description: 角色.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2021-08-03 00:24:29
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +@Component +public class SupplierInfoFeignFallback implements SupplierInfoFeign { + + + @Override + public ResultBean> getSupplierCountByOrgSid(String useOrgSid) { + return null; + } + + @Override + public ResultBean fetchDetailsBySid(String sid) { + return null; + } + + @Override + public ResultBean> listPage1(PagerQuery pq) { + return null; + } +} \ No newline at end of file diff --git a/external/src/main/java/com/yxt/external/feign/warehouse/purchaseinventorybill/PurchaseInventoryBillFeign.java b/external/src/main/java/com/yxt/external/feign/warehouse/purchaseinventorybill/PurchaseInventoryBillFeign.java new file mode 100644 index 0000000..3e51e19 --- /dev/null +++ b/external/src/main/java/com/yxt/external/feign/warehouse/purchaseinventorybill/PurchaseInventoryBillFeign.java @@ -0,0 +1,23 @@ +package com.yxt.external.feign.warehouse.purchaseinventorybill; + +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo; +import com.yxt.external.biz.func.purchaseinventorybill.PurchaseInventoryBillDto3; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.*; + +@Api(tags = "预期到货通知单") +@FeignClient( + contextId = "ss-common-warehouse-PurchaseInventoryBill", + name = "ss-common-warehouse", + path = "/apiadmin/purchaseinventorybill") +public interface PurchaseInventoryBillFeign { + + @ApiOperation("确认(对外)") + @PostMapping("/confirmByBill") + ResultBean confirmByBill(@RequestBody PurchaseInventoryBillDto3 dto); + +} \ No newline at end of file diff --git a/external/src/main/java/com/yxt/external/feign/warehouse/warehouseinfo/WarehouseInfoFeign.java b/external/src/main/java/com/yxt/external/feign/warehouse/warehouseinfo/WarehouseInfoFeign.java new file mode 100644 index 0000000..35f038c --- /dev/null +++ b/external/src/main/java/com/yxt/external/feign/warehouse/warehouseinfo/WarehouseInfoFeign.java @@ -0,0 +1,33 @@ +package com.yxt.external.feign.warehouse.warehouseinfo; + +import com.yxt.common.core.query.PagerQuery; +import com.yxt.common.core.result.ResultBean; +import com.yxt.common.core.vo.PagerVo; +import com.yxt.external.biz.func.warehouseinfo.*; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@Api(tags = "仓库信息") +@FeignClient( + contextId = "ss-common-warehouse-WarehouseInfo", + name = "ss-common-warehouse", + path = "/apiadmin/warehouseinfo") +public interface WarehouseInfoFeign { + + @PostMapping("/list") + public ResultBean> list(@RequestBody WarehouseInfoMapQuery query); + @GetMapping("/getWarehouseBySid/{sid}") + public ResultBean getWarehouseBySid(@PathVariable("sid") String sid); + @ApiOperation("初始化") + @GetMapping("/initialization/{sid}") + public ResultBean initialization(@PathVariable("sid") String sid); + @ApiOperation("统计各省仓库") + @GetMapping("/getWarehouseCountByOrgSid") + public ResultBean> getWarehouseCountByOrgSid(@RequestParam("orgSid") String orgSid); + @PostMapping("/listPageN") + public ResultBean> listPageN(@RequestBody PagerQuery query); +} \ No newline at end of file diff --git a/external/src/main/java/com/yxt/external/utils/DoubleUtils.java b/external/src/main/java/com/yxt/external/utils/DoubleUtils.java new file mode 100644 index 0000000..059c331 --- /dev/null +++ b/external/src/main/java/com/yxt/external/utils/DoubleUtils.java @@ -0,0 +1,93 @@ +package com.yxt.external.utils; + +import java.math.BigDecimal; + +/** + * @author wangpengfei + * @date 2024/1/24 8:53 + */ +public class DoubleUtils { + + /** + * 对double数据进行取精度. + * @param value double数据. + * @param scale 精度位数(保留的小数位数). + * @param roundingMode 精度取值方式. + * @return 精度计算后的数据. + */ + public static double round(double value, int scale, + int roundingMode) { + BigDecimal bd = BigDecimal.valueOf(value); + bd = bd.setScale(scale, roundingMode); + double d = bd.doubleValue(); + bd = null; + return d; + } + + + /** + * double 相加 + * @param d1 + * @param d2 + * @return + */ + public static double sum(double d1,double d2){ + BigDecimal bd1 = BigDecimal.valueOf(d1); + BigDecimal bd2 = BigDecimal.valueOf(d2); + return bd1.add(bd2).doubleValue(); + } + + + /** + * double 相减 + * @param d1 + * @param d2 + * @return + */ + public static double sub(double d1,double d2){ + BigDecimal bd1 = BigDecimal.valueOf(d1); + BigDecimal bd2 = BigDecimal.valueOf(d2); + return bd1.subtract(bd2).doubleValue(); + } + + /** + * double 乘法 + * @param d1 + * @param d2 + * @return + */ + public static double mul(double d1, double d2){ + BigDecimal bd1 = BigDecimal.valueOf(d1); + BigDecimal bd2 = BigDecimal.valueOf(d2); + return bd1.multiply(bd2).doubleValue(); + } + + + /** + * double 除法 + * @param d1 + * @param d2 + * @param scale 四舍五入 小数点位数 + * @return + */ + public static double div(double d1,double d2,int scale){ + BigDecimal bd1 = BigDecimal.valueOf(d1); + BigDecimal bd2 = BigDecimal.valueOf(d2); + return bd1.divide + (bd2,scale,BigDecimal.ROUND_HALF_UP).doubleValue(); + } + /** + * 去除多余.0 + * @param num + * @return + */ + public static String removeZeros(String num) { + if (num.indexOf(".") > 0) { + // 去掉多余的0 + num = num.replaceAll("0+?$", ""); + // 如果最后一位是. 则去掉 + num = num.replaceAll("[.]$", ""); + } + return num; + } +} diff --git a/external/src/main/java/com/yxt/external/utils/ExcelUtil.java b/external/src/main/java/com/yxt/external/utils/ExcelUtil.java new file mode 100644 index 0000000..e8b7e96 --- /dev/null +++ b/external/src/main/java/com/yxt/external/utils/ExcelUtil.java @@ -0,0 +1,171 @@ +package com.yxt.external.utils; + + +//import org.apache.log4j.Logger; +import com.yxt.common.core.result.ResultBean; +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.springframework.web.multipart.MultipartFile; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +import static org.apache.poi.ss.usermodel.CellType.NUMERIC; +import static org.apache.poi.ss.usermodel.CellType.STRING; + + +/** + * @author wangpengfei + * @date 2024/4/23 13:53 + */ +public class ExcelUtil { +// private static Logger logger = Logger.getLogger(ExcelUtil.class); + private final static String xls = "xls"; + private final static String xlsx = "xlsx"; + + /** + * 读入excel文件,解析后返回 + * + * @param file + * @throws IOException + */ + public static List readExcel(MultipartFile file) throws IOException { + //检查文件 + checkFile(file); + //获得Workbook工作薄对象 + Workbook workbook = getWorkBook(file); + //创建返回对象,把每行中的值作为一个数组,所有行作为一个集合返回 + List list = new ArrayList(); + if (workbook != null) { + for (int sheetNum = 0; sheetNum < workbook.getNumberOfSheets(); sheetNum++) { + //获得当前sheet工作表 + Sheet sheet = workbook.getSheetAt(sheetNum); + if (sheet == null) { + continue; + } + //获得当前sheet的开始行 + int firstRowNum = sheet.getFirstRowNum(); + //获得当前sheet的结束行 + int lastRowNum = sheet.getLastRowNum(); + int arrLength = sheet.getRow(firstRowNum).getPhysicalNumberOfCells(); + int rowNumb=firstRowNum + 1; + //循环除了第一行的所有行 + for (int rowNum = rowNumb; rowNum <= lastRowNum; rowNum++) { + //获得当前行 + Row row = sheet.getRow(rowNum); + if (row == null) { + continue; + } + //获得当前行的开始列 + int firstCellNum = row.getFirstCellNum(); + //获得当前行的列数 + int lastCellNum = row.getPhysicalNumberOfCells(); + String[] cells = new String[arrLength]; + //循环当前行 + for(int i =0 ;i + + + + com.yxt + yxt-parent + 0.0.1 + + + 4.0.0 + + ss-gateway-api + ss-gateway-api + 0.0.1 + + + + org.springframework.cloud + spring-cloud-starter-gateway + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + org.projectlombok + lombok + 1.18.24 + true + + + org.springframework + spring-webmvc + + + + org.springframework.boot + spring-boot-starter-data-redis + + + io.lettuce + lettuce-core + + + + + redis.clients + jedis + + + + com.squareup.okhttp3 + okhttp + 4.11.0 + + + io.jsonwebtoken + jjwt + 0.9.0 + + + org.apache.commons + commons-lang3 + + + + com.alibaba + fastjson + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + 2.5.6 + + + + repackage + + + + + + + + src/main/java + + **/*Mapper.xml + + + + src/main/resources + + **/*.* + + false + + + + + diff --git a/externalgateway/src/main/java/com/yxt/external/AuthFilter.java b/externalgateway/src/main/java/com/yxt/external/AuthFilter.java new file mode 100644 index 0000000..513dc73 --- /dev/null +++ b/externalgateway/src/main/java/com/yxt/external/AuthFilter.java @@ -0,0 +1,173 @@ +package com.yxt.external; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.yxt.external.authutils.CacheConstants; +import com.yxt.external.authutils.IgnoreWhiteProperties; +import com.yxt.external.authutils.StringUtils; +import com.yxt.external.utils.ResultBean; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.gateway.filter.GatewayFilterChain; +import org.springframework.cloud.gateway.filter.GlobalFilter; +import org.springframework.core.Ordered; +import org.springframework.core.io.buffer.DataBuffer; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.nio.CharBuffer; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.Map; + +/** + * @author dimengzhe + * @description 网关鉴权 + */ +@Component +public class AuthFilter implements GlobalFilter, Ordered { + + private static final Logger log = LoggerFactory.getLogger(AuthFilter.class); + + @Autowired + private IgnoreWhiteProperties ignoreWhite; + + @Autowired + private Signature signature; + + @Override + public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { + String url = exchange.getRequest().getURI().getPath(); + // 1. URI 白名单过滤:如果请求路径在白名单中,直接放行 + if (isWhitelisted(url)) { + return chain.filter(exchange); + } + + // 2. 提取请求参数并进行验证 + return extractParameters(exchange) + .flatMap(parameters -> { + // 校验请求参数 + ResultBean validationResult = signature.validate(parameters); + // 校验失败,返回 401 Unauthorized 错误响应 + if (!validationResult.getSuccess()) { + return setUnauthorizedResponse(exchange, validationResult.getMsg()); + } + + // 3. 如果需要,可以从参数中提取信息并添加到请求头 + ServerHttpRequest mutableReq = exchange.getRequest().mutate() + .header(CacheConstants._APP, parameters.get("_app")) + .build(); + ServerWebExchange mutableExchange = exchange.mutate().request(mutableReq).build(); + // 4. 继续执行后续过滤器链 + return chain.filter(mutableExchange); + }); + } + + // 提取请求参数方法:根据请求类型 (GET 或 POST) 提取参数 + private Mono> extractParameters(ServerWebExchange exchange) { + HttpMethod method = exchange.getRequest().getMethod(); + // 1. 如果是 GET 请求,从 URL 查询参数中提取 + if (method == HttpMethod.GET) { + return Mono.just(exchange.getRequest().getQueryParams().toSingleValueMap()); + } + // 如果是 POST、PUT 或 DELETE 请求,从请求体中提取参数 + if (exchange.getRequest().getMethod() == HttpMethod.POST || + exchange.getRequest().getMethod() == HttpMethod.PUT || + exchange.getRequest().getMethod() == HttpMethod.DELETE) { + + String contentType = exchange.getRequest().getHeaders().getContentType().toString(); + if (contentType.contains("application/json")) { + return exchange.getRequest().getBody() + .collectList() + .map(dataBuffers -> { + // 将 DataBuffer 转换为字符串 + StringBuilder bodyBuilder = new StringBuilder(); + dataBuffers.forEach(dataBuffer -> { + CharBuffer charBuffer = StandardCharsets.UTF_8.decode(dataBuffer.asByteBuffer()); + bodyBuilder.append(charBuffer); + }); + + // 解析 JSON 请求体 + try { + return parseJsonBody(bodyBuilder.toString()); + } catch (IOException e) { + e.printStackTrace(); + } + return new HashMap(); // 如果解析失败,返回空 Map + }); + } else if (contentType.contains("application/x-www-form-urlencoded")) { + // 处理 x-www-form-urlencoded 格式 + return exchange.getRequest().getBody() + .collectList() + .map(dataBuffers -> { + StringBuilder bodyBuilder = new StringBuilder(); + dataBuffers.forEach(dataBuffer -> { + CharBuffer charBuffer = StandardCharsets.UTF_8.decode(dataBuffer.asByteBuffer()); + bodyBuilder.append(charBuffer); + }); + try { + return parseFormBody(bodyBuilder.toString()); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + return new HashMap(); + }); + } + } + + // 其他情况返回空 Map + return Mono.just(new HashMap<>()); + } + + //解析 JSON 请求体的方法 + private Map parseJsonBody(String body) throws IOException { + ObjectMapper objectMapper = new ObjectMapper(); + return objectMapper.readValue(body, Map.class); + } + + // 辅助方法:解析 form-data 格式字符串 + private Map parseFormBody(String body) throws UnsupportedEncodingException { + Map parameters = new HashMap<>(); + // 按照 & 分割每一对键值 + String[] pairs = body.split("&"); + for (String pair : pairs) { + String[] keyValue = pair.split("="); + if (keyValue.length == 2) { + // 解码键和值 + parameters.put(URLDecoder.decode(keyValue[0], "UTF-8"), + URLDecoder.decode(keyValue[1], "UTF-8")); + } + } + return parameters; + } + + // 设置未授权响应方法 + private Mono setUnauthorizedResponse(ServerWebExchange exchange, String message) { + // 设置响应状态码为 401 Unauthorized + exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED); + // 设置响应内容类型为 JSON + exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON); + // 创建返回的错误信息 + DataBuffer buffer = exchange.getResponse().bufferFactory() + .wrap(("{\"error\":\"" + message + "\"}").getBytes(StandardCharsets.UTF_8)); + return exchange.getResponse().writeWith(Mono.just(buffer)); + } + + private boolean isWhitelisted(String url) { + return StringUtils.matches(url, ignoreWhite.getWhites()) || + StringUtils.matchesTwo(url, ignoreWhite.getWhitesTwo()); + } + + @Override + public int getOrder() { + return 0; + } +} diff --git a/externalgateway/src/main/java/com/yxt/external/GatewayApiApplication.java b/externalgateway/src/main/java/com/yxt/external/GatewayApiApplication.java new file mode 100644 index 0000000..27c98d6 --- /dev/null +++ b/externalgateway/src/main/java/com/yxt/external/GatewayApiApplication.java @@ -0,0 +1,21 @@ +package com.yxt.external; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/12/6 + **/ +@EnableDiscoveryClient +@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) +public class GatewayApiApplication { + + public static void main(String[] args) { + SpringApplication.run(GatewayApiApplication.class, args); + } + +} diff --git a/externalgateway/src/main/java/com/yxt/external/RedisUtil.java b/externalgateway/src/main/java/com/yxt/external/RedisUtil.java new file mode 100644 index 0000000..20ab273 --- /dev/null +++ b/externalgateway/src/main/java/com/yxt/external/RedisUtil.java @@ -0,0 +1,300 @@ +package com.yxt.external; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.data.redis.connection.RedisConnection; +import org.springframework.data.redis.connection.RedisStringCommands; +import org.springframework.data.redis.core.*; +import org.springframework.data.redis.core.types.Expiration; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.stereotype.Service; + +import java.io.Serializable; +import java.util.List; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +/** + * @author dimengzhe + * @date 2020/9/9 17:35 + * @description redis工具类 + */ +@Service +public class RedisUtil { + + @Autowired + private RedisTemplate redisTemplate; + + + /** + * 字符串类型:根据key设置value值,如果key中的value存在,那么返回false + * + * @param key + * @param value + * @return + */ + public Boolean setnx(final String key, final String value, final long expration, final TimeUnit timeUnit) { + return (Boolean) redisTemplate.execute(new RedisCallback() { + @Override + public Boolean doInRedis(RedisConnection redisConnection) throws DataAccessException { + RedisSerializer redisSerializer = redisTemplate.getStringSerializer(); + byte keys[] = redisSerializer.serialize(key); + byte values[] = redisSerializer.serialize(value); + return redisConnection.set(keys, values, Expiration.from(expration, timeUnit), RedisStringCommands.SetOption.SET_IF_ABSENT); + } + }); + } + + /** + * 写入缓存 + * + * @param key + * @param value + * @return + */ + public boolean set(final String key, final String value) { + + boolean result = (boolean) redisTemplate.execute(new RedisCallback() { + @Override + public Boolean doInRedis(RedisConnection connection) throws DataAccessException { + RedisSerializer serializer = redisTemplate.getStringSerializer(); + connection.set(serializer.serialize(key), serializer.serialize(value)); + return true; + } + }); + return result; + } + + /** + * 写入缓存设置时效时间 + * + * @param key + * @param value + * @return + */ + public boolean set(final String key, Object value, Long expireTime) { + boolean result = false; + try { + ValueOperations operations = redisTemplate.opsForValue(); + operations.set(key, value); + redisTemplate.expire(key, expireTime, TimeUnit.SECONDS); + result = true; + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + /** + * 刷新缓存到期时间 + * @param key + * @param expire + * @return + */ + public boolean expire(String key, long expire) { + return redisTemplate.expire(key, expire, TimeUnit.SECONDS); + } + + /** + * 读取缓存 + * + * @param key + * @return + */ + public String get(final String key) { + String result = (String) redisTemplate.execute(new RedisCallback() { + @Override + public String doInRedis(RedisConnection connection) throws DataAccessException { + RedisSerializer serializer = redisTemplate.getStringSerializer(); + byte[] value = connection.get(serializer.serialize(key)); + return serializer.deserialize(value); + } + }); + return result; + } + + /** + * 正则获取key集合 + * + * @param pattern + * @return + */ + public Set keys(String pattern) { + Set keys = redisTemplate.keys(pattern); + return keys; + } + + + /** + * 批量删除对应的value + * + * @param keys + */ + public void remove(final String... keys) { + for (String key : keys) { + remove(key); + } + } + + /** + * 批量删除key + * + * @param pattern + */ + public void removePattern(final String pattern) { + Set keys = redisTemplate.keys(pattern); + if (keys.size() > 0) { + redisTemplate.delete(keys); + } + + } + + + public Long remove(final String key) { + return (Long) redisTemplate.execute(new RedisCallback() { + @Override + public Long doInRedis(RedisConnection redisConnection) throws DataAccessException { + RedisSerializer serializer = redisTemplate.getStringSerializer(); + byte keys[] = serializer.serialize(key); + return redisConnection.del(keys); + } + }); + } + + + /** + * 判断缓存中是否有对应的value + * + * @param key + * @return + */ + public boolean exists(final String key) { + return redisTemplate.hasKey(key); + } + + + /** + * 哈希 添加 + * + * @param key + * @param hashKey + * @param value + */ + public void hmSet(String key, Object hashKey, Object value) { + HashOperations hash = redisTemplate.opsForHash(); + hash.put(key, hashKey, value); + } + + /** + * 哈希获取数据 + * + * @param key + * @param hashKey + * @return + */ + public String hmGet(String key, Object hashKey) { + HashOperations hash = redisTemplate.opsForHash(); + return hash.get(key, hashKey); + } + + /** + * 获取哈希 keys + * + * @param key + * @return + */ + public Set hmGetKeys(String key) { + HashOperations hash = redisTemplate.opsForHash(); + return hash.keys(key); + } + + /** + * 删除集合中的key + * + * @param key + * @param hashKey + */ + public void hmDelete(String key, Object hashKey) { + HashOperations hash = redisTemplate.opsForHash(); + hash.delete(key, hashKey); + } + + /** + * 列表添加 + * + * @param k + * @param v + */ + public void lPush(String k, Object v) { + ListOperations list = redisTemplate.opsForList(); + list.rightPush(k, v); + } + + /** + * 列表获取 + * + * @param k + * @param l + * @param l1 + * @return + */ + public List lRange(String k, long l, long l1) { + ListOperations list = redisTemplate.opsForList(); + return list.range(k, l, l1); + } + + /** + * 集合添加 + * + * @param key + * @param value + */ + public void add(String key, Object value) { + SetOperations set = redisTemplate.opsForSet(); + set.add(key, value); + } + + /** + * 集合获取 + * + * @param key + * @return + */ + public Set setMembers(String key) { + SetOperations set = redisTemplate.opsForSet(); + return set.members(key); + } + + /** + * 有序集合添加 + * + * @param key + * @param value + * @param scoure + */ + public void zAdd(String key, Object value, double scoure) { + ZSetOperations zset = redisTemplate.opsForZSet(); + zset.add(key, value, scoure); + } + + /** + * 有序集合获取 + * + * @param key + * @param scoure + * @param scoure1 + * @return + */ + public Set rangeByScore(String key, double scoure, double scoure1) { + ZSetOperations zset = redisTemplate.opsForZSet(); + return zset.rangeByScore(key, scoure, scoure1); + } + + /** + * 实现命令:TTL key 以秒为单位,返回给定key的剩余生存时间 + * @param key + * @return + */ + public long ttl(String key) { + return redisTemplate.getExpire(key); + } +} diff --git a/externalgateway/src/main/java/com/yxt/external/Signature.java b/externalgateway/src/main/java/com/yxt/external/Signature.java new file mode 100644 index 0000000..6a143fe --- /dev/null +++ b/externalgateway/src/main/java/com/yxt/external/Signature.java @@ -0,0 +1,75 @@ +package com.yxt.external; + +import com.yxt.external.utils.AppKeyConfig; +import com.yxt.external.utils.ResultBean; +import com.yxt.external.utils.SignatureUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +import java.time.Instant; +import java.util.Map; + +/** + * @description:系统参数和签名校验 + * @author: dimengzhe + * @date: 2024/12/6 + **/ +//@RestController +//@RequestMapping("/signature") +@Component +public class Signature { + + @Autowired + private AppKeyConfig appKeyConfig; + + public String getSecret(String appKey) { + return appKeyConfig.getKeys().get(appKey); + } + + //验证 +// @PostMapping("/validate") + ResultBean validate(Map data) { + ResultBean rb = ResultBean.fireFail(); + // 解析参数:_app是否存在、_app参数值是否在数据库中存在 + String app = data.get("_app"); + if (StringUtils.isEmpty(app)) { + return rb.setMsg("_app参数缺失或无效"); + } + // 获取 secret 值:根据_app参数获取对应的secret值。后续考虑从数据库中获取。 + String secret = getSecret(app); + if (StringUtils.isEmpty(secret)) { + return rb.setMsg("_app参数不正确"); + } + // 校验时间戳 _t 参数 + String timestampStr = data.get("_t"); + if (StringUtils.isEmpty(timestampStr)) { + return rb.setMsg("_t参数缺失"); + } + long timestamp; + try { + timestamp = Long.parseLong(timestampStr); + } catch (NumberFormatException e) { + return rb.setMsg("_t参数格式不正确"); + } + // 时间范围校验 + long currentTimestamp = Instant.now().getEpochSecond(); + long timeDifference = Math.abs(currentTimestamp - timestamp); + final int ALLOWED_TIME_DIFF = 300; // 最大允许时间偏差(秒) + if (timeDifference > ALLOWED_TIME_DIFF) { + return rb.setMsg("时间已超过5分钟,时间失效"); + } + + // 签名验证 + ResultBean resultBean = SignatureUtil.validateSignature(data, secret); + if (!resultBean.getSuccess()) { + return rb.setMsg(resultBean.getMsg()); + } + + return rb.success(); + + + } + + +} diff --git a/externalgateway/src/main/java/com/yxt/external/authutils/CacheConstants.java b/externalgateway/src/main/java/com/yxt/external/authutils/CacheConstants.java new file mode 100644 index 0000000..b50c2b9 --- /dev/null +++ b/externalgateway/src/main/java/com/yxt/external/authutils/CacheConstants.java @@ -0,0 +1,25 @@ +package com.yxt.external.authutils; + +/** + * @author dimengzhe + * @description 缓存的key 常量 + */ + +public class CacheConstants { + + /** + * 令牌自定义标识 + */ + public static final String HEADER = "token"; + + /** + * 令牌前缀 + */ + public static final String TOKEN_PREFIX = "Bearer "; + + /** + * 用户名字段 + */ + public static final String DETAILS_USERNAME = "userName"; + public static final String _APP = "_app"; +} diff --git a/externalgateway/src/main/java/com/yxt/external/authutils/CharsetKit.java b/externalgateway/src/main/java/com/yxt/external/authutils/CharsetKit.java new file mode 100644 index 0000000..5e70554 --- /dev/null +++ b/externalgateway/src/main/java/com/yxt/external/authutils/CharsetKit.java @@ -0,0 +1,90 @@ +package com.yxt.external.authutils; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + +/** + * @author dimengzhe + * @description + */ + +public class CharsetKit { + + /** + * ISO-8859-1 + */ + public static final String ISO_8859_1 = "ISO-8859-1"; + /** + * UTF-8 + */ + public static final String UTF_8 = "UTF-8"; + /** + * GBK + */ + public static final String GBK = "GBK"; + + /** + * ISO-8859-1 + */ + public static final Charset CHARSET_ISO_8859_1 = Charset.forName(ISO_8859_1); + /** + * UTF-8 + */ + public static final Charset CHARSET_UTF_8 = Charset.forName(UTF_8); + /** + * GBK + */ + public static final Charset CHARSET_GBK = Charset.forName(GBK); + + /** + * 转换为Charset对象 + * + * @param charset 字符集,为空则返回默认字符集 + * @return Charset + */ + public static Charset charset(String charset) { + return StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset); + } + + /** + * 转换字符串的字符集编码 + * + * @param source 字符串 + * @param srcCharset 源字符集,默认ISO-8859-1 + * @param destCharset 目标字符集,默认UTF-8 + * @return 转换后的字符集 + */ + public static String convert(String source, String srcCharset, String destCharset) { + return convert(source, Charset.forName(srcCharset), Charset.forName(destCharset)); + } + + /** + * 转换字符串的字符集编码 + * + * @param source 字符串 + * @param srcCharset 源字符集,默认ISO-8859-1 + * @param destCharset 目标字符集,默认UTF-8 + * @return 转换后的字符集 + */ + public static String convert(String source, Charset srcCharset, Charset destCharset) { + if (null == srcCharset) { + srcCharset = StandardCharsets.ISO_8859_1; + } + + if (null == destCharset) { + destCharset = StandardCharsets.UTF_8; + } + + if (StringUtils.isEmpty(source) || srcCharset.equals(destCharset)) { + return source; + } + return new String(source.getBytes(srcCharset), destCharset); + } + + /** + * @return 系统字符集编码 + */ + public static String systemCharset() { + return Charset.defaultCharset().name(); + } +} diff --git a/externalgateway/src/main/java/com/yxt/external/authutils/Convert.java b/externalgateway/src/main/java/com/yxt/external/authutils/Convert.java new file mode 100644 index 0000000..e7bd1a3 --- /dev/null +++ b/externalgateway/src/main/java/com/yxt/external/authutils/Convert.java @@ -0,0 +1,849 @@ +package com.yxt.external.authutils; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.nio.ByteBuffer; +import java.nio.charset.Charset; +import java.text.NumberFormat; +import java.util.Set; + +/** + * @author dimengzhe + * @description + */ + +public class Convert { + + /** + * 转换为字符串
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static String toStr(Object value, String defaultValue) { + if (null == value) { + return defaultValue; + } + if (value instanceof String) { + return (String) value; + } + return value.toString(); + } + + /** + * 转换为字符串
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static String toStr(Object value) { + return toStr(value, null); + } + + /** + * 转换为字符
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Character toChar(Object value, Character defaultValue) { + if (null == value) { + return defaultValue; + } + if (value instanceof Character) { + return (Character) value; + } + + final String valueStr = toStr(value, null); + return StringUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0); + } + + /** + * 转换为字符
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Character toChar(Object value) { + return toChar(value, null); + } + + /** + * 转换为byte
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Byte toByte(Object value, Byte defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Byte) { + return (Byte) value; + } + if (value instanceof Number) { + return ((Number) value).byteValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + return Byte.parseByte(valueStr); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为byte
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Byte toByte(Object value) { + return toByte(value, null); + } + + /** + * 转换为Short
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Short toShort(Object value, Short defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Short) { + return (Short) value; + } + if (value instanceof Number) { + return ((Number) value).shortValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + return Short.parseShort(valueStr.trim()); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为Short
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Short toShort(Object value) { + return toShort(value, null); + } + + /** + * 转换为Number
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Number toNumber(Object value, Number defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Number) { + return (Number) value; + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + return NumberFormat.getInstance().parse(valueStr); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为Number
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Number toNumber(Object value) { + return toNumber(value, null); + } + + /** + * 转换为int
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Integer toInt(Object value, Integer defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Integer) { + return (Integer) value; + } + if (value instanceof Number) { + return ((Number) value).intValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + return Integer.parseInt(valueStr.trim()); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为int
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Integer toInt(Object value) { + return toInt(value, null); + } + + /** + * 转换为Integer数组
+ * + * @param str 被转换的值 + * @return 结果 + */ + public static Integer[] toIntArray(String str) { + return toIntArray(",", str); + } + + /** + * 转换为Long数组
+ * + * @param str 被转换的值 + * @return 结果 + */ + public static Long[] toLongArray(String str) { + return toLongArray(",", str); + } + + /** + * 转换为Integer数组
+ * + * @param split 分隔符 + * @param split 被转换的值 + * @return 结果 + */ + public static Integer[] toIntArray(String split, String str) { + if (StringUtils.isEmpty(str)) { + return new Integer[]{}; + } + String[] arr = str.split(split); + final Integer[] ints = new Integer[arr.length]; + for (int i = 0; i < arr.length; i++) { + final Integer v = toInt(arr[i], 0); + ints[i] = v; + } + return ints; + } + + /** + * 转换为Long数组
+ * + * @param split 分隔符 + * @param str 被转换的值 + * @return 结果 + */ + public static Long[] toLongArray(String split, String str) { + if (StringUtils.isEmpty(str)) { + return new Long[]{}; + } + String[] arr = str.split(split); + final Long[] longs = new Long[arr.length]; + for (int i = 0; i < arr.length; i++) { + final Long v = toLong(arr[i], null); + longs[i] = v; + } + return longs; + } + + /** + * 转换为String数组
+ * + * @param str 被转换的值 + * @return 结果 + */ + public static String[] toStrArray(String str) { + return toStrArray(",", str); + } + + /** + * 转换为String数组
+ * + * @param split 分隔符 + * @param split 被转换的值 + * @return 结果 + */ + public static String[] toStrArray(String split, String str) { + return str.split(split); + } + + /** + * 转换为long
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Long toLong(Object value, Long defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Long) { + return (Long) value; + } + if (value instanceof Number) { + return ((Number) value).longValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + // 支持科学计数法 + return new BigDecimal(valueStr.trim()).longValue(); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为long
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Long toLong(Object value) { + return toLong(value, null); + } + + /** + * 转换为double
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Double toDouble(Object value, Double defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Double) { + return (Double) value; + } + if (value instanceof Number) { + return ((Number) value).doubleValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + // 支持科学计数法 + return new BigDecimal(valueStr.trim()).doubleValue(); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为double
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Double toDouble(Object value) { + return toDouble(value, null); + } + + /** + * 转换为Float
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Float toFloat(Object value, Float defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Float) { + return (Float) value; + } + if (value instanceof Number) { + return ((Number) value).floatValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + return Float.parseFloat(valueStr.trim()); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为Float
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Float toFloat(Object value) { + return toFloat(value, null); + } + + /** + * 转换为boolean
+ * String支持的值为:true、false、yes、ok、no,1,0 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static Boolean toBool(Object value, Boolean defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof Boolean) { + return (Boolean) value; + } + String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + valueStr = valueStr.trim().toLowerCase(); + switch (valueStr) { + case "true": + return true; + case "false": + return false; + case "yes": + return true; + case "ok": + return true; + case "no": + return false; + case "1": + return true; + case "0": + return false; + default: + return defaultValue; + } + } + + /** + * 转换为boolean
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static Boolean toBool(Object value) { + return toBool(value, null); + } + + /** + * 转换为Enum对象
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * + * @param clazz Enum的Class + * @param value 值 + * @param defaultValue 默认值 + * @return Enum + */ + public static > E toEnum(Class clazz, Object value, E defaultValue) { + if (value == null) { + return defaultValue; + } + if (clazz.isAssignableFrom(value.getClass())) { + @SuppressWarnings("unchecked") + E myE = (E) value; + return myE; + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + return Enum.valueOf(clazz, valueStr); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为Enum对象
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * + * @param clazz Enum的Class + * @param value 值 + * @return Enum + */ + public static > E toEnum(Class clazz, Object value) { + return toEnum(clazz, value, null); + } + + /** + * 转换为BigInteger
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static BigInteger toBigInteger(Object value, BigInteger defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof BigInteger) { + return (BigInteger) value; + } + if (value instanceof Long) { + return BigInteger.valueOf((Long) value); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + return new BigInteger(valueStr); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为BigInteger
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static BigInteger toBigInteger(Object value) { + return toBigInteger(value, null); + } + + /** + * 转换为BigDecimal
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @param defaultValue 转换错误时的默认值 + * @return 结果 + */ + public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue) { + if (value == null) { + return defaultValue; + } + if (value instanceof BigDecimal) { + return (BigDecimal) value; + } + if (value instanceof Long) { + return new BigDecimal((Long) value); + } + if (value instanceof Double) { + return new BigDecimal((Double) value); + } + if (value instanceof Integer) { + return new BigDecimal((Integer) value); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) { + return defaultValue; + } + try { + return new BigDecimal(valueStr); + } catch (Exception e) { + return defaultValue; + } + } + + /** + * 转换为BigDecimal
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static BigDecimal toBigDecimal(Object value) { + return toBigDecimal(value, null); + } + + /** + * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 + * + * @param obj 对象 + * @return 字符串 + */ + public static String utf8Str(Object obj) { + return str(obj, CharsetKit.CHARSET_UTF_8); + } + + /** + * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 + * + * @param obj 对象 + * @param charsetName 字符集 + * @return 字符串 + */ + public static String str(Object obj, String charsetName) { + return str(obj, Charset.forName(charsetName)); + } + + /** + * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 + * + * @param obj 对象 + * @param charset 字符集 + * @return 字符串 + */ + public static String str(Object obj, Charset charset) { + if (null == obj) { + return null; + } + + if (obj instanceof String) { + return (String) obj; + } else if (obj instanceof byte[] || obj instanceof Byte[]) { + return str((Byte[]) obj, charset); + } else if (obj instanceof ByteBuffer) { + return str((ByteBuffer) obj, charset); + } + return obj.toString(); + } + + /** + * 将byte数组转为字符串 + * + * @param bytes byte数组 + * @param charset 字符集 + * @return 字符串 + */ + public static String str(byte[] bytes, String charset) { + return str(bytes, StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset)); + } + + /** + * 解码字节码 + * + * @param data 字符串 + * @param charset 字符集,如果此字段为空,则解码的结果取决于平台 + * @return 解码后的字符串 + */ + public static String str(byte[] data, Charset charset) { + if (data == null) { + return null; + } + + if (null == charset) { + return new String(data); + } + return new String(data, charset); + } + + /** + * 将编码的byteBuffer数据转换为字符串 + * + * @param data 数据 + * @param charset 字符集,如果为空使用当前系统字符集 + * @return 字符串 + */ + public static String str(ByteBuffer data, String charset) { + if (data == null) { + return null; + } + + return str(data, Charset.forName(charset)); + } + + /** + * 将编码的byteBuffer数据转换为字符串 + * + * @param data 数据 + * @param charset 字符集,如果为空使用当前系统字符集 + * @return 字符串 + */ + public static String str(ByteBuffer data, Charset charset) { + if (null == charset) { + charset = Charset.defaultCharset(); + } + return charset.decode(data).toString(); + } + + // ----------------------------------------------------------------------- 全角半角转换 + + /** + * 半角转全角 + * + * @param input String. + * @return 全角字符串. + */ + public static String toSBC(String input) { + return toSBC(input, null); + } + + /** + * 半角转全角 + * + * @param input String + * @param notConvertSet 不替换的字符集合 + * @return 全角字符串. + */ + public static String toSBC(String input, Set notConvertSet) { + char c[] = input.toCharArray(); + for (int i = 0; i < c.length; i++) { + if (null != notConvertSet && notConvertSet.contains(c[i])) { + // 跳过不替换的字符 + continue; + } + + if (c[i] == ' ') { + c[i] = '\u3000'; + } else if (c[i] < '\177') { + c[i] = (char) (c[i] + 65248); + + } + } + return new String(c); + } + + /** + * 全角转半角 + * + * @param input String. + * @return 半角字符串 + */ + public static String toDBC(String input) { + return toDBC(input, null); + } + + /** + * 替换全角为半角 + * + * @param text 文本 + * @param notConvertSet 不替换的字符集合 + * @return 替换后的字符 + */ + public static String toDBC(String text, Set notConvertSet) { + char c[] = text.toCharArray(); + for (int i = 0; i < c.length; i++) { + if (null != notConvertSet && notConvertSet.contains(c[i])) { + // 跳过不替换的字符 + continue; + } + + if (c[i] == '\u3000') { + c[i] = ' '; + } else if (c[i] > '\uFF00' && c[i] < '\uFF5F') { + c[i] = (char) (c[i] - 65248); + } + } + String returnString = new String(c); + + return returnString; + } + + /** + * 数字金额大写转换 先写个完整的然后将如零拾替换成零 + * + * @param n 数字 + * @return 中文大写数字 + */ + public static String digitUppercase(double n) { + String[] fraction = {"角", "分"}; + String[] digit = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; + String[][] unit = {{"元", "万", "亿"}, {"", "拾", "佰", "仟"}}; + + String head = n < 0 ? "负" : ""; + n = Math.abs(n); + + String s = ""; + for (int i = 0; i < fraction.length; i++) { + s += (digit[(int) (Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", ""); + } + if (s.length() < 1) { + s = "整"; + } + int integerPart = (int) Math.floor(n); + + for (int i = 0; i < unit[0].length && integerPart > 0; i++) { + String p = ""; + for (int j = 0; j < unit[1].length && n > 0; j++) { + p = digit[integerPart % 10] + unit[1][j] + p; + integerPart = integerPart / 10; + } + s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s; + } + return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整"); + } +} diff --git a/externalgateway/src/main/java/com/yxt/external/authutils/IgnoreWhiteProperties.java b/externalgateway/src/main/java/com/yxt/external/authutils/IgnoreWhiteProperties.java new file mode 100644 index 0000000..1167b2a --- /dev/null +++ b/externalgateway/src/main/java/com/yxt/external/authutils/IgnoreWhiteProperties.java @@ -0,0 +1,41 @@ +package com.yxt.external.authutils; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.context.annotation.Configuration; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author dimengzhe + * @description 放行白名单配置 + */ +@Configuration +@RefreshScope +@ConfigurationProperties(prefix = "ignore") +public class IgnoreWhiteProperties { + + /** + * 放行白名单配置,网关不校验此处的白名单 + */ + private List whites = new ArrayList<>(); + + public List getWhites() { + return whites; + } + + public void setWhites(List whites) { + this.whites = whites; + } + + private List whitesTwo = new ArrayList<>(); + + public List getWhitesTwo() { + return whitesTwo; + } + + public void setWhitesTwo(List whitesTwo) { + this.whitesTwo = whitesTwo; + } +} diff --git a/externalgateway/src/main/java/com/yxt/external/authutils/StrFormatter.java b/externalgateway/src/main/java/com/yxt/external/authutils/StrFormatter.java new file mode 100644 index 0000000..de84877 --- /dev/null +++ b/externalgateway/src/main/java/com/yxt/external/authutils/StrFormatter.java @@ -0,0 +1,75 @@ +package com.yxt.external.authutils; + +/** + * @author dimengzhe + * @description + */ + +public class StrFormatter { + + public static final String EMPTY_JSON = "{}"; + public static final char C_BACKSLASH = '\\'; + public static final char C_DELIM_START = '{'; + public static final char C_DELIM_END = '}'; + + /** + * 格式化字符串
+ * 此方法只是简单将占位符 {} 按照顺序替换为参数
+ * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可
+ * 例:
+ * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b
+ * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a
+ * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b
+ * + * @param strPattern 字符串模板 + * @param argArray 参数列表 + * @return 结果 + */ + public static String format(final String strPattern, final Object... argArray) { + if (StringUtils.isEmpty(strPattern) || StringUtils.isEmpty(argArray)) { + return strPattern; + } + final int strPatternLength = strPattern.length(); + + // 初始化定义好的长度以获得更好的性能 + StringBuilder sbuf = new StringBuilder(strPatternLength + 50); + + int handledPosition = 0; + int delimIndex;// 占位符所在位置 + for (int argIndex = 0; argIndex < argArray.length; argIndex++) { + delimIndex = strPattern.indexOf(EMPTY_JSON, handledPosition); + if (delimIndex == -1) { + if (handledPosition == 0) { + return strPattern; + } else { // 字符串模板剩余部分不再包含占位符,加入剩余部分后返回结果 + sbuf.append(strPattern, handledPosition, strPatternLength); + return sbuf.toString(); + } + } else { + if (delimIndex > 0 && strPattern.charAt(delimIndex - 1) == C_BACKSLASH) { + if (delimIndex > 1 && strPattern.charAt(delimIndex - 2) == C_BACKSLASH) { + // 转义符之前还有一个转义符,占位符依旧有效 + sbuf.append(strPattern, handledPosition, delimIndex - 1); + sbuf.append(Convert.utf8Str(argArray[argIndex])); + handledPosition = delimIndex + 2; + } else { + // 占位符被转义 + argIndex--; + sbuf.append(strPattern, handledPosition, delimIndex - 1); + sbuf.append(C_DELIM_START); + handledPosition = delimIndex + 1; + } + } else { + // 正常占位符 + sbuf.append(strPattern, handledPosition, delimIndex); + sbuf.append(Convert.utf8Str(argArray[argIndex])); + handledPosition = delimIndex + 2; + } + } + } + // 加入最后一个占位符后所有的字符 + sbuf.append(strPattern, handledPosition, strPattern.length()); + + return sbuf.toString(); + } +} diff --git a/externalgateway/src/main/java/com/yxt/external/authutils/StringUtils.java b/externalgateway/src/main/java/com/yxt/external/authutils/StringUtils.java new file mode 100644 index 0000000..21facdc --- /dev/null +++ b/externalgateway/src/main/java/com/yxt/external/authutils/StringUtils.java @@ -0,0 +1,525 @@ +package com.yxt.external.authutils; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * @author dimengzhe + * @description + */ + +public class StringUtils extends org.apache.commons.lang3.StringUtils { + + /** + * 空字符串 + */ + private static final String NULLSTR = ""; + + /** + * 下划线 + */ + private static final char SEPARATOR = '_'; + + /** + * 星号 + */ + private static final String START = "*"; + + /** + * 获取参数不为空值 + * + * @param value defaultValue 要判断的value + * @return value 返回值 + */ + public static T nvl(T value, T defaultValue) { + return value != null ? value : defaultValue; + } + + /** + * * 判断一个Collection是否为空, 包含List,Set,Queue + * + * @param coll 要判断的Collection + * @return true:为空 false:非空 + */ + public static boolean isEmpty(Collection coll) { + return isNull(coll) || coll.isEmpty(); + } + + /** + * * 判断一个Collection是否非空,包含List,Set,Queue + * + * @param coll 要判断的Collection + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Collection coll) { + return !isEmpty(coll); + } + + /** + * * 判断一个对象数组是否为空 + * + * @param objects 要判断的对象数组 + * * @return true:为空 false:非空 + */ + public static boolean isEmpty(Object[] objects) { + return isNull(objects) || (objects.length == 0); + } + + /** + * * 判断一个对象数组是否非空 + * + * @param objects 要判断的对象数组 + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Object[] objects) { + return !isEmpty(objects); + } + + /** + * * 判断一个Map是否为空 + * + * @param map 要判断的Map + * @return true:为空 false:非空 + */ + public static boolean isEmpty(Map map) { + return isNull(map) || map.isEmpty(); + } + + /** + * * 判断一个Map是否为空 + * + * @param map 要判断的Map + * @return true:非空 false:空 + */ + public static boolean isNotEmpty(Map map) { + return !isEmpty(map); + } + + /** + * * 判断一个字符串是否为空串 + * + * @param str String + * @return true:为空 false:非空 + */ + public static boolean isEmpty(String str) { + return isNull(str) || NULLSTR.equals(str.trim()); + } + + /** + * * 判断一个字符串是否为非空串 + * + * @param str String + * @return true:非空串 false:空串 + */ + public static boolean isNotEmpty(String str) { + return !isEmpty(str); + } + + /** + * * 判断一个对象是否为空 + * + * @param object Object + * @return true:为空 false:非空 + */ + public static boolean isNull(Object object) { + return object == null; + } + + /** + * * 判断一个对象是否非空 + * + * @param object Object + * @return true:非空 false:空 + */ + public static boolean isNotNull(Object object) { + return !isNull(object); + } + + /** + * * 判断一个对象是否是数组类型(Java基本型别的数组) + * + * @param object 对象 + * @return true:是数组 false:不是数组 + */ + public static boolean isArray(Object object) { + return isNotNull(object) && object.getClass().isArray(); + } + + /** + * 去空格 + */ + public static String trim(String str) { + return (str == null ? "" : str.trim()); + } + + /** + * 截取字符串 + * + * @param str 字符串 + * @param start 开始 + * @return 结果 + */ + public static String substring(final String str, int start) { + if (str == null) { + return NULLSTR; + } + + if (start < 0) { + start = str.length() + start; + } + + if (start < 0) { + start = 0; + } + if (start > str.length()) { + return NULLSTR; + } + + return str.substring(start); + } + + /** + * 截取字符串 + * + * @param str 字符串 + * @param start 开始 + * @param end 结束 + * @return 结果 + */ + public static String substring(final String str, int start, int end) { + if (str == null) { + return NULLSTR; + } + + if (end < 0) { + end = str.length() + end; + } + if (start < 0) { + start = str.length() + start; + } + + if (end > str.length()) { + end = str.length(); + } + + if (start > end) { + return NULLSTR; + } + + if (start < 0) { + start = 0; + } + if (end < 0) { + end = 0; + } + + return str.substring(start, end); + } + + /** + * 格式化文本, {} 表示占位符
+ * 此方法只是简单将占位符 {} 按照顺序替换为参数
+ * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可
+ * 例:
+ * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b
+ * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a
+ * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b
+ * + * @param template 文本模板,被替换的部分用 {} 表示 + * @param params 参数值 + * @return 格式化后的文本 + */ + public static String format(String template, Object... params) { + if (isEmpty(params) || isEmpty(template)) { + return template; + } + return StrFormatter.format(template, params); + } + + /** + * 下划线转驼峰命名 + */ + public static String toUnderScoreCase(String str) { + if (str == null) { + return null; + } + StringBuilder sb = new StringBuilder(); + // 前置字符是否大写 + boolean preCharIsUpperCase = true; + // 当前字符是否大写 + boolean curreCharIsUpperCase = true; + // 下一字符是否大写 + boolean nexteCharIsUpperCase = true; + for (int i = 0; i < str.length(); i++) { + char c = str.charAt(i); + if (i > 0) { + preCharIsUpperCase = Character.isUpperCase(str.charAt(i - 1)); + } else { + preCharIsUpperCase = false; + } + + curreCharIsUpperCase = Character.isUpperCase(c); + + if (i < (str.length() - 1)) { + nexteCharIsUpperCase = Character.isUpperCase(str.charAt(i + 1)); + } + + if (preCharIsUpperCase && curreCharIsUpperCase && !nexteCharIsUpperCase) { + sb.append(SEPARATOR); + } else if ((i != 0 && !preCharIsUpperCase) && curreCharIsUpperCase) { + sb.append(SEPARATOR); + } + sb.append(Character.toLowerCase(c)); + } + + return sb.toString(); + } + + /** + * 是否包含字符串 + * + * @param str 验证字符串 + * @param strs 字符串组 + * @return 包含返回true + */ + public static boolean inStringIgnoreCase(String str, String... strs) { + if (str != null && strs != null) { + for (String s : strs) { + if (str.equalsIgnoreCase(trim(s))) { + return true; + } + } + } + return false; + } + + /** + * 将下划线大写方式命名的字符串转换为驼峰式。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。 例如:HELLO_WORLD->HelloWorld + * + * @param name 转换前的下划线大写方式命名的字符串 + * @return 转换后的驼峰式命名的字符串 + */ + public static String convertToCamelCase(String name) { + StringBuilder result = new StringBuilder(); + // 快速检查 + if (name == null || name.isEmpty()) { + // 没必要转换 + return ""; + } else if (!name.contains("_")) { + // 不含下划线,仅将首字母大写 + return name.substring(0, 1).toUpperCase() + name.substring(1); + } + // 用下划线将原始字符串分割 + String[] camels = name.split("_"); + for (String camel : camels) { + // 跳过原始字符串中开头、结尾的下换线或双重下划线 + if (camel.isEmpty()) { + continue; + } + // 首字母大写 + result.append(camel.substring(0, 1).toUpperCase()); + result.append(camel.substring(1).toLowerCase()); + } + return result.toString(); + } + + /** + * 驼峰式命名法 例如:user_name->userName + */ + public static String toCamelCase(String s) { + if (s == null) { + return null; + } + s = s.toLowerCase(); + StringBuilder sb = new StringBuilder(s.length()); + boolean upperCase = false; + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + + if (c == SEPARATOR) { + upperCase = true; + } else if (upperCase) { + sb.append(Character.toUpperCase(c)); + upperCase = false; + } else { + sb.append(c); + } + } + return sb.toString(); + } + + /** + * 查找指定字符串是否匹配指定字符串列表中的任意一个字符串 + * + * @param str 指定字符串 + * @param strs 需要检查的字符串数组 + * @return 是否匹配 + */ + public static boolean matchesTwo(String str, List strs) { + if (isEmpty(str) || isEmpty(strs)) { + return false; + } + for (String testStr : strs) { + if (matchesTwo(str, testStr)) { + return true; + } + } + return false; + } + + public static boolean matches(String str, List strs) { + if (isEmpty(str) || isEmpty(strs)) { + return false; + } + for (String testStr : strs) { + if (matches(str, testStr)) { + return true; + } + } + return false; + } + + /** + * 查找指定字符串是否匹配指定字符串数组中的任意一个字符串 + * + * @param str 指定字符串 + * @param strs 需要检查的字符串数组 + * @return 是否匹配 + */ + public static boolean matches(String str, String... strs) { + if (isEmpty(str) || isEmpty(strs)) { + return false; + } + for (String testStr : strs) { + if (matches(str, testStr)) { + return true; + } + } + return false; + } + + public static boolean matches(String str, String pattern) { + if (isEmpty(pattern) || isEmpty(str)) { + return false; + } + + pattern = pattern.replaceAll("\\s*", ""); // 替换空格 + int beginOffset = 0; // pattern截取开始位置 + int formerStarOffset = -1; // 前星号的偏移位置 + int latterStarOffset = -1; // 后星号的偏移位置 + + String remainingURI = str; + String prefixPattern = ""; + String suffixPattern = ""; + + boolean result = false; + do { + formerStarOffset = indexOf(pattern, START, beginOffset); + prefixPattern = substring(pattern, beginOffset, formerStarOffset > -1 ? formerStarOffset : pattern.length()); + + // 匹配前缀Pattern + result = remainingURI.equals(prefixPattern); + // 已经没有星号,直接返回 + if (formerStarOffset == -1) { + return result; + } + + // 匹配失败,直接返回 + if (!result) { + return false; + } + if (!isEmpty(prefixPattern)) { + remainingURI = substringAfter(str, prefixPattern); + } + + // 匹配后缀Pattern + latterStarOffset = indexOf(pattern, START, formerStarOffset + 1); + suffixPattern = substring(pattern, formerStarOffset + 1, latterStarOffset > -1 ? latterStarOffset : pattern.length()); + + result = remainingURI.equals(suffixPattern); + // 匹配失败,直接返回 + if (!result) { + return false; + } + if (!isEmpty(suffixPattern)) { + remainingURI = substringAfter(str, suffixPattern); + } + + // 移动指针 + beginOffset = latterStarOffset + 1; + + } + while (!isEmpty(suffixPattern) && !isEmpty(remainingURI)); + + return true; + } + + /** + * 查找指定字符串是否匹配 + * + * @param str 指定字符串 + * @param pattern 需要检查的字符串 + * @return 是否匹配 + */ + public static boolean matchesTwo(String str, String pattern) { + if (isEmpty(pattern) || isEmpty(str)) { + return false; + } + + pattern = pattern.replaceAll("\\s*", ""); // 替换空格 + int beginOffset = 0; // pattern截取开始位置 + int formerStarOffset = -1; // 前星号的偏移位置 + int latterStarOffset = -1; // 后星号的偏移位置 + + String remainingURI = str; + String prefixPattern = ""; + String suffixPattern = ""; + + boolean result = false; + do { + formerStarOffset = indexOf(pattern, START, beginOffset); + prefixPattern = substring(pattern, beginOffset, formerStarOffset > -1 ? formerStarOffset : pattern.length()); + + // 匹配前缀Pattern + result = remainingURI.contains(prefixPattern); + // 已经没有星号,直接返回 + if (formerStarOffset == -1) { + return result; + } + + // 匹配失败,直接返回 + if (!result) { + return false; + } + if (!isEmpty(prefixPattern)) { + remainingURI = substringAfter(str, prefixPattern); + } + + // 匹配后缀Pattern + latterStarOffset = indexOf(pattern, START, formerStarOffset + 1); + suffixPattern = substring(pattern, formerStarOffset + 1, latterStarOffset > -1 ? latterStarOffset : pattern.length()); + + result = remainingURI.contains(suffixPattern); + // 匹配失败,直接返回 + if (!result) { + return false; + } + if (!isEmpty(suffixPattern)) { + remainingURI = substringAfter(str, suffixPattern); + } + + // 移动指针 + beginOffset = latterStarOffset + 1; + + } + while (!isEmpty(suffixPattern) && !isEmpty(remainingURI)); + + return true; + } + + @SuppressWarnings("unchecked") + public static T cast(Object obj) { + return (T) obj; + } +} diff --git a/externalgateway/src/main/java/com/yxt/external/rest/ClientRest.java b/externalgateway/src/main/java/com/yxt/external/rest/ClientRest.java new file mode 100644 index 0000000..48e9853 --- /dev/null +++ b/externalgateway/src/main/java/com/yxt/external/rest/ClientRest.java @@ -0,0 +1,127 @@ +package com.yxt.external.rest; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.yxt.external.service.ClientService; +import com.yxt.external.utils.ResultBean; +import com.yxt.external.utils.SignatureQuery; +import okhttp3.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.security.NoSuchAlgorithmException; +import java.util.Map; +import java.util.TreeMap; +import java.util.concurrent.TimeUnit; + +/* + * @description:模拟开发端请求--测试 + * @author: dimengzhe + * @date: 2024/12/10 + */ + +@RestController +@RequestMapping("/client") +public class ClientRest { + + @Autowired + private ClientService clientService; + + + //appkey + static final String APPKEY = "appKey4"; + static final String SECRET = "secret"; + + //开发端,生成签名并调用服务器端验证签名、appKey等值。 + @PostMapping("/getSign") + ResultBean getSign(SignatureQuery query) { + ResultBean rb = ResultBean.fireFail(); + try { + Map formData = query.getParameters(); + //使用treeMap排序 + Map tree = new TreeMap<>(formData); + tree.put("_app", APPKEY); + tree.put("_t", String.valueOf(System.currentTimeMillis() / 1000)); + tree.put("_s", ""); + // 生成签名 + String sign = clientService.generateSignature(tree, SECRET); + //添加签名值map + tree.put("_sign", sign); + //发起请求 + ResultBean resultBean = client(tree); + if (!resultBean.getSuccess()) { + return rb.setMsg(resultBean.getMsg()); + } + //通过验证继续调用接口 + + + return rb.success(); + } catch (UnsupportedEncodingException e) { + return rb.setMsg("Unsupported encoding: " + e.getMessage()); + } catch (NoSuchAlgorithmException e) { + return rb.setMsg("Algorithm not found: " + e.getMessage()); + } + } + + //发起请求验证签名等 + public ResultBean client(Map data) { + ResultBean rb = ResultBean.fireFail(); + OkHttpClient client = new OkHttpClient.Builder() + .connectTimeout(10, TimeUnit.SECONDS) + .writeTimeout(10, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS) + .build(); + + try { + // 构建URL + String endPoint = "http://127.0.0.1:9999"; + String path = "/signature/validate"; + + // 创建FormData + FormBody.Builder formBuilder = new FormBody.Builder(); + for (Map.Entry entry : data.entrySet()) { + formBuilder.add(entry.getKey(), entry.getValue()); + } + RequestBody formBody = formBuilder.build(); + + // 构建POST请求 + String url = endPoint + path; + System.out.println("Request URL: " + url); + System.out.println("Request Data: " + data); + + Request request = new Request.Builder() + .url(url) + .post(formBody) + .build(); + + // 发送请求 + try (Response response = client.newCall(request).execute()) { + String responseBody = response.body().string(); + // 使用 Jackson 解析 JSON 响应 + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode jsonNode = objectMapper.readTree(responseBody); + String success = jsonNode.path("success").asText(); + String msg = jsonNode.path("msg").asText(); + if ("false".equals(success)) { + return rb.setMsg(msg); + } + if (response.isSuccessful()) { + System.out.println("Response: " + response.body().string()); + } else { + System.err.println("Request failed: " + response.message()); + } + + + } + } catch (IOException e) { + System.err.println("Network error: " + e.getMessage()); + } catch (Exception e) { + System.err.println("Unexpected error: " + e.getMessage()); + } + return rb.success(); + } +} diff --git a/externalgateway/src/main/java/com/yxt/external/service/ClientService.java b/externalgateway/src/main/java/com/yxt/external/service/ClientService.java new file mode 100644 index 0000000..4da62b0 --- /dev/null +++ b/externalgateway/src/main/java/com/yxt/external/service/ClientService.java @@ -0,0 +1,80 @@ +package com.yxt.external.service; + +import com.yxt.external.utils.AppKeyConfig; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Map; +import java.util.TreeMap; + +/** + * @description:开发端service + * @author: dimengzhe + * @date: 2024/12/11 + **/ +@Service +public class ClientService { + + @Autowired + private AppKeyConfig appKeyConfig; + + public String getSecret(String appKey) { + return appKeyConfig.getKeys().get(appKey); + } + + /** + * 生成请求签名 + * + * @param parameters 请求参数 + * @return 签名 + */ + public String generateSignature(Map parameters, String secret) throws UnsupportedEncodingException, NoSuchAlgorithmException { + //1.对参数进行排序 + Map treeMap = new TreeMap<>(parameters); + // 2. 拼接参数字符串 + String content = joinParameters(parameters); + + content = secret + content + secret; + + // 4. 计算签名 (MD5) + return md5(content); + } + + /** + * 拼接参数字符串 + * + * @param tree 排序后的参数 + * @return 拼接后的参数字符串 + */ + public String joinParameters(Map tree) throws UnsupportedEncodingException { + StringBuilder builder = new StringBuilder(); + for (Map.Entry entry : tree.entrySet()) { + if (builder.length() > 0) { + builder.append("&"); + } + builder.append(entry.getKey()).append("="); + builder.append(URLEncoder.encode(entry.getValue(), "UTF-8")); + } + return builder.toString(); + } + + /** + * 计算 MD5 + * + * @param content 要计算 MD5 的字符串 + * @return MD5 值 + */ + public String md5(String content) throws NoSuchAlgorithmException { + MessageDigest md = MessageDigest.getInstance("MD5"); + byte[] bytes = md.digest(content.getBytes()); + StringBuilder sb = new StringBuilder(); + for (byte b : bytes) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } +} diff --git a/externalgateway/src/main/java/com/yxt/external/utils/AppKeyConfig.java b/externalgateway/src/main/java/com/yxt/external/utils/AppKeyConfig.java new file mode 100644 index 0000000..1d2de6f --- /dev/null +++ b/externalgateway/src/main/java/com/yxt/external/utils/AppKeyConfig.java @@ -0,0 +1,26 @@ +package com.yxt.external.utils; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/12/9 + **/ +@Component +@ConfigurationProperties(prefix = "appkey") +public class AppKeyConfig { + + private Map keys; + + public Map getKeys() { + return keys; + } + + public void setKeys(Map keys) { + this.keys = keys; + } +} diff --git a/externalgateway/src/main/java/com/yxt/external/utils/HttpStatus.java b/externalgateway/src/main/java/com/yxt/external/utils/HttpStatus.java new file mode 100644 index 0000000..96f8676 --- /dev/null +++ b/externalgateway/src/main/java/com/yxt/external/utils/HttpStatus.java @@ -0,0 +1,23 @@ +package com.yxt.external.utils; + +/** + * @author dimengzhe + * @date 2021/6/16 10:50 + * @description + */ + +public class HttpStatus { + + /** + * 操作成功 + */ + public static final int SUCCESS = 200; + + /** + * 系统内部错误 + */ + public static final int ERROR = 500; + + public static final String OVERDUE = "5000"; + +} diff --git a/externalgateway/src/main/java/com/yxt/external/utils/IResultCodeMsg.java b/externalgateway/src/main/java/com/yxt/external/utils/IResultCodeMsg.java new file mode 100644 index 0000000..d5653b2 --- /dev/null +++ b/externalgateway/src/main/java/com/yxt/external/utils/IResultCodeMsg.java @@ -0,0 +1,44 @@ +/********************************************************* + ********************************************************* + ******************** ******************* + ************* ************ + ******* _oo0oo_ ******* + *** o8888888o *** + * 88" . "88 * + * (| -_- |) * + * 0\ = /0 * + * ___/`---'\___ * + * .' \\| |// '. * + * / \\||| : |||// \ * + * / _||||| -:- |||||- \ * + * | | \\\ - /// | | * + * | \_| ''\---/'' |_/ | * + * \ .-\__ '-' ___/-. / * + * ___'. .' /--.--\ `. .'___ * + * ."" '< `.___\_<|>_/___.' >' "". * + * | | : `- \`.;`\ _ /`;.`/ - ` : | | * + * \ \ `_. \_ __\ /__ _/ .-` / / * + * =====`-.____`.___ \_____/___.-`___.-'===== * + * `=---=' * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + *********__佛祖保佑__永无BUG__验收通过__钞票多多__********* + *********************************************************/ +package com.yxt.external.utils; + +/** + * Project: yxt-common
+ * File: IResultCodeMsg.java
+ * Class: com.yxt.common.core.result.IResultCodeMsg
+ * Description: <描述类的功能>.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2021/9/11 下午11:00
+ * + * @author popo + * @version 1.0 + * @since 1.0 + */ +public interface IResultCodeMsg { + String getCode(); + String getMsg(); +} diff --git a/externalgateway/src/main/java/com/yxt/external/utils/ResultBean.java b/externalgateway/src/main/java/com/yxt/external/utils/ResultBean.java new file mode 100644 index 0000000..d885bfe --- /dev/null +++ b/externalgateway/src/main/java/com/yxt/external/utils/ResultBean.java @@ -0,0 +1,191 @@ +package com.yxt.external.utils; + +import java.io.Serializable; + +/** + * Project: yxt-common-core
+ * File: ResultBean.java
+ * Class: com.yxt.common.core.result.ResultBean
+ * Description: 通过接口、Rest、逻辑处理执行后的结果信息.
+ * Copyright: Copyright (c) 2011
+ * Company: https://gitee.com/liuzp315
+ * Makedate: 2020/8/4 0:51
+ * + * @author liupopo + * @version 1.0 + * @since 1.0 + */ +public class ResultBean implements Serializable { + private static final long serialVersionUID = 4529658978692424234L; + + private long timestamp = System.currentTimeMillis(); + + public long getTimestamp() { + return timestamp; + } + + // 是否成功 + private boolean success; + + // 消息 返回结果的说明 + private String msg; + + // 结果状态码 + private String code; + + // 数据 + private T data; + + private String message; + + public String getMessage() { + return message; + } + + public ResultBean setMessage(String message) { + this.message = message; + return this; + } + + public ResultBean() { + } + + public ResultBean(boolean success) { + this.success = success; + } + + public ResultBean(boolean success, String msg) { + this.success = success; + this.msg = msg; + } + + public ResultBean(boolean success, String msg, String code) { + this.success = success; + this.msg = msg; + this.code = code; + } + + public ResultBean(T data) { + this.success = true; + this.data = data; + } + + public ResultBean(String code, T data) { + this.success = true; + this.code = code; + this.data = data; + } + + public ResultBean(String code, String msg, T data) { + this.success = true; + this.code = code; + this.msg = msg; + this.data = data; + } + + public boolean getSuccess() { + return success; + } + + public ResultBean setSuccess(boolean success) { + this.success = success; + return this; + } + + public String getMsg() { + return msg; + } + + public ResultBean setMsg(String msg) { + this.msg = msg; + return this; + } + + public String getCode() { + return code; + } + + public ResultBean setCode(String code) { + this.code = code; + return this; + } + + public T getData() { + return data; + } + + public ResultBean setData(T data) { + this.data = data; + return this; + } + + public ResultBean successOne() { + this.setSuccess(true); + this.setCode("0"); + this.setMessage("成功!"); + return this; + } + + public ResultBean failOne() { + this.setSuccess(false); + this.setCode(String.valueOf(HttpStatus.ERROR)); + this.setMessage("操作失败!"); + return this; + } + + public ResultBean success() { + this.setSuccess(true); + this.setCode(String.valueOf(HttpStatus.SUCCESS)); + this.setMsg("操作成功!"); + return this; + } + + public ResultBean fail() { + this.setSuccess(false); + this.setCode(String.valueOf(HttpStatus.ERROR)); + this.setMsg("操作失败!"); + return this; + } + + public static ResultBean fireSuccess() { + ResultBean rb = new ResultBean(); + rb.setSuccess(true); + rb.setCode(String.valueOf(HttpStatus.SUCCESS)); + rb.setMsg("操作成功!"); + return rb; + } + + public static ResultBean fireFail() { + ResultBean rb = new ResultBean(); + rb.setSuccess(false); + rb.setCode(String.valueOf(HttpStatus.ERROR)); + rb.setMsg("操作失败!"); + return rb; + } + + /** + * 设置返回code及msg + * + * @param codeMsg Code和Msg的枚举 + * @return + */ + public ResultBean setCode(IResultCodeMsg codeMsg) { + this.code = codeMsg.getCode(); + this.msg = codeMsg.getMsg(); + return this; + } + + /** + * 返回失败信息,并指定结果code + * + * @param codeMsg Code和Msg的枚举 + * @return + */ + public ResultBean fail(IResultCodeMsg codeMsg) { + this.setSuccess(false); + this.code = codeMsg.getCode(); + this.msg = codeMsg.getMsg(); + return this; + } + +} diff --git a/externalgateway/src/main/java/com/yxt/external/utils/SignatureQuery.java b/externalgateway/src/main/java/com/yxt/external/utils/SignatureQuery.java new file mode 100644 index 0000000..ac13ff1 --- /dev/null +++ b/externalgateway/src/main/java/com/yxt/external/utils/SignatureQuery.java @@ -0,0 +1,19 @@ +package com.yxt.external.utils; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/12/7 + **/ +@Data +public class SignatureQuery { + + //传入的参数 + private Map parameters = new HashMap<>(); + +} diff --git a/externalgateway/src/main/java/com/yxt/external/utils/SignatureUtil.java b/externalgateway/src/main/java/com/yxt/external/utils/SignatureUtil.java new file mode 100644 index 0000000..b450d0f --- /dev/null +++ b/externalgateway/src/main/java/com/yxt/external/utils/SignatureUtil.java @@ -0,0 +1,108 @@ +package com.yxt.external.utils; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Map; +import java.util.TreeMap; + +/** + * @description: 签名工具 + * @author: dimengzhe + * @date: 2024/11/28 + **/ +public class SignatureUtil { + /** + * 验证签名是否正确 + * + * @param parameters 请求参数 + * @param secret 私钥,生成签名时使用,不允许在请求参数中出现 + * @return 是否验证通过 + */ + public static ResultBean validateSignature(Map parameters, String secret) { + ResultBean rb = ResultBean.fireFail(); + boolean valid = false; + //原签名 + String _sign = parameters.get("_sign"); + //3、检验签名,成功则继续调用接口,失败返回失败信息。 + parameters.remove("_sign"); + try { + // 3.1. 重新生成签名 + String calculatedSignature = SignatureUtil.generateSignature(parameters, secret); + + // 3.2. 使用固定时间比较方式验证签名 + valid = MessageDigest.isEqual( + calculatedSignature.getBytes("UTF-8"), + _sign.getBytes("UTF-8") + ); + if (!valid) { + return rb.setMsg("签名不正确"); + } + + } catch (UnsupportedEncodingException e) { + return rb.setMsg("Encoding error: " + e.getMessage()); + } catch (NoSuchAlgorithmException e) { + return rb.setMsg("Algorithm error: " + e.getMessage()); + } catch (Exception e) { + return rb.setMsg("Unexpected error: " + e.getMessage()); + } + return rb.success().setData(valid); + } + + /** + * 生成签名 + * + * @param parameters 请求参数 + * @param secret 私钥 + * @return 签名字符串 + */ + private static String generateSignature(Map parameters, String secret) throws UnsupportedEncodingException, NoSuchAlgorithmException { + //1.对参数进行排序 + Map treeMap = new TreeMap<>(parameters); + // 2. 拼接参数字符串 + String content = joinParameters(treeMap); + + // 3. 将密钥加在参数字符串的前后 + content = secret + content + secret; + + // 4. 计算签名 (MD5) + return md5(content); + } + + /** + * 拼接参数字符串 + * + * @param tree 排序后的参数 + * @return 拼接后的参数字符串 + */ + private static String joinParameters(Map tree) throws UnsupportedEncodingException { + StringBuilder builder = new StringBuilder(); + for (Map.Entry entry : tree.entrySet()) { + if (builder.length() > 0) { + builder.append("&"); + } + builder.append(entry.getKey()).append("="); + builder.append(URLEncoder.encode(entry.getValue(), "UTF-8")); + } + return builder.toString(); + } + + /** + * MD5加密 + * + * @param content 要计算 MD5 的字符串 + * @return MD5 值 + */ + private static String md5(String content) throws NoSuchAlgorithmException { + MessageDigest md = MessageDigest.getInstance("MD5"); + byte[] bytes = md.digest(content.getBytes()); + StringBuilder sb = new StringBuilder(); + for (byte b : bytes) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } + + +} diff --git a/externalgateway/src/main/java/com/yxt/external/utils/WebFluxLoggingConfig.java b/externalgateway/src/main/java/com/yxt/external/utils/WebFluxLoggingConfig.java new file mode 100644 index 0000000..fbf556e --- /dev/null +++ b/externalgateway/src/main/java/com/yxt/external/utils/WebFluxLoggingConfig.java @@ -0,0 +1,29 @@ +package com.yxt.external.utils; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.server.WebFilter; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/12/11 + **/ +@Configuration +public class WebFluxLoggingConfig { + + @Bean + public WebFilter loggingFilter() { + return (exchange, chain) -> { + // 打印请求信息 + System.out.println("Request: " + exchange.getRequest().getURI()); + + // 继续处理请求 + return chain.filter(exchange) + .doOnTerminate(() -> { + // 打印响应信息 + System.out.println("Response: " + exchange.getResponse().getStatusCode()); + }); + }; + } +} diff --git a/externalgateway/src/main/resources/application-dev.yml b/externalgateway/src/main/resources/application-dev.yml new file mode 100644 index 0000000..8faaa6b --- /dev/null +++ b/externalgateway/src/main/resources/application-dev.yml @@ -0,0 +1,20 @@ +spring: + resources: + static-locations: file:D://supervise + cloud: + nacos: + discovery: +# namespace: supervise + server-addr: 127.0.0.1:8848 + redis: + database: 3 # Redis数据库索引(默认为0) + host: 127.0.0.1 + jedis: + pool: + max-active: -1 #连接池最大连接数(使用负值表示没有限制) + max-idle: 8 #连接池中的最大空闲连接 + max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制) + min-idle: 0 # 连接池中的最小空闲连接 + password: + port: 6379 + timeout: 0 # 连接超时时间(毫秒) \ No newline at end of file diff --git a/externalgateway/src/main/resources/application-pro.yml b/externalgateway/src/main/resources/application-pro.yml new file mode 100644 index 0000000..8faaa6b --- /dev/null +++ b/externalgateway/src/main/resources/application-pro.yml @@ -0,0 +1,20 @@ +spring: + resources: + static-locations: file:D://supervise + cloud: + nacos: + discovery: +# namespace: supervise + server-addr: 127.0.0.1:8848 + redis: + database: 3 # Redis数据库索引(默认为0) + host: 127.0.0.1 + jedis: + pool: + max-active: -1 #连接池最大连接数(使用负值表示没有限制) + max-idle: 8 #连接池中的最大空闲连接 + max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制) + min-idle: 0 # 连接池中的最小空闲连接 + password: + port: 6379 + timeout: 0 # 连接超时时间(毫秒) \ No newline at end of file diff --git a/externalgateway/src/main/resources/application-test.yml b/externalgateway/src/main/resources/application-test.yml new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/externalgateway/src/main/resources/application-test.yml @@ -0,0 +1 @@ + diff --git a/externalgateway/src/main/resources/application.yml b/externalgateway/src/main/resources/application.yml new file mode 100644 index 0000000..1ede0b0 --- /dev/null +++ b/externalgateway/src/main/resources/application.yml @@ -0,0 +1,34 @@ +hystrix: + command: + default: + execution: + isolation: + strategy: SEMAPHORE + thread: + timeoutInMilliseconds: 300000 +server: + port: 8114 +spring: + application: + name: gateway + profiles: + active: dev +# active: pro + cloud: + gateway: + routes: + - id: external + predicates: + - Path= /external/** + uri: lb://external + filters: + - StripPrefix=1 + +ignore: + whites: +# - /external/client/getSign + + + whitesTwo: #包含所有 + - /upload/** + - /external/apiadmin/supplierinfo/getSupplierCountByOrgSid/** diff --git a/externalgateway/target/classes/application-dev.yml b/externalgateway/target/classes/application-dev.yml new file mode 100644 index 0000000..8faaa6b --- /dev/null +++ b/externalgateway/target/classes/application-dev.yml @@ -0,0 +1,20 @@ +spring: + resources: + static-locations: file:D://supervise + cloud: + nacos: + discovery: +# namespace: supervise + server-addr: 127.0.0.1:8848 + redis: + database: 3 # Redis数据库索引(默认为0) + host: 127.0.0.1 + jedis: + pool: + max-active: -1 #连接池最大连接数(使用负值表示没有限制) + max-idle: 8 #连接池中的最大空闲连接 + max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制) + min-idle: 0 # 连接池中的最小空闲连接 + password: + port: 6379 + timeout: 0 # 连接超时时间(毫秒) \ No newline at end of file diff --git a/externalgateway/target/classes/application-pro.yml b/externalgateway/target/classes/application-pro.yml new file mode 100644 index 0000000..8faaa6b --- /dev/null +++ b/externalgateway/target/classes/application-pro.yml @@ -0,0 +1,20 @@ +spring: + resources: + static-locations: file:D://supervise + cloud: + nacos: + discovery: +# namespace: supervise + server-addr: 127.0.0.1:8848 + redis: + database: 3 # Redis数据库索引(默认为0) + host: 127.0.0.1 + jedis: + pool: + max-active: -1 #连接池最大连接数(使用负值表示没有限制) + max-idle: 8 #连接池中的最大空闲连接 + max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制) + min-idle: 0 # 连接池中的最小空闲连接 + password: + port: 6379 + timeout: 0 # 连接超时时间(毫秒) \ No newline at end of file diff --git a/externalgateway/target/classes/application-test.yml b/externalgateway/target/classes/application-test.yml new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/externalgateway/target/classes/application-test.yml @@ -0,0 +1 @@ + diff --git a/externalgateway/target/classes/application.yml b/externalgateway/target/classes/application.yml new file mode 100644 index 0000000..1ede0b0 --- /dev/null +++ b/externalgateway/target/classes/application.yml @@ -0,0 +1,34 @@ +hystrix: + command: + default: + execution: + isolation: + strategy: SEMAPHORE + thread: + timeoutInMilliseconds: 300000 +server: + port: 8114 +spring: + application: + name: gateway + profiles: + active: dev +# active: pro + cloud: + gateway: + routes: + - id: external + predicates: + - Path= /external/** + uri: lb://external + filters: + - StripPrefix=1 + +ignore: + whites: +# - /external/client/getSign + + + whitesTwo: #包含所有 + - /upload/** + - /external/apiadmin/supplierinfo/getSupplierCountByOrgSid/** diff --git a/externalgateway/target/classes/com/yxt/external/AuthFilter.class b/externalgateway/target/classes/com/yxt/external/AuthFilter.class new file mode 100644 index 0000000..6b96459 Binary files /dev/null and b/externalgateway/target/classes/com/yxt/external/AuthFilter.class differ diff --git a/externalgateway/target/classes/com/yxt/external/GatewayApiApplication.class b/externalgateway/target/classes/com/yxt/external/GatewayApiApplication.class new file mode 100644 index 0000000..c67c905 Binary files /dev/null and b/externalgateway/target/classes/com/yxt/external/GatewayApiApplication.class differ diff --git a/externalgateway/target/classes/com/yxt/external/RedisUtil$1.class b/externalgateway/target/classes/com/yxt/external/RedisUtil$1.class new file mode 100644 index 0000000..c835b98 Binary files /dev/null and b/externalgateway/target/classes/com/yxt/external/RedisUtil$1.class differ diff --git a/externalgateway/target/classes/com/yxt/external/RedisUtil$2.class b/externalgateway/target/classes/com/yxt/external/RedisUtil$2.class new file mode 100644 index 0000000..75f1759 Binary files /dev/null and b/externalgateway/target/classes/com/yxt/external/RedisUtil$2.class differ diff --git a/externalgateway/target/classes/com/yxt/external/RedisUtil$3.class b/externalgateway/target/classes/com/yxt/external/RedisUtil$3.class new file mode 100644 index 0000000..9712fc9 Binary files /dev/null and b/externalgateway/target/classes/com/yxt/external/RedisUtil$3.class differ diff --git a/externalgateway/target/classes/com/yxt/external/RedisUtil$4.class b/externalgateway/target/classes/com/yxt/external/RedisUtil$4.class new file mode 100644 index 0000000..72ae70d Binary files /dev/null and b/externalgateway/target/classes/com/yxt/external/RedisUtil$4.class differ diff --git a/externalgateway/target/classes/com/yxt/external/RedisUtil.class b/externalgateway/target/classes/com/yxt/external/RedisUtil.class new file mode 100644 index 0000000..ae31b5e Binary files /dev/null and b/externalgateway/target/classes/com/yxt/external/RedisUtil.class differ diff --git a/externalgateway/target/classes/com/yxt/external/Signature.class b/externalgateway/target/classes/com/yxt/external/Signature.class new file mode 100644 index 0000000..1bdcb40 Binary files /dev/null and b/externalgateway/target/classes/com/yxt/external/Signature.class differ diff --git a/externalgateway/target/classes/com/yxt/external/authutils/CacheConstants.class b/externalgateway/target/classes/com/yxt/external/authutils/CacheConstants.class new file mode 100644 index 0000000..0e7533b Binary files /dev/null and b/externalgateway/target/classes/com/yxt/external/authutils/CacheConstants.class differ diff --git a/externalgateway/target/classes/com/yxt/external/authutils/CharsetKit.class b/externalgateway/target/classes/com/yxt/external/authutils/CharsetKit.class new file mode 100644 index 0000000..fc5e808 Binary files /dev/null and b/externalgateway/target/classes/com/yxt/external/authutils/CharsetKit.class differ diff --git a/externalgateway/target/classes/com/yxt/external/authutils/Convert.class b/externalgateway/target/classes/com/yxt/external/authutils/Convert.class new file mode 100644 index 0000000..e666405 Binary files /dev/null and b/externalgateway/target/classes/com/yxt/external/authutils/Convert.class differ diff --git a/externalgateway/target/classes/com/yxt/external/authutils/IgnoreWhiteProperties.class b/externalgateway/target/classes/com/yxt/external/authutils/IgnoreWhiteProperties.class new file mode 100644 index 0000000..26f046e Binary files /dev/null and b/externalgateway/target/classes/com/yxt/external/authutils/IgnoreWhiteProperties.class differ diff --git a/externalgateway/target/classes/com/yxt/external/authutils/StrFormatter.class b/externalgateway/target/classes/com/yxt/external/authutils/StrFormatter.class new file mode 100644 index 0000000..278bb7a Binary files /dev/null and b/externalgateway/target/classes/com/yxt/external/authutils/StrFormatter.class differ diff --git a/externalgateway/target/classes/com/yxt/external/authutils/StringUtils.class b/externalgateway/target/classes/com/yxt/external/authutils/StringUtils.class new file mode 100644 index 0000000..426b204 Binary files /dev/null and b/externalgateway/target/classes/com/yxt/external/authutils/StringUtils.class differ diff --git a/externalgateway/target/classes/com/yxt/external/rest/ClientRest.class b/externalgateway/target/classes/com/yxt/external/rest/ClientRest.class new file mode 100644 index 0000000..f428d7a Binary files /dev/null and b/externalgateway/target/classes/com/yxt/external/rest/ClientRest.class differ diff --git a/externalgateway/target/classes/com/yxt/external/service/ClientService.class b/externalgateway/target/classes/com/yxt/external/service/ClientService.class new file mode 100644 index 0000000..49a5773 Binary files /dev/null and b/externalgateway/target/classes/com/yxt/external/service/ClientService.class differ diff --git a/externalgateway/target/classes/com/yxt/external/utils/AppKeyConfig.class b/externalgateway/target/classes/com/yxt/external/utils/AppKeyConfig.class new file mode 100644 index 0000000..2da86ae Binary files /dev/null and b/externalgateway/target/classes/com/yxt/external/utils/AppKeyConfig.class differ diff --git a/externalgateway/target/classes/com/yxt/external/utils/HttpStatus.class b/externalgateway/target/classes/com/yxt/external/utils/HttpStatus.class new file mode 100644 index 0000000..df1279f Binary files /dev/null and b/externalgateway/target/classes/com/yxt/external/utils/HttpStatus.class differ diff --git a/externalgateway/target/classes/com/yxt/external/utils/IResultCodeMsg.class b/externalgateway/target/classes/com/yxt/external/utils/IResultCodeMsg.class new file mode 100644 index 0000000..e7d78a3 Binary files /dev/null and b/externalgateway/target/classes/com/yxt/external/utils/IResultCodeMsg.class differ diff --git a/externalgateway/target/classes/com/yxt/external/utils/ResultBean.class b/externalgateway/target/classes/com/yxt/external/utils/ResultBean.class new file mode 100644 index 0000000..6af7778 Binary files /dev/null and b/externalgateway/target/classes/com/yxt/external/utils/ResultBean.class differ diff --git a/externalgateway/target/classes/com/yxt/external/utils/SignatureQuery.class b/externalgateway/target/classes/com/yxt/external/utils/SignatureQuery.class new file mode 100644 index 0000000..bbf1ce1 Binary files /dev/null and b/externalgateway/target/classes/com/yxt/external/utils/SignatureQuery.class differ diff --git a/externalgateway/target/classes/com/yxt/external/utils/SignatureUtil.class b/externalgateway/target/classes/com/yxt/external/utils/SignatureUtil.class new file mode 100644 index 0000000..5ed82bf Binary files /dev/null and b/externalgateway/target/classes/com/yxt/external/utils/SignatureUtil.class differ diff --git a/externalgateway/target/classes/com/yxt/external/utils/WebFluxLoggingConfig.class b/externalgateway/target/classes/com/yxt/external/utils/WebFluxLoggingConfig.class new file mode 100644 index 0000000..fe44c20 Binary files /dev/null and b/externalgateway/target/classes/com/yxt/external/utils/WebFluxLoggingConfig.class differ diff --git a/externalgateway/target/externalgateway-1.0-SNAPSHOT.jar b/externalgateway/target/externalgateway-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..2d67858 Binary files /dev/null and b/externalgateway/target/externalgateway-1.0-SNAPSHOT.jar differ diff --git a/externalgateway/target/externalgateway-1.0-SNAPSHOT.jar.original b/externalgateway/target/externalgateway-1.0-SNAPSHOT.jar.original new file mode 100644 index 0000000..a54ecff Binary files /dev/null and b/externalgateway/target/externalgateway-1.0-SNAPSHOT.jar.original differ diff --git a/externalgateway/target/maven-archiver/pom.properties b/externalgateway/target/maven-archiver/pom.properties new file mode 100644 index 0000000..1a4d3fb --- /dev/null +++ b/externalgateway/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Mon Dec 16 14:04:58 CST 2024 +version=1.0-SNAPSHOT +groupId=com.yxt.external +artifactId=externalgateway diff --git a/externalgateway/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/externalgateway/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..d469eb9 --- /dev/null +++ b/externalgateway/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,6 @@ +com\yxt\external\RedisUtil$3.class +com\yxt\external\RedisUtil$4.class +com\yxt\external\RedisUtil.class +com\yxt\external\RedisUtil$2.class +com\yxt\external\GatewayApplication.class +com\yxt\external\RedisUtil$1.class diff --git a/externalgateway/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/externalgateway/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..55fa131 --- /dev/null +++ b/externalgateway/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,3 @@ +D:\project\yxtt\share-store\externalInterface\externalgateway\src\main\java\com\yxt\external\AuthFilter.java +D:\project\yxtt\share-store\externalInterface\externalgateway\src\main\java\com\yxt\external\RedisUtil.java +D:\project\yxtt\share-store\externalInterface\externalgateway\src\main\java\com\yxt\external\GatewayApplication.java diff --git a/externalgateway/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/externalgateway/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..d723ae0 --- /dev/null +++ b/pom.xml @@ -0,0 +1,403 @@ + + + 4.0.0 + + com.yxt + externalInterface + pom + 1.0-SNAPSHOT + + external + externalgateway + + + + + + 1.8 + + UTF-8 + + UTF-8 + 1.8 + 1.8 + + + + 2.2.9.RELEASE + + Hoxton.SR6 + + 2.2.1.RELEASE + + 1.3.0 + + + + 2.5 + 1.14 + + 1.9.3 + + 2.6.2 + + + 3.4.0 + + 1.2.73 + + 0.9.1 + + + + 2.9.2 + 2.0.5 + + 3.17 + + 2.3.2 + + 1.19 + + 1.7 + + 5.4.0 + 6.0.20.Final + 1.18.24 + 3.1.0 + 3.10.1 + 2.2.9.RELEASE + 1.8.1 + 4.1.2 + 6.5.0 + 2.0.25 + + + + + + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + ${spring-cloud-alibaba.version} + pom + import + + + + com.alibaba.nacos + nacos-client + ${nacos.version} + + + + org.springframework.boot + spring-boot-starter-data-redis + ${redis.version} + + + io.lettuce + lettuce-core + + + + + + com.auth0 + java-jwt + ${java-jwt.version} + + + + redis.clients + jedis + ${jedis.version} + + + + commons-io + commons-io + ${commons.io.version} + + + commons-codec + commons-codec + ${commons-codec.version} + + + + commons-beanutils + commons-beanutils + ${commons.beanutils.version} + + + + org.apache.commons + commons-pool2 + ${common-pool.version} + + + com.baomidou + mybatis-plus-boot-starter + ${mybatis-plus.version} + + + com.baomidou + mybatis-plus-annotation + ${mybatis-plus.version} + + + + com.alibaba + fastjson + ${fastjson.version} + + + + io.jsonwebtoken + jjwt + ${jjwt.version} + + + + + io.springfox + springfox-swagger2 + ${swagger.fox.version} + + + io.springfox + springfox-swagger-ui + ${swagger.fox.version} + + + com.github.xiaoymin + knife4j-dependencies + ${knife4j-Swagger} + pom + import + + + + org.apache.poi + poi-ooxml + ${poi.version} + + + + com.github.penggle + kaptcha + ${kaptcha.version} + + + + eu.bitwalker + UserAgentUtils + ${bitwalker.version} + + + + org.apache.velocity + velocity + ${velocity.version} + + + + + cn.hutool + hutool-all + ${hutool.version} + + + + cn.hutool + hutool-core + ${hutool.version} + + + + cn.hutool + hutool-http + ${hutool.version} + + + + cn.hutool + hutool-crypto + ${hutool.version} + + + + cn.hutool + hutool-cache + ${hutool.version} + + + + cn.hutool + hutool-captcha + ${hutool.version} + + + + cn.hutool + hutool-poi + ${hutool.version} + + + + cn.hutool + hutool-json + ${hutool.version} + + + + cn.hutool + hutool-cron + ${hutool.version} + + + + cn.hutool + hutool-system + ${hutool.version} + + + + cn.hutool + hutool-setting + ${hutool.version} + + + + cn.hutool + hutool-extra + ${hutool.version} + + + + cn.hutool + hutool-aop + ${hutool.version} + + + + cn.hutool + hutool-bloomFilter + ${hutool.version} + + + + cn.hutool + hutool-db + ${hutool.version} + + + + cn.hutool + hutool-log + ${hutool.version} + + + + cn.hutool + hutool-socket + ${hutool.version} + + + + cn.hutool + hutool-dfa + ${hutool.version} + + + + cn.hutool + hutool-script + ${hutool.version} + + + org.hibernate.validator + hibernate-validator + ${hibernate-validator.version} + compile + + + org.projectlombok + lombok + true + ${lombok.version} + + + + + com.deepoove + poi-tl + ${poi-tl.version} + + + + org.apache.poi + poi + ${poi.version} + + + + org.flowable + flowable-engine + ${flowable.version} + compile + + + + org.flowable + flowable-spring-boot-starter-basic + ${flowable.version} + + + org.mybatis + mybatis + + + + + + org.apache.pdfbox + pdfbox + ${pdfbox.version} + + + + + + + + nexus-releases + http://nexus3.yyundong.com/repository/yxt-mvn-releases/ + + + nexus-snapshots + http://nexus3.yyundong.com/repository/yxt-mvn-snapshot/ + + + \ No newline at end of file