Compare commits
155
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a2e3f23798 | ||
|
|
7a45568be6 | ||
|
|
8ba0c64b62 | ||
|
|
22d5a1ea3f | ||
|
|
258417cac7 | ||
|
|
a7b7e2c82d | ||
|
|
88ac989ced | ||
|
|
1837337488 | ||
|
|
e342fa92a8 | ||
|
|
ae76596503 | ||
|
|
b25c795d4e | ||
|
|
b6f5ed6dab | ||
|
|
90e6ec8086 | ||
|
|
ff334b155c | ||
|
|
2fa97d50e1 | ||
|
|
9efd0426d4 | ||
|
|
f6231256d5 | ||
|
|
e6d91c8d1d | ||
|
|
7e50d8d5c6 | ||
|
|
ea771777bb | ||
|
|
84e1767812 | ||
|
|
744cbc532b | ||
|
|
355953940a | ||
|
|
70dd99d497 | ||
|
|
eb98e9e4bd | ||
|
|
52f5b6e0d6 | ||
|
|
0b584352cb | ||
|
|
dfd7b34172 | ||
|
|
015162d5c9 | ||
|
|
e6b81b38ee | ||
|
|
b3355cd1d0 | ||
|
|
9da953619f | ||
|
|
781d530c21 | ||
|
|
419cb53845 | ||
|
|
f73f74939f | ||
|
|
8ea215c58c | ||
|
|
4bde2aee3d | ||
|
|
9996f59fe4 | ||
|
|
e5f8ddd8b6 | ||
|
|
0533d1a941 | ||
|
|
536079a024 | ||
|
|
a648c4a50d | ||
|
|
a484296ab8 | ||
|
|
1708b4384c | ||
|
|
8d89f5ec27 | ||
|
|
84ab2c8bf9 | ||
|
|
14cfad6b50 | ||
|
|
abf2847475 | ||
|
|
65552144eb | ||
|
|
2558e1ab2a | ||
|
|
64d2a5e001 | ||
|
|
801a7c3b9c | ||
|
|
932c432eff | ||
|
|
6606c65d73 | ||
|
|
89b5d544c6 | ||
|
|
8f0d4ed687 | ||
|
|
e77897c597 | ||
|
|
931d63a5da | ||
|
|
8924757467 | ||
|
|
7476599ffd | ||
|
|
bb43850227 | ||
|
|
32d638730d | ||
|
|
c4bd6d18d4 | ||
|
|
035593b419 | ||
|
|
d7df2da828 | ||
|
|
935c154136 | ||
|
|
c8493dd658 | ||
|
|
d2e8d6ab30 | ||
|
|
540a687f7e | ||
|
|
c337a7ed49 | ||
|
|
f7e6f70321 | ||
|
|
4b427e1b2e | ||
|
|
2e284f450d | ||
|
|
af7dda73de | ||
|
|
3ec71c4a88 | ||
|
|
0db01980b8 | ||
|
|
865610fda3 | ||
|
|
8b98c54d11 | ||
|
|
fd579a6f42 | ||
|
|
f14547eb53 | ||
|
|
e71c9d6e58 | ||
|
|
6cb96410a2 | ||
|
|
2ddb557bcc | ||
|
|
29b24e8450 | ||
|
|
04d5ef1645 | ||
|
|
dae359655a | ||
|
|
40744bb5c1 | ||
|
|
d9113d0523 | ||
|
|
6f9b1a6026 | ||
|
|
be97110b3c | ||
|
|
3ea4bb8170 | ||
|
|
4c560ef88c | ||
|
|
50069a27b0 | ||
|
|
5aa70ed41b | ||
|
|
1259c189b0 | ||
|
|
a044117187 | ||
|
|
dfcac0b5a5 | ||
|
|
b29d0b1f3e | ||
|
|
5182db6528 | ||
|
|
c8fdea2c3a | ||
|
|
55196b1c14 | ||
|
|
7e6b464432 | ||
|
|
98af145acb | ||
|
|
1d9629127a | ||
|
|
b55a782473 | ||
|
|
b11a0be679 | ||
|
|
88c3548129 | ||
|
|
9bc90fe601 | ||
|
|
d805e2d642 | ||
|
|
d2da556697 | ||
|
|
3ee81a06eb | ||
|
|
b8799a1ec7 | ||
|
|
b00308b729 | ||
|
|
84a4ee1e76 | ||
|
|
2c0882ae2d | ||
|
|
09880952cf | ||
|
|
e3f242f97b | ||
|
|
bcabed521d | ||
|
|
2199c8c739 | ||
|
|
8bc07e8090 | ||
|
|
7ed03628fa | ||
|
|
2b3fa73db1 | ||
|
|
c78b9c325c | ||
|
|
6c2fb7c013 | ||
|
|
5cc3b9a62f | ||
|
|
c27e2b624d | ||
|
|
21157b70ed | ||
|
|
89e68566bf | ||
|
|
088460459b | ||
|
|
4a7d28350e | ||
|
|
04e26568ae | ||
|
|
52cdfbe6d9 | ||
|
|
2b385f45cd | ||
|
|
51b5ae5d13 | ||
|
|
927b5a4411 | ||
|
|
0beab25b52 | ||
|
|
c830009948 | ||
|
|
4248a334ab | ||
|
|
97330de8ba | ||
|
|
133824fb53 | ||
|
|
f8399951b3 | ||
|
|
3447d2f7bc | ||
|
|
8affee1409 | ||
|
|
a18fd9d59b | ||
|
|
74e735353f | ||
|
|
afc49be45f | ||
|
|
61e52aa744 | ||
|
|
f485b040e1 | ||
|
|
3d4df0a154 | ||
|
|
d58b948c3a | ||
|
|
c6709936f9 | ||
|
|
df299a21ae | ||
|
|
7b10ff2b25 | ||
|
|
0b361ba2b7 | ||
|
|
a950417939 |
@@ -14,6 +14,7 @@ import com.mhd.common.core.domain.entity.RevenueExpensesRecord;
|
||||
import com.mhd.common.core.domain.entity.SysConfigSwitch;
|
||||
import com.mhd.common.core.domain.entity.TmsOrder;
|
||||
import com.mhd.common.core.domain.po.UserPo;
|
||||
import com.mhd.common.core.utils.sms.Result;
|
||||
import com.mhd.common.core.web.domain.AjaxResult;
|
||||
import com.mhd.system.api.domain.*;
|
||||
import com.mhd.system.api.feign.FeignAutoConfiguration;
|
||||
@@ -302,7 +303,13 @@ public interface WlhyServiceFeign {
|
||||
@GetMapping(value = "/feign/transportNote/selectByOrderNum")
|
||||
public R<TmsTransportNote> selectByOrderNum(@RequestParam(value = "orderNo") String orderNo);
|
||||
|
||||
|
||||
/**
|
||||
* 根据发票id查询发票信息
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
@GetMapping(value = "/feign/invoiceList/selectById")
|
||||
public R<TmsInvoiceListDetailsVO> selectInvoiceListById(@RequestParam(value = "id") String id);
|
||||
/**
|
||||
* 运输单表-支付回调
|
||||
* @param tmsPayCallbackList
|
||||
@@ -509,4 +516,6 @@ public interface WlhyServiceFeign {
|
||||
@PostMapping(value = "/feign/outBoundSummary/getOrderListByReconciliation")
|
||||
public R<List<TmsOrder>> getOrderListByReconciliation(@RequestBody ReconciliationDTO reconciliationDTO);
|
||||
|
||||
@GetMapping(value = "/ntocc/tmsSettlementExchangeRate/queryById")
|
||||
public Result<?> queryById(@RequestParam(name="id",required=true) String id);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,226 @@
|
||||
package com.mhd.system.api.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Description: 销项发票表
|
||||
* @Author: lfs
|
||||
* @Date: 2020-02-19 08:50:47
|
||||
* @Version: V1.0
|
||||
*/
|
||||
@Data
|
||||
@TableName("tms_invoice_list")
|
||||
public class TmsInvoiceList implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**主键*/
|
||||
@TableId(type = IdType.ID_WORKER_STR)
|
||||
private String id;
|
||||
/**发票抬头*/
|
||||
@ApiModelProperty(value = "发票抬头")
|
||||
private String invoiceTitle;
|
||||
/**发票金额*/
|
||||
@ApiModelProperty(value = "发票金额")
|
||||
|
||||
private BigDecimal invoiceValue;
|
||||
/**发票备注*/
|
||||
@ApiModelProperty(value = "发票备注")
|
||||
|
||||
private String remark;
|
||||
/**发票状态(0-未开票,1-已取消申请,2-已开票,3-已驳回,4-已寄出,5-已作废)*/
|
||||
@ApiModelProperty(value = "发票状态(0-未开票,1-已取消申请,2-已开票,3-已驳回,4-已寄出,5-已作废)")
|
||||
|
||||
private Integer invoiceState;
|
||||
/**发票申请时间*/
|
||||
@ApiModelProperty(value = "发票申请时间")
|
||||
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private Date invoiceApplyTime;
|
||||
/**申请人ID*/
|
||||
@ApiModelProperty(value = "申请人ID")
|
||||
|
||||
private String applicantId;
|
||||
/**发票申请单号*/
|
||||
@ApiModelProperty(value = "发票申请单号")
|
||||
|
||||
private String applyNumber;
|
||||
/**驳回原因*/
|
||||
@ApiModelProperty(value = "驳回原因")
|
||||
|
||||
private String rejectReason;
|
||||
/**运输单ids*/
|
||||
@ApiModelProperty(value = "运输单ids")
|
||||
|
||||
private String transportationIds;
|
||||
/**退票备注*/
|
||||
@ApiModelProperty(value = "退票备注")
|
||||
|
||||
private String refundRemark;
|
||||
/**处理人ID(取消申请/开票/驳回)*/
|
||||
@ApiModelProperty(value = "处理人ID(取消申请/开票/驳回)")
|
||||
|
||||
private String managerId;
|
||||
/**处理时间*/
|
||||
@ApiModelProperty(value = "处理时间")
|
||||
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private Date managerTime;
|
||||
/**寄出人ID*/
|
||||
@ApiModelProperty(value = "寄出人ID")
|
||||
|
||||
private String sendById;
|
||||
/**寄出时间*/
|
||||
@ApiModelProperty(value = "寄出时间")
|
||||
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private Date sendTime;
|
||||
/**寄出邮费*/
|
||||
@ApiModelProperty(value = "寄出邮费")
|
||||
|
||||
private BigDecimal sendPostage;
|
||||
/**快递公司*/
|
||||
@ApiModelProperty(value = "快递公司")
|
||||
|
||||
private String courierServicesCompany;
|
||||
/**收件地址id*/
|
||||
@ApiModelProperty(value = "收件地址id")
|
||||
|
||||
private String receivingAddressId;
|
||||
/**手机号*/
|
||||
@ApiModelProperty(value = "手机号")
|
||||
|
||||
private String phone;
|
||||
/**收件人姓名*/
|
||||
@ApiModelProperty(value = "收件人姓名")
|
||||
|
||||
private String receivingName;
|
||||
/**邮政编码*/
|
||||
@ApiModelProperty(value = "邮政编码")
|
||||
|
||||
private String postalCode;
|
||||
/**所在地区*/
|
||||
@ApiModelProperty(value = "所在地区")
|
||||
|
||||
private String location;
|
||||
/**创建人*/
|
||||
@ApiModelProperty(value = "创建人")
|
||||
|
||||
private String createBy;
|
||||
/**创建日期*/
|
||||
@ApiModelProperty(value = "创建日期")
|
||||
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private Date createTime;
|
||||
/**更新人*/
|
||||
@ApiModelProperty(value = "更新人")
|
||||
|
||||
private String updateBy;
|
||||
/**更新日期*/
|
||||
@ApiModelProperty(value = "更新日期")
|
||||
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private Date updateTime;
|
||||
/**是否删除(0-否,1-是)*/
|
||||
@ApiModelProperty(value = "是否删除(0-否,1-是)")
|
||||
|
||||
private Integer isDelete;
|
||||
/**所属部门*/
|
||||
@ApiModelProperty(value = "所属部门")
|
||||
|
||||
private String sysOrgCode;
|
||||
/**发票类型(0-增值税专用发票,1-普通发票)*/
|
||||
@ApiModelProperty(value = "发票类型(0-增值税专用发票,1-普通发票)")
|
||||
|
||||
private Integer invoiceType;
|
||||
/**发票性质(0-纸质发票,1-电子发票)*/
|
||||
@ApiModelProperty(value = "发票性质(0-纸质发票,1-电子发票)")
|
||||
|
||||
private Integer invoiceNature;
|
||||
/**发票号*/
|
||||
@ApiModelProperty(value = "发票号")
|
||||
|
||||
private String invoiceNumber;
|
||||
/**快递单号*/
|
||||
@ApiModelProperty(value = "快递单号")
|
||||
|
||||
private String trackingNumber;
|
||||
/**开票代码*/
|
||||
@ApiModelProperty(value = "开票代码")
|
||||
|
||||
private String invoiceCode;
|
||||
/**发票详情信息上报状态:0-未上报,1-已上报,2-上报失败*/
|
||||
@ApiModelProperty(value = "发票详情信息上报状态:0-未上报,1-已上报,2-上报失败")
|
||||
|
||||
private Integer isReport;
|
||||
/**发票详情信息上报失败原因*/
|
||||
@ApiModelProperty(value = "发票详情信息上报失败原因")
|
||||
|
||||
private String errMsg;
|
||||
|
||||
/**发票详情信息上报时间*/
|
||||
@ApiModelProperty(value = "发票详情信息上报时间")
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private Date reportTime;
|
||||
|
||||
@ApiModelProperty(value = "运单事实创建人ID(创建运单时的当前登录人USER-ID)")
|
||||
private String realCreateBy;
|
||||
|
||||
@ApiModelProperty(value = "运单事实创建人名称(创建运单时的当前登录人REAL-NAME)")
|
||||
private String realCreateName;
|
||||
|
||||
@ApiModelProperty(value = "开票时间")
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private Date invoiceMakeTime;
|
||||
|
||||
/**货主信息id*/
|
||||
@ApiModelProperty(value = "货主信息id")
|
||||
|
||||
private String shipperId;
|
||||
|
||||
/**货主信息id*/
|
||||
@ApiModelProperty(value = "货主姓名")
|
||||
|
||||
private String shipperName;
|
||||
|
||||
/**货主信息id*/
|
||||
@ApiModelProperty(value = "货主公司名称")
|
||||
|
||||
private String companyName;
|
||||
|
||||
/**税务登记证号*/
|
||||
@ApiModelProperty(value = "税务登记证号")
|
||||
|
||||
private String taxRegAccount;
|
||||
|
||||
/**组织ID*/
|
||||
@ApiModelProperty(value = "组织ID")
|
||||
|
||||
private Long organizationId;
|
||||
|
||||
/**组织名称*/
|
||||
@ApiModelProperty(value = "组织名称")
|
||||
|
||||
private String organizationName;
|
||||
|
||||
/**一级组织ID*/
|
||||
@ApiModelProperty(value = "一级组织ID")
|
||||
|
||||
private Long topOrganizationId;
|
||||
}
|
||||
+176
@@ -0,0 +1,176 @@
|
||||
package com.mhd.system.api.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Description: 销项发票表
|
||||
* @Author: lfs
|
||||
* @Date: 2020-02-19 08:50:47
|
||||
* @Version: V1.0
|
||||
*/
|
||||
@Data
|
||||
public class TmsInvoiceListDetailsVO implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**主键*/
|
||||
@TableId(type = IdType.ID_WORKER_STR)
|
||||
private String id;
|
||||
/**发票抬头*/
|
||||
@ApiModelProperty(value = "发票抬头")
|
||||
|
||||
private String invoiceTitle;
|
||||
/**发票金额*/
|
||||
@ApiModelProperty(value = "发票金额")
|
||||
|
||||
private BigDecimal invoiceValue;
|
||||
/**发票备注*/
|
||||
@ApiModelProperty(value = "发票备注")
|
||||
|
||||
private String remark;
|
||||
/**发票状态(0-未开票,1-已取消申请,2-已开票,3-已驳回,4-已寄出,5-已作废)*/
|
||||
@ApiModelProperty(value = "发票状态(0-未开票,1-已取消申请,2-已开票,3-已驳回,4-已寄出,5-已作废)")
|
||||
|
||||
private Integer invoiceState;
|
||||
/**发票申请时间*/
|
||||
@ApiModelProperty(value = "发票申请时间")
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private Date invoiceApplyTime;
|
||||
/**申请人ID*/
|
||||
@ApiModelProperty(value = "申请人ID")
|
||||
|
||||
private String applicantId;
|
||||
/**驳回原因*/
|
||||
@ApiModelProperty(value = "驳回原因")
|
||||
|
||||
private String rejectReason;
|
||||
/**退票备注*/
|
||||
@ApiModelProperty(value = "退票备注")
|
||||
|
||||
private String refundRemark;
|
||||
/**处理人ID(取消申请/开票/驳回)*/
|
||||
@ApiModelProperty(value = "处理人ID(取消申请/开票/驳回)")
|
||||
|
||||
private String managerId;
|
||||
/**处理时间*/
|
||||
@ApiModelProperty(value = "处理时间")
|
||||
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private Date managerTime;
|
||||
/**寄出人ID*/
|
||||
@ApiModelProperty(value = "寄出人ID")
|
||||
|
||||
private String sendById;
|
||||
/**寄出时间*/
|
||||
@ApiModelProperty(value = "寄出时间")
|
||||
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private Date sendTime;
|
||||
/**寄出邮费*/
|
||||
@ApiModelProperty(value = "寄出邮费")
|
||||
|
||||
private BigDecimal sendPostage;
|
||||
/**快递公司*/
|
||||
@ApiModelProperty(value = "快递公司")
|
||||
|
||||
private String courierServicesCompany;
|
||||
/**收件地址id*/
|
||||
@ApiModelProperty(value = "收件地址id")
|
||||
|
||||
private String receivingAddressId;
|
||||
/**收件姓名*/
|
||||
@ApiModelProperty(value = "收件姓名")
|
||||
|
||||
private String receivingName;
|
||||
/**收件地址*/
|
||||
@ApiModelProperty(value = "收件地址")
|
||||
|
||||
private String location;
|
||||
/**手机号*/
|
||||
@ApiModelProperty(value = "手机号")
|
||||
|
||||
private String phone;
|
||||
/**运输单ids*/
|
||||
@ApiModelProperty(value = "运输单ids")
|
||||
|
||||
private String transportationIds;
|
||||
/**创建日期*/
|
||||
@ApiModelProperty(value = "创建日期")
|
||||
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private Date createTime;
|
||||
/**税务登记证号*/
|
||||
@ApiModelProperty(value = "税务登记证号")
|
||||
|
||||
private String taxRegAccount;
|
||||
/**运输单列表*/
|
||||
/* @ApiModelProperty(value = "运输单列表")
|
||||
|
||||
private List<TmsOrderVO> tmsOrderVOList;*/
|
||||
/**发票类型(0-增值税专用发票,1-普通发票)*/
|
||||
@ApiModelProperty(value = "发票类型(0-增值税专用发票,1-普通发票)")
|
||||
|
||||
private String invoiceType;
|
||||
/**发票性质(0-纸质发票,1-电子发票)*/
|
||||
@ApiModelProperty(value = "发票性质(0-纸质发票,1-电子发票)")
|
||||
|
||||
private String invoiceNature;
|
||||
/**发票号*/
|
||||
@ApiModelProperty(value = "发票号")
|
||||
|
||||
private String invoiceNumber;
|
||||
/**快递单号*/
|
||||
@ApiModelProperty(value = "快递单号")
|
||||
|
||||
private String trackingNumber;
|
||||
|
||||
/**开票表集合*/
|
||||
@ApiModelProperty(value = "开票表集合")
|
||||
|
||||
private List<TmsMakeOutInvoice> tmsMakeOutInvoices;
|
||||
|
||||
/**账单项目费用*/
|
||||
@ApiModelProperty(value = "账单项目费用")
|
||||
|
||||
private List<Map<String, Object>> feeList;
|
||||
|
||||
/**货主信息id*/
|
||||
@ApiModelProperty(value = "货主信息id")
|
||||
|
||||
private String shipperId;
|
||||
|
||||
/**货主信息id*/
|
||||
@ApiModelProperty(value = "货主姓名")
|
||||
|
||||
private String shipperName;
|
||||
|
||||
/**货主电话*/
|
||||
@ApiModelProperty(value = "货主电话")
|
||||
|
||||
private String shipperPhone;
|
||||
|
||||
/**货主信息id*/
|
||||
@ApiModelProperty(value = "货主公司名称")
|
||||
|
||||
private String companyName;
|
||||
|
||||
@ApiModelProperty(value = "统一社会信用代码")
|
||||
private String regAccount;
|
||||
|
||||
|
||||
|
||||
}
|
||||
+130
@@ -0,0 +1,130 @@
|
||||
package com.mhd.system.api.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Description: 销项发票表
|
||||
* @Author: lfs
|
||||
* @Date: 2020-02-19 08:50:47
|
||||
* @Version: V1.0
|
||||
*/
|
||||
@Data
|
||||
@TableName("tms_make_out_invoice")
|
||||
public class TmsMakeOutInvoice implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**主键*/
|
||||
@TableId(type = IdType.ID_WORKER_STR)
|
||||
private String id;
|
||||
/**发票ID*/
|
||||
@ApiModelProperty(value = "发票ID")
|
||||
|
||||
private String invoiceId;
|
||||
/**发票抬头*/
|
||||
@ApiModelProperty(value = "发票抬头")
|
||||
|
||||
private String invoiceTitle;
|
||||
/**发票金额*/
|
||||
@ApiModelProperty(value = "发票金额")
|
||||
|
||||
private BigDecimal invoiceValue;
|
||||
/**发票备注*/
|
||||
@ApiModelProperty(value = "发票备注")
|
||||
|
||||
private String remark;
|
||||
/**发票状态(0-未开票,1-已取消申请,2-已开票,3-已驳回,4-已寄出,5-已作废)*/
|
||||
@ApiModelProperty(value = "发票状态(0-未开票,1-已取消申请,2-已开票,3-已驳回,4-已寄出,5-已作废)")
|
||||
|
||||
private Integer invoiceState;
|
||||
/**发票申请时间*/
|
||||
@ApiModelProperty(value = "发票申请时间")
|
||||
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd")
|
||||
private Date invoiceApplyTime;
|
||||
/**创建人*/
|
||||
@ApiModelProperty(value = "创建人")
|
||||
|
||||
private String createBy;
|
||||
/**创建日期*/
|
||||
@ApiModelProperty(value = "创建日期")
|
||||
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private Date createTime;
|
||||
/**更新人*/
|
||||
@ApiModelProperty(value = "更新人")
|
||||
|
||||
private String updateBy;
|
||||
/**更新日期*/
|
||||
@ApiModelProperty(value = "更新日期")
|
||||
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private Date updateTime;
|
||||
/**是否删除(0-否,1-是)*/
|
||||
@ApiModelProperty(value = "是否删除(0-否,1-是)")
|
||||
|
||||
private Integer isDelete;
|
||||
/**所属部门*/
|
||||
@ApiModelProperty(value = "所属部门")
|
||||
|
||||
private String sysOrgCode;
|
||||
/**开票号码*/
|
||||
@ApiModelProperty(value = "开票号码")
|
||||
|
||||
private String invoiceNumber;
|
||||
/**开票人ID*/
|
||||
@ApiModelProperty(value = "开票人ID")
|
||||
|
||||
private String makeOutInvoiceId;
|
||||
/**开票时间*/
|
||||
@ApiModelProperty(value = "开票时间")
|
||||
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private Date makeOutInvoiceTime;
|
||||
/**开票代码*/
|
||||
@ApiModelProperty(value = "开票代码")
|
||||
|
||||
private String invoiceCode;
|
||||
|
||||
/**上报状态:0-未上报,1-已上报,2-上报失败*/
|
||||
@ApiModelProperty(value = "上报状态:0-未上报,1-已上报,2-上报失败")
|
||||
|
||||
private Integer isReport;
|
||||
/**上报时间*/
|
||||
@ApiModelProperty(value = "上报时间")
|
||||
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private Date reportTime;
|
||||
/**失败原因*/
|
||||
@ApiModelProperty(value = "失败原因")
|
||||
|
||||
private String errMsg;
|
||||
|
||||
@ApiModelProperty(value = "电子发票地址")
|
||||
private String invoiceFileUrl;
|
||||
|
||||
@ApiModelProperty(value = "发票摘要")
|
||||
private String invoiceAbstract;
|
||||
|
||||
@ApiModelProperty(value = "开票项目")
|
||||
private String invoiceItem;
|
||||
@ApiModelProperty(value = "实际开票客户id")
|
||||
private String actualInvoiceCustomerId;
|
||||
@ApiModelProperty(value = "实际开票客户名称")
|
||||
private String actualInvoiceCustomerName;
|
||||
}
|
||||
@@ -0,0 +1,771 @@
|
||||
/*
|
||||
package com.mhd.system.api.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
*/
|
||||
/**
|
||||
* @Description: 货源表
|
||||
* @Author: lfs
|
||||
* @Date: 2020-02-14 09:49:27
|
||||
* @Version: V1.0
|
||||
*//*
|
||||
|
||||
@Data
|
||||
public class TmsOrderVO implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(type = IdType.ID_WORKER_STR)
|
||||
private String id = "";
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private String createBy = "";
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private String createrAvatar = "";
|
||||
@ApiModelProperty(value = "创建日期")
|
||||
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private Date createTime;
|
||||
@ApiModelProperty(value = "更新人")
|
||||
private String updateBy = "";
|
||||
@ApiModelProperty(value = "更新日期")
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private Date updateTime;
|
||||
@ApiModelProperty(value = "所属部门")
|
||||
private String sysOrgCode = "";
|
||||
@ApiModelProperty(value = "货源单号")
|
||||
|
||||
private String goodsNumber = "";
|
||||
@ApiModelProperty(value = "线路名称ID")
|
||||
private String lineNameId = "";
|
||||
@ApiModelProperty(value = "线路名称")
|
||||
private String lineName = "";
|
||||
@ApiModelProperty(value = "运距(千米)")
|
||||
|
||||
private BigDecimal haulDistance = new BigDecimal("0");
|
||||
@ApiModelProperty(value = "装货地名称")
|
||||
|
||||
private String loadingName = "";
|
||||
@ApiModelProperty(value = "装货地县区编码")
|
||||
private String loadingAreaId = "";
|
||||
@ApiModelProperty(value = "装货地详细地址")
|
||||
|
||||
private String loadingAddress = "";
|
||||
@ApiModelProperty(value = "装货地经度")
|
||||
private String loadingLongitude = "";
|
||||
@ApiModelProperty(value = "装货地纬度")
|
||||
private String loadingLatitude = "";
|
||||
@ApiModelProperty(value = "装货单位")
|
||||
private String loadingUnit = "";
|
||||
@ApiModelProperty(value = "发货人姓名")
|
||||
|
||||
private String freighterName = "";
|
||||
@ApiModelProperty(value = "装货电话")
|
||||
|
||||
private String loadingPhone = "";
|
||||
@ApiModelProperty(value = "装货时间日期(年月日)")
|
||||
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd")
|
||||
private Date loadingDate;
|
||||
@ApiModelProperty(value = "装货时间(上午、下午、24小时)")
|
||||
|
||||
private String loadingTime = "";
|
||||
@ApiModelProperty(value = "装货时间id")
|
||||
private String loadingTimeId;
|
||||
@ApiModelProperty(value = "卸货地名称")
|
||||
|
||||
private String unloadName = "";
|
||||
@ApiModelProperty(value = "卸货地县区编码")
|
||||
private String unloadAreaId = "";
|
||||
@ApiModelProperty(value = "卸货地详细地址")
|
||||
|
||||
private String unloadAddress = "";
|
||||
@ApiModelProperty(value = "卸货地经度")
|
||||
private String unloadLongitude = "";
|
||||
@ApiModelProperty(value = "卸货地纬度")
|
||||
private String unloadLatitude = "";
|
||||
@ApiModelProperty(value = "卸货单位")
|
||||
private String unloadUnit = "";
|
||||
@ApiModelProperty(value = "收货人姓名")
|
||||
|
||||
private String dischargerName = "";
|
||||
@ApiModelProperty(value = "卸货电话")
|
||||
|
||||
private String unloadPhone = "";
|
||||
@ApiModelProperty(value = "卸货时间日期(年月日)")
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd")
|
||||
private Date unloadingData;
|
||||
@ApiModelProperty(value = "卸货时间(上午、下午、24小时)")
|
||||
private String unloadingTime = "";
|
||||
@ApiModelProperty(value = "卸货时间Id")
|
||||
private String unloadingTimeId = "";
|
||||
@ApiModelProperty(value = "货物名称ID")
|
||||
private String goodsNameId = "";
|
||||
@ApiModelProperty(value = "货物大类型")
|
||||
private String goodsType="";
|
||||
@ApiModelProperty(value = "货物小类型")
|
||||
private String goodsName="";
|
||||
@ApiModelProperty(value = "重量小(吨)")
|
||||
private BigDecimal weightMin = new BigDecimal("0");
|
||||
@ApiModelProperty(value = "重量大(吨)")
|
||||
private BigDecimal weightMax = new BigDecimal("0");
|
||||
@ApiModelProperty(value = "货物数量单位(吨/方/件)")
|
||||
|
||||
private String goodsUntis = "";
|
||||
@ApiModelProperty(value = "货物数量单位(吨/方/件)ID")
|
||||
private String goodsUntisId = "";
|
||||
@ApiModelProperty(value = "配载方式ID(0-数量,1-车次)")
|
||||
private Integer transportationModeId =0;
|
||||
@ApiModelProperty(value = "是否接单(0-否,1-是)")
|
||||
private Integer isOrder = 0;
|
||||
@ApiModelProperty(value = "配载方式名称")
|
||||
|
||||
private String transportationName= "";
|
||||
@ApiModelProperty(value = "现已承运车次")
|
||||
private Integer realTrainNumber = 0;
|
||||
@ApiModelProperty(value = "车型车长ID")
|
||||
private String carType = "";
|
||||
@ApiModelProperty(value = "车型车长名称")
|
||||
|
||||
private String carTypeName="";
|
||||
@ApiModelProperty(value = "指定司机ID")
|
||||
private String appointDriverId = "";
|
||||
@ApiModelProperty(value = "指定司机姓名")
|
||||
private String appointDriver = "";
|
||||
@ApiModelProperty(value = "指定司机电话")
|
||||
private String appointDriverPhone = "";
|
||||
@ApiModelProperty(value = "指定司机车牌号")
|
||||
private String appointDriverLicense = "";
|
||||
@ApiModelProperty(value = "服务要求ID")
|
||||
private String serviceRequireId = "";
|
||||
@ApiModelProperty(value = "服务要求名称")
|
||||
|
||||
private String serviceRequire = "";
|
||||
@ApiModelProperty(value = "备注")
|
||||
|
||||
private String remarks = "";
|
||||
@ApiModelProperty(value = "上游客户ID")
|
||||
private String upstreamCustomersId = "";
|
||||
@ApiModelProperty(value = "上游客户姓名")
|
||||
private String upstreamCustomersName = "";
|
||||
@ApiModelProperty(value = "上游客户电话")
|
||||
private String upstreamCustomersPhone = "";
|
||||
@ApiModelProperty(value = "运单类型(0-企业普货、1-企业批量货、2-撮合货、3-客服运单、4-线下运单)")
|
||||
private Integer waybillType ;
|
||||
@ApiModelProperty(value = "运单类型(0-企业普货、1-企业批量货、2-撮合货、3-客服运单、4-线下运单)")
|
||||
private String waybillTypeName = "";
|
||||
@ApiModelProperty(value = "运单来源(0-后台发布、1-app发布、2-导入)")
|
||||
private Integer waybillFrom;
|
||||
@ApiModelProperty(value = "定金")
|
||||
private BigDecimal earnestMoney = new BigDecimal("0");
|
||||
@ApiModelProperty(value = "确认协议重量和")
|
||||
private BigDecimal agreementWeights = new BigDecimal("0");
|
||||
@ApiModelProperty(value = "装货重量和")
|
||||
private BigDecimal loadingNumbers = new BigDecimal("0");
|
||||
@ApiModelProperty(value = "货源是否关闭(0-否,1-是)")
|
||||
private Integer isSource = 0;
|
||||
@ApiModelProperty(value = "货源关闭时间")
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd")
|
||||
private Date sourceCloseTime;
|
||||
@ApiModelProperty(value = "货源关闭人用户ID")
|
||||
private String executorId = "";
|
||||
@ApiModelProperty(value = "是否删除(0-否,1-是)")
|
||||
private Integer isDelete = 0;
|
||||
@ApiModelProperty(value = "运输单号")
|
||||
private String waybillNumber="";
|
||||
@ApiModelProperty(value = "公司名称")
|
||||
private String companyName="";
|
||||
@ApiModelProperty(value = "姓名")
|
||||
|
||||
private String shipperName="";
|
||||
@ApiModelProperty(value = "电话")
|
||||
private String shipperPhone="";
|
||||
@ApiModelProperty(value = "用户ID")
|
||||
private String shipperId = "";
|
||||
@ApiModelProperty(value = "运输司机ID")
|
||||
private String transportationDriverId ="";
|
||||
@ApiModelProperty(value = "运输司机姓名")
|
||||
private String transportationDriver ="";
|
||||
@ApiModelProperty(value = "运输司机电话")
|
||||
private String transportationPhone ="";
|
||||
@ApiModelProperty(value = "运输车辆ID")
|
||||
private String transportationCarId ="";
|
||||
@ApiModelProperty(value = "运输车辆车牌号")
|
||||
private String transportationPlate = "";
|
||||
@ApiModelProperty(value = "货源单创建企业ID")
|
||||
private String createCompanyId = "";
|
||||
@ApiModelProperty(value = "期望运费")
|
||||
|
||||
private BigDecimal freightHope = new BigDecimal("0");
|
||||
@ApiModelProperty(value = "运输状态(0-待确认,1-运输中,2-已完成,3-待评价,4-已评价,5-已取消,6-已关闭)")
|
||||
private Integer waybillStatus;
|
||||
@ApiModelProperty(value = "承运货物数量")
|
||||
private String loadingNumber ="";
|
||||
@ApiModelProperty(value = "车队名称")
|
||||
private String motorcadeName="";
|
||||
@ApiModelProperty(value = "货物类型ID")
|
||||
private String goodsTypeId="";
|
||||
@ApiModelProperty(value = "创建人手机号")
|
||||
private String phone="";
|
||||
@ApiModelProperty(value = "创建人名称")
|
||||
private String realname="";
|
||||
@ApiModelProperty(value = "货运线路(装货市县)")
|
||||
private String lineTitleLeft="";
|
||||
@ApiModelProperty(value = "货运线路(卸货市县)")
|
||||
private String lineTitleRight="";
|
||||
@ApiModelProperty(value = "发货时间距当前时间差")
|
||||
private String daysAgo="";
|
||||
@ApiModelProperty(value = "交易量")
|
||||
private String transportCount = "";
|
||||
@ApiModelProperty(value = "好评率")
|
||||
private String praiseNumber ="100%";
|
||||
@ApiModelProperty(value = "装货时间日期(年月日)")
|
||||
private String loadingDateDay="";
|
||||
@ApiModelProperty(value = "装货时间日期(年-月-日)")
|
||||
private String loadingDateTime="";
|
||||
@ApiModelProperty(value = "卸货时间日期(年-月-日)")
|
||||
private String unloadingDateTime="";
|
||||
@ApiModelProperty(value = "卸货时间日期(年月日)")
|
||||
private String unloadingDateDay="";
|
||||
@ApiModelProperty(value = "是否为常发货源(0-否,1-是)")
|
||||
private Integer isCommon = 0;
|
||||
@ApiModelProperty(value = "审核状态")
|
||||
private String auditStatus;
|
||||
@ApiModelProperty(value = "审核状态中文")
|
||||
private String auditStatusName ="";
|
||||
@ApiModelProperty(value = "运输单号")
|
||||
private String transportationNumber="";
|
||||
@ApiModelProperty(value = "发货运费")
|
||||
private BigDecimal deliveryFreight = new BigDecimal("0");
|
||||
@ApiModelProperty(value = "审核人手机号")
|
||||
private String auditByPhone="";
|
||||
@ApiModelProperty(value = "审核人")
|
||||
private String auditBy="";
|
||||
@ApiModelProperty(value = "审核人名称")
|
||||
private String auditByName="";
|
||||
@ApiModelProperty(value = "审核人公司名称")
|
||||
private String auditByCompanyName="";
|
||||
@ApiModelProperty(value = "所属公司名称")
|
||||
private String platformCompanyName;
|
||||
@ApiModelProperty(value = "运费单价(元/吨)")
|
||||
private BigDecimal transportationUnitPrice;
|
||||
@ApiModelProperty(value = "赫达订单号")
|
||||
private String orderNumber="";
|
||||
@ApiModelProperty(value = "是否长期货源:0-否,1-是")
|
||||
private Integer isLongOrder = 0;
|
||||
@ApiModelProperty(value = "微信小程序图片地址")
|
||||
private String wxaQrcode="";
|
||||
@ApiModelProperty(value = "微信小程序AppID")
|
||||
private String wxaAppID="";
|
||||
@ApiModelProperty(value = "代运营人员用户ID")
|
||||
private String orderAgentUserId="";
|
||||
@ApiModelProperty(value = "代运营人员名称")
|
||||
private String orderAgentUserName="";
|
||||
@ApiModelProperty(value = "代运营人员手机")
|
||||
private String orderAgentUserPhone="";
|
||||
|
||||
@ApiModelProperty(value = "公司经营模式(0-总公司,1-总+分公司)")
|
||||
private Integer isTypeInsuranceUse = 0;
|
||||
@ApiModelProperty(value = "指定平台公司")
|
||||
private String appointCompanyId;
|
||||
@ApiModelProperty(value = "指定平台公司名称")
|
||||
private String appointCompanyName;
|
||||
@ApiModelProperty(value = "服务费")
|
||||
private String serviceRate;
|
||||
@ApiModelProperty(value = "指定货主编号")
|
||||
private String appointShipperId;
|
||||
@ApiModelProperty(value = "指定货主")
|
||||
private String appointShipper;
|
||||
@ApiModelProperty(value = "结算方式:1-按趟结算,2-按数量结算")
|
||||
private Integer radioValue;
|
||||
|
||||
@ApiModelProperty(value = "指定平台公司名称")
|
||||
private String appointCompany;
|
||||
|
||||
|
||||
|
||||
@ApiModelProperty(value = "短驳装货地址")
|
||||
private String shortLoadingAddress;
|
||||
|
||||
@ApiModelProperty(value = "短驳卸货地址")
|
||||
private String shortUnloadAddress;
|
||||
|
||||
@ApiModelProperty(value = "指定设备号")
|
||||
private String appointVehicleDevice;
|
||||
|
||||
@ApiModelProperty(value = "车牌号")
|
||||
private String vehicleLicenseNumber;
|
||||
|
||||
@ApiModelProperty(value = "司机")
|
||||
private String driverName;
|
||||
|
||||
@ApiModelProperty(value = "指定车辆")
|
||||
private String appointVehicle;
|
||||
|
||||
|
||||
|
||||
@ApiModelProperty(value = "发布货源方式 0-未指定;1-企业货源;2-平台货源")
|
||||
private Integer publishOrderType;
|
||||
|
||||
@ApiModelProperty(value = "剩余吨数")
|
||||
private BigDecimal surplusTonnage;
|
||||
|
||||
*/
|
||||
/**是否开启路耗(0-否 1-是)*//*
|
||||
|
||||
@ApiModelProperty(value = "是否开启路耗(0-否 1-是)")
|
||||
@Excel(name = "是否开启路耗(0-否 1-是)", width = 15)
|
||||
private Integer isRoadLoss;
|
||||
*/
|
||||
/**货物价值(元/吨)*//*
|
||||
|
||||
@ApiModelProperty(value = "货物价值(元/吨)")
|
||||
@Excel(name = "货物价值(元/吨)", width = 15)
|
||||
private BigDecimal goodsValue=BigDecimal.ZERO;
|
||||
*/
|
||||
/**路耗模式(0-按比例% 1-按数量(吨))*//*
|
||||
|
||||
@ApiModelProperty(value = "路耗模式(0-按比例% 1-按数量(吨))")
|
||||
@Excel(name = "路耗模式(0-按比例% 1-按数量(吨))", width = 15)
|
||||
private Integer roadLossMode;
|
||||
*/
|
||||
/**路耗结算方式(0-无 1-取装货重量 2-取卸货重量 3-装卸货取大 4-装卸货取小)*//*
|
||||
|
||||
@ApiModelProperty(value = "路耗结算方式(0-无 1-取装货重量 2-取卸货重量 3-装卸货取大 4-装卸货取小)")
|
||||
@Excel(name = "路耗结算方式(0-无 1-取装货重量 2-取卸货重量 3-装卸货取大 4-装卸货取小)", width = 15)
|
||||
private Integer roadLossSettlementMethod;
|
||||
|
||||
*/
|
||||
/**允许货物亏损*//*
|
||||
|
||||
@ApiModelProperty(value = "允许货物亏损(吨或%)")
|
||||
@Excel(name = "允许货物亏损(吨或%)", width = 15)
|
||||
private BigDecimal allowableLoss=BigDecimal.ZERO;
|
||||
|
||||
*/
|
||||
/**超出亏损扣除金额(元/吨)*//*
|
||||
|
||||
@ApiModelProperty(value = "超出亏损扣除金额(元/吨)")
|
||||
@Excel(name = "超出亏损扣除金额(元/吨)", width = 15)
|
||||
private BigDecimal lossDeductionAmount=BigDecimal.ZERO;
|
||||
@ApiModelProperty(value = "上游客户id")
|
||||
@Excel(name = "上游客户id", width = 15)
|
||||
private String upClientId="";
|
||||
|
||||
@ApiModelProperty(value = "货单二维码图片地址")
|
||||
private String qrCodeImgUrl;
|
||||
|
||||
*/
|
||||
/**回单付金额*//*
|
||||
|
||||
@ApiModelProperty(value = "回单付金额")
|
||||
@Excel(name = "回单付金额", width = 15)
|
||||
private BigDecimal receiptPaymentAmount=BigDecimal.ZERO;
|
||||
*/
|
||||
/**预付运费金额*//*
|
||||
|
||||
@ApiModelProperty(value = "预付现金金额")
|
||||
@Excel(name = "预付现金金额", width = 15)
|
||||
private BigDecimal cashAdvance=BigDecimal.ZERO;
|
||||
*/
|
||||
/**到付运费金额*//*
|
||||
|
||||
@ApiModelProperty(value = "到付运费金额")
|
||||
@Excel(name = "到付运费金额", width = 15)
|
||||
private BigDecimal freightAmount=BigDecimal.ZERO;
|
||||
*/
|
||||
/**预付平台油卡金额*//*
|
||||
|
||||
@ApiModelProperty(value = "预付平台油卡金额")
|
||||
@Excel(name = "预付平台油卡金额", width = 15)
|
||||
private BigDecimal oilCardOnline=BigDecimal.ZERO;
|
||||
@ApiModelProperty(value = "是否协议费用生成:0否 1是")
|
||||
private Integer isAutoGenerateProtocol;
|
||||
|
||||
*/
|
||||
/**单车重量*//*
|
||||
|
||||
@ApiModelProperty(value = "单车重量",required = true)
|
||||
private BigDecimal singleVehicleWeight;
|
||||
|
||||
*/
|
||||
/**单车总费用*//*
|
||||
|
||||
@ApiModelProperty(value = "单车总费用")
|
||||
@Excel(name = "单车总费用", width = 15)
|
||||
private BigDecimal freightGross=BigDecimal.ZERO;
|
||||
|
||||
@ApiModelProperty(value = "运费抹零 0-不抹零 ,1-抹零小数位,2-抹零个位,3-抹零十位")
|
||||
private Integer isFreightNullification;
|
||||
|
||||
@ApiModelProperty(value = "运费抹零 0-不抹零 ,1-抹零小数位,2-抹零个位,3-抹零十位")
|
||||
private String isFreightNullificationName;
|
||||
|
||||
@ApiModelProperty(value = "是否允许接多单:0否 1是")
|
||||
private Integer isMultipleOrdersAllowed;
|
||||
|
||||
@ApiModelProperty(value = "发货备注")
|
||||
private String shippingNote;
|
||||
|
||||
@ApiModelProperty(value = "绑卡状态 0-未绑卡 1-已绑卡未完成回填 2-已绑卡已完成回填")
|
||||
private Integer strappedStatus=2;
|
||||
|
||||
@ApiModelProperty("应收结算类型:1-月结,2-现结")
|
||||
private Integer receivableType;
|
||||
|
||||
@ApiModelProperty("项目表ID")
|
||||
private Long projectManagementId;
|
||||
|
||||
@ApiModelProperty(value = "接单司机ID")
|
||||
private String orderDriverId;
|
||||
|
||||
@ApiModelProperty(value = "货物数量")
|
||||
private String goodsQuantity;
|
||||
@ApiModelProperty(value = "货物数量单位code")
|
||||
private String goodsQuantityUnitId;
|
||||
@ApiModelProperty(value = "货物数量单位")
|
||||
private String goodsQuantityUnit;
|
||||
|
||||
@ApiModelProperty(value = "运单数量")
|
||||
private Integer transportNoteCount=0;
|
||||
|
||||
|
||||
@ApiModelProperty(value = "常用货主id")
|
||||
private String topOrder;
|
||||
|
||||
|
||||
//=================批量货派单相关=============================
|
||||
@ApiModelProperty(value = "需求车次")
|
||||
private Integer demandTrainNumber;
|
||||
@ApiModelProperty(value = "承运车次默认0")
|
||||
private Integer carriageNumber;
|
||||
@ApiModelProperty(value = "剩余需求车次")
|
||||
private Integer remainingDemandTrainNumber;
|
||||
|
||||
*/
|
||||
/**货物重量*//*
|
||||
|
||||
@ApiModelProperty(value = "货物重量")
|
||||
private BigDecimal goodsWeight;
|
||||
@ApiModelProperty(value = "货源剩余货物数量")
|
||||
private BigDecimal residueGoodsWeight;
|
||||
@ApiModelProperty(value = "承运货物数量")
|
||||
private BigDecimal transportGoodsWeight;
|
||||
|
||||
//=================竞价相关=============================
|
||||
@ApiModelProperty(value = "查看报价数量")
|
||||
private Integer quotationQuantity = 0;
|
||||
@ApiModelProperty(value = "运单模式(0-普通模式,1-竞价模式)")
|
||||
private Integer waybillMode;
|
||||
@ApiModelProperty(value = "竞价截止时间")
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private Date latestBiddingTime;
|
||||
@ApiModelProperty(value = "预设竞标价")
|
||||
private BigDecimal presetPrice;
|
||||
@ApiModelProperty(value = "竞价单位(元/车,元/吨)")
|
||||
private String biddingUnit;
|
||||
@ApiModelProperty(value = "最高心理价")
|
||||
private BigDecimal highestPrice;
|
||||
|
||||
@ApiModelProperty(value = "订单状态(1-未审核,2-未通过,3-进行中,4-已完成,5-已关闭)")
|
||||
private Integer orderStatus;
|
||||
|
||||
@ApiModelProperty(value = "货源对应运单数量")
|
||||
private Integer transportNum = 0;
|
||||
@ApiModelProperty(value = "货源对应货运单数量")
|
||||
private Integer truckOrderCount = 0;
|
||||
@ApiModelProperty(value = "订单模式(0-手动竞价,1-自动竞价,2-普通模式,其他-全部)")
|
||||
private Integer orderMode;
|
||||
@ApiModelProperty(value = "评标类型(0-自动评标,1-手动评标)")
|
||||
private Integer bidEvaluationType;
|
||||
|
||||
@ApiModelProperty(value = "订单类型:0-自有订单,1-tms订单")
|
||||
private Integer orderType;
|
||||
|
||||
@ApiModelProperty(value = "多装多卸类型")
|
||||
private String layType;
|
||||
|
||||
|
||||
|
||||
@ApiModelProperty(value = "拼单类型(0-不拼单(主单),1-拼单-子单,2-拼单-合单)")
|
||||
private Integer splicingOrderType;
|
||||
|
||||
@ApiModelProperty(value = "拼单发布状态(0-否,1-是)")
|
||||
private Integer splicingStatus;
|
||||
|
||||
@ApiModelProperty(value = "拼单主单id")
|
||||
private String mainOrderId;
|
||||
|
||||
@ApiModelProperty(value = "拼单主单号")
|
||||
private String mainOrderNum;
|
||||
|
||||
@ApiModelProperty(value = "拼单合单id")
|
||||
private String mergeOrderId;
|
||||
|
||||
@ApiModelProperty(value = "拼单合单号")
|
||||
private String mergeOrderNum;
|
||||
|
||||
|
||||
|
||||
@ApiModelProperty(value = "来源系统")
|
||||
private String orderSource;
|
||||
|
||||
@ApiModelProperty(value = "通知单号")
|
||||
private String noticeNumber;
|
||||
|
||||
@ApiModelProperty(value = "司机税率")
|
||||
private BigDecimal driverTaxRate;
|
||||
|
||||
@ApiModelProperty(value = "tms到付运费金额")
|
||||
private BigDecimal tmsFreightAmount;
|
||||
|
||||
@ApiModelProperty(value = "订单其他信息")
|
||||
private Map<String,String> otherOrderInfo;
|
||||
|
||||
|
||||
|
||||
@ApiModelProperty(value = "订单类型")
|
||||
private Integer orderShippingType;
|
||||
@ApiModelProperty(value = "订单类型")
|
||||
private String orderShippingName;
|
||||
@ApiModelProperty(value = "付款方")
|
||||
private String payerTypeName;
|
||||
|
||||
@ApiModelProperty(value = "付款方类型(0-委托方,1-收货方)")
|
||||
@Excel(name = "付款方类型(0-委托方,1-收货方)", width = 15)
|
||||
private Integer payerType;
|
||||
|
||||
@ApiModelProperty(value = "整机编号")
|
||||
private String machineNumber;
|
||||
|
||||
@ApiModelProperty(value = "收货方")
|
||||
private String recipientName;
|
||||
@ApiModelProperty(value = "委托方")
|
||||
private String appointDriverEnterprise;
|
||||
@ApiModelProperty(value = "收货方id")
|
||||
private String recipientId;
|
||||
@ApiModelProperty(value = "委托方id")
|
||||
private String appointDriverEnterpriseId;
|
||||
|
||||
@ApiModelProperty(value = "数字物流平台用户Id")
|
||||
private Long szwlUserId;
|
||||
|
||||
@ApiModelProperty("运费单价")
|
||||
private BigDecimal freightUnitPrice;
|
||||
|
||||
@ApiModelProperty(value = "信息费")
|
||||
private BigDecimal infoFee;
|
||||
|
||||
@ApiModelProperty(value = "信息费状态")
|
||||
private BigDecimal infoFeeStatus;
|
||||
|
||||
@ApiModelProperty(value = "信息费应付单据号")
|
||||
private String infoFeeDocumentNumber;
|
||||
|
||||
@ApiModelProperty(value = "车辆类型Id")
|
||||
private String vehicleTypeId;
|
||||
|
||||
@ApiModelProperty(value = "承运人Id(订单为济南专线使用)")
|
||||
private String carrier;
|
||||
|
||||
|
||||
@ApiModelProperty(value = "第三方订单号")
|
||||
private String thirdPartyOrderNumber;
|
||||
@ApiModelProperty(value = "电子回单状态(0-无状态 1-未上传 2-已上传 3-已拒绝 4-已确认)")
|
||||
private Integer receiptTotalStatus;
|
||||
@ApiModelProperty(value = "已收运费")
|
||||
private BigDecimal collectedFreight;
|
||||
@ApiModelProperty(value = "未收运费")
|
||||
private BigDecimal uncollectedFreight;
|
||||
@ApiModelProperty(value = "订单结算状态:1未出账、2已出账、3部分结算、4已结算")
|
||||
private Integer settlementStatus;
|
||||
@ApiModelProperty(value = "订单运费结算时间")
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private Date settlementTime;
|
||||
@ApiModelProperty(value = "运单发票开具状态(0-未索取,1-已索取,2-已开票,3-部分索取)")
|
||||
private Integer isInvoice;
|
||||
@ApiModelProperty(value = "签收时间")
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private Date signTime;
|
||||
@ApiModelProperty(value = "创建人")
|
||||
private String realCreateName;
|
||||
|
||||
@ApiModelProperty(value = "主运单单号")
|
||||
private String mainOrderNumber;
|
||||
@ApiModelProperty(value = "信息费账单号")
|
||||
private String recordNumber;
|
||||
@ApiModelProperty(value = "信息费收款方")
|
||||
private String infoFeePayee;
|
||||
@ApiModelProperty(value = "信息费收款方方式")
|
||||
private Integer infoFeePayeeType;
|
||||
|
||||
@ApiModelProperty(value = "竞价状态 0-竞价中,1-已完成,2-已关闭")
|
||||
private Integer biddingStatus;
|
||||
|
||||
@ApiModelProperty(value = "目的地")
|
||||
private String destination;
|
||||
|
||||
@ApiModelProperty("运费")
|
||||
private BigDecimal freightCharges;
|
||||
|
||||
@ApiModelProperty(value = "开票时间")
|
||||
@Excel(name = "开票时间", width = 25, format = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private Date invoiceMakeTime;
|
||||
|
||||
@ApiModelProperty("业务员ID")
|
||||
private String salesmanId;
|
||||
|
||||
@ApiModelProperty("业务员ID")
|
||||
private String salesmanName;
|
||||
|
||||
@ApiModelProperty(value = "组织id")
|
||||
private String orgId;
|
||||
|
||||
@ApiModelProperty(value = "所属组织")
|
||||
@Excel(name = "所属组织", width = 15)
|
||||
private String orgName;
|
||||
|
||||
@ApiModelProperty("是否报关(0:否,1:是)")
|
||||
private Integer isDeclare;
|
||||
|
||||
@ApiModelProperty("线路")
|
||||
private String route;
|
||||
|
||||
@ApiModelProperty("柜类型")
|
||||
private String containerType;
|
||||
|
||||
@ApiModelProperty("柜类型名称")
|
||||
private String containerTypeName;
|
||||
|
||||
@ApiModelProperty("卡类型")
|
||||
private String cardType;
|
||||
|
||||
@ApiModelProperty("卡类型名称")
|
||||
private String cardTypeName;
|
||||
|
||||
@ApiModelProperty("外来柜号")
|
||||
private String externalContainerNo;
|
||||
|
||||
@ApiModelProperty("中转地")
|
||||
private String transitPlace;
|
||||
|
||||
@ApiModelProperty("托运人ID")
|
||||
private String shipper;
|
||||
|
||||
@ApiModelProperty("托运人ID")
|
||||
private String customsShipper;
|
||||
|
||||
@ApiModelProperty("托运人电话")
|
||||
private String customsShipperTel;
|
||||
|
||||
@ApiModelProperty("卸货单位")
|
||||
private String unloadingCompany;
|
||||
|
||||
@ApiModelProperty("合同编号")
|
||||
private String contractNo;
|
||||
|
||||
@ApiModelProperty("运费")
|
||||
private BigDecimal freightFee;
|
||||
|
||||
@ApiModelProperty("卸货费")
|
||||
private BigDecimal unloadingFee;
|
||||
|
||||
@ApiModelProperty("报关费")
|
||||
private BigDecimal customsFee;
|
||||
|
||||
@ApiModelProperty("差货费")
|
||||
private BigDecimal shortageFee;
|
||||
|
||||
@ApiModelProperty("杂费")
|
||||
private BigDecimal miscellaneousFee;
|
||||
|
||||
@ApiModelProperty("其他费用")
|
||||
private BigDecimal otherFee;
|
||||
|
||||
@ApiModelProperty("滞车费")
|
||||
private BigDecimal detentionFee;
|
||||
|
||||
@ApiModelProperty("税率")
|
||||
private BigDecimal taxRate;
|
||||
|
||||
@ApiModelProperty("结算币种")
|
||||
private String settlementCurrency;
|
||||
|
||||
@ApiModelProperty("体积")
|
||||
private BigDecimal volume;
|
||||
|
||||
@ApiModelProperty("内容详情")
|
||||
private String detailContent;
|
||||
|
||||
@ApiModelProperty("报关线路")
|
||||
private String customsRoute;
|
||||
|
||||
@ApiModelProperty("报关关口")
|
||||
private String customsPort;
|
||||
|
||||
@ApiModelProperty("报关联系人")
|
||||
private String customsContact;
|
||||
|
||||
@ApiModelProperty("报关联系人电话")
|
||||
private String customsContactPhone;
|
||||
|
||||
@ApiModelProperty("报关备注")
|
||||
private String customsRemark;
|
||||
@ApiModelProperty(value = "单据日期")
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private Date documentDate;
|
||||
|
||||
@ApiModelProperty("组织ID")
|
||||
private Long organizationId;
|
||||
|
||||
@ApiModelProperty("组织名称")
|
||||
private String organizationName;
|
||||
|
||||
@ApiModelProperty("上级组织ID")
|
||||
private Long topOrganizationId;
|
||||
|
||||
//订单审核相关
|
||||
@ApiModelProperty("审核业务员ID")
|
||||
private String auditSalesmanId;
|
||||
@ApiModelProperty("审核业务员")
|
||||
private String auditSalesmanName;
|
||||
@ApiModelProperty("业务确认状态")
|
||||
private Integer businessConfirmStatus;
|
||||
@ApiModelProperty("业务审核状态")
|
||||
private Integer businessAuditStatus;
|
||||
@ApiModelProperty("确认意见")
|
||||
private String opinion;
|
||||
@ApiModelProperty("业务主管id")
|
||||
private String businessManagerId;
|
||||
@ApiModelProperty("业务主管名称")
|
||||
private String businessManagerName;
|
||||
@ApiModelProperty("审核意见")
|
||||
private String auditOpinion;
|
||||
|
||||
|
||||
@ApiModelProperty("费用科目明细")
|
||||
private String tmsOrderAccountListJsonStr;
|
||||
|
||||
}
|
||||
*/
|
||||
+14
@@ -12,6 +12,7 @@ import com.mhd.common.core.domain.entity.R;
|
||||
import com.mhd.common.core.domain.entity.SysConfigSwitch;
|
||||
import com.mhd.common.core.domain.entity.TmsOrder;
|
||||
import com.mhd.common.core.domain.po.UserPo;
|
||||
import com.mhd.common.core.utils.sms.Result;
|
||||
import com.mhd.common.core.web.domain.AjaxResult;
|
||||
import com.mhd.system.api.WlhyServiceFeign;
|
||||
import com.mhd.system.api.domain.*;
|
||||
@@ -211,6 +212,14 @@ public class RemoteWlhyFallbackFactory implements FallbackFactory<WlhyServiceFei
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
public R<TmsInvoiceListDetailsVO> selectInvoiceListById(String id) {
|
||||
R<TmsInvoiceListDetailsVO> res = new R<>();
|
||||
res.setMsg("获取发票信息失败"+cause.getMessage());
|
||||
res.setCode(R.FAIL);
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AjaxResult payCallback(List<TmsPayCallbackDTO> tmsPayCallbackList) {
|
||||
return AjaxResult.error(cause.getMessage());
|
||||
@@ -509,6 +518,11 @@ public class RemoteWlhyFallbackFactory implements FallbackFactory<WlhyServiceFei
|
||||
res.setCode(R.FAIL);
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<?> queryById(String id) {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,6 +38,10 @@ public class LoginUser implements Serializable
|
||||
* 用户名
|
||||
*/
|
||||
private String username;
|
||||
/**
|
||||
* 用户名
|
||||
*/
|
||||
private String realname;
|
||||
|
||||
/**
|
||||
* 登录时间
|
||||
|
||||
@@ -14,15 +14,20 @@ spring:
|
||||
discovery:
|
||||
# server-addr: 127.0.0.1:8848
|
||||
# 线上测试环境配置 容器名+端口号
|
||||
server-addr: 10.33.0.129:6010
|
||||
server-addr: 10.102.192.5:6848
|
||||
username: nacos
|
||||
password: manhuoda@2023
|
||||
#线上正式环境
|
||||
# server-addr: 10.102.192.105:6848
|
||||
# server-addr: 10.102.192.5:6848
|
||||
# username: nacos
|
||||
# password: manhuoda@2023
|
||||
config:
|
||||
# server-addr: 127.0.0.1:8848
|
||||
# 线上测试环境配置 容器名+端口号
|
||||
server-addr: 10.33.0.129:6010
|
||||
server-addr: 10.102.192.5:6848
|
||||
username: nacos
|
||||
password: manhuoda@2023
|
||||
#线上正式环境
|
||||
# server-addr: 10.102.192.105:6848
|
||||
group: DEFAULT_GROUP # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置
|
||||
file-extension: yml #默认properties
|
||||
# 共享配置
|
||||
|
||||
@@ -156,7 +156,7 @@
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.18.4</version>
|
||||
<version>1.18.22</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
|
||||
+75
@@ -0,0 +1,75 @@
|
||||
package com.mhd.common.core.domain.dto;
|
||||
|
||||
import com.mhd.common.core.annotation.Excel;
|
||||
import com.mhd.common.core.web.domain.BaseVOEntity;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 【请填写功能名称】对象 reconciliation_account
|
||||
*
|
||||
* @author gen
|
||||
* @date 2026-01-14
|
||||
*/
|
||||
|
||||
@Data
|
||||
public class ReconciliationAccountDTO extends BaseVOEntity{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("$column.columnComment")
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("所属组织")
|
||||
@Excel(name = "所属组织")
|
||||
private String orgName;
|
||||
|
||||
@ApiModelProperty("组织ID")
|
||||
@Excel(name = "组织ID")
|
||||
private Long organizationId;
|
||||
|
||||
@ApiModelProperty("一级组织ID")
|
||||
@Excel(name = "一级组织ID")
|
||||
private Long topOrganizationId;
|
||||
|
||||
@ApiModelProperty("组织名称")
|
||||
@Excel(name = "组织名称")
|
||||
private String organizationName;
|
||||
|
||||
@ApiModelProperty("应收账单id")
|
||||
@Excel(name = "应收账单id")
|
||||
private Long reconciliationId;
|
||||
|
||||
@ApiModelProperty("科目id")
|
||||
@Excel(name = "科目id")
|
||||
private Long accountId;
|
||||
|
||||
@ApiModelProperty("科目收支类型(1-应收,2-应付")
|
||||
@Excel(name = "科目收支类型", readConverterExp = "科目收支类型(1-应收,2-应付")
|
||||
private Long accountType;
|
||||
|
||||
@ApiModelProperty("科目编码")
|
||||
@Excel(name = "科目编码")
|
||||
private String subjectCode;
|
||||
|
||||
@ApiModelProperty("科目名称")
|
||||
@Excel(name = "科目名称")
|
||||
private String subjectName;
|
||||
|
||||
@ApiModelProperty("科目费率")
|
||||
@Excel(name = "科目费率")
|
||||
private BigDecimal rate;
|
||||
|
||||
@ApiModelProperty("金额")
|
||||
@Excel(name = "金额")
|
||||
private BigDecimal amount;
|
||||
|
||||
|
||||
@ApiModelProperty(name = "组织ID集合")
|
||||
private List<Long> organizationIdList;
|
||||
|
||||
@ApiModelProperty(name = "权限菜单ID")
|
||||
private Long permissionMenuId;
|
||||
}
|
||||
+3
@@ -233,4 +233,7 @@ public class ReconciliationDTO extends BaseVOEntity{
|
||||
@ApiModelProperty("nc同步状态 0-未同步 1-已同步")
|
||||
private Integer skSynchronousStatus;
|
||||
|
||||
@ApiModelProperty(value = "账单科目明细")
|
||||
public List<ReconciliationAccountDTO> reconciliationAccountDTOList;
|
||||
|
||||
}
|
||||
|
||||
+41
@@ -475,6 +475,7 @@ public class TmsOrder implements Serializable {
|
||||
|
||||
@ApiModelProperty(value = "已收运费")
|
||||
private BigDecimal collectedFreight;
|
||||
|
||||
@ApiModelProperty(value = "未收运费")
|
||||
private BigDecimal uncollectedFreight;
|
||||
@ApiModelProperty(value = "少收运费")
|
||||
@@ -522,4 +523,44 @@ public class TmsOrder implements Serializable {
|
||||
|
||||
@ApiModelProperty(value = "付款方名称")
|
||||
private String payer;
|
||||
|
||||
|
||||
@ApiModelProperty("制单人编码nc")
|
||||
private String makerCodeNc;
|
||||
|
||||
@ApiModelProperty("业务员编码nc")
|
||||
private String salesmanCodeNc;
|
||||
|
||||
@ApiModelProperty("税率")
|
||||
private BigDecimal taxRate;
|
||||
|
||||
@ApiModelProperty("结算币种")
|
||||
private String settlementCurrency;
|
||||
|
||||
@ApiModelProperty("合同编号")
|
||||
private String contractNo;
|
||||
|
||||
@ApiModelProperty("客户编码nc")
|
||||
private String customerCodeNc;
|
||||
|
||||
@ApiModelProperty(value = "组织ID")
|
||||
private String orgId;
|
||||
|
||||
@ApiModelProperty(value = "所属组织")
|
||||
private String orgName;
|
||||
|
||||
@ApiModelProperty(value = "组织ID")
|
||||
private Long organizationId;
|
||||
|
||||
@ApiModelProperty(value = "组织名称")
|
||||
private String organizationName;
|
||||
|
||||
@ApiModelProperty(value = "上级组织ID")
|
||||
private Long topOrganizationId;
|
||||
|
||||
@ApiModelProperty(value = "单据日期")
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private java.util.Date documentDate;
|
||||
|
||||
}
|
||||
|
||||
+2
@@ -99,6 +99,8 @@ public class Verification extends BaseVOEntity implements Serializable,Cloneable
|
||||
private Long topOrganizationId;
|
||||
@ApiModelProperty("组织表ID")
|
||||
private Long organizationId;
|
||||
@ApiModelProperty("组织名称")
|
||||
private String organizationName;
|
||||
// @ApiModelProperty("是否月结:1-是,2-否")
|
||||
// private Integer receivableType;
|
||||
@ApiModelProperty("部门id")
|
||||
|
||||
+3
@@ -56,4 +56,7 @@ public class AddressBookPo extends BaseVOEntity implements Serializable
|
||||
private String synthesize;
|
||||
@ApiModelProperty(name = "单位名称")
|
||||
private String unitName;
|
||||
|
||||
@ApiModelProperty(name = "组织ID(用于数据权限过滤,内部使用)", hidden = true)
|
||||
private Long organizationId;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.mhd.common.core.domain.po;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.mhd.common.core.web.domain.BaseVOEntity;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
@@ -24,6 +25,10 @@ public class RolePO extends BaseVOEntity implements Serializable {
|
||||
private String roleTypeName = "";
|
||||
@ApiModelProperty(name = "组织表ID")
|
||||
private Long organizationId = 0L;
|
||||
@ApiModelProperty(name = "组织名称")
|
||||
private String organizationName = "";
|
||||
@ApiModelProperty(name = "一级组织表ID")
|
||||
private Long topOrganizationId = 0L;
|
||||
@ApiModelProperty(name = "职务/角色权限字符,控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasRole('admin')`)")
|
||||
private String roleCode = "";
|
||||
@ApiModelProperty(name = "职务/角色名称")
|
||||
@@ -42,6 +47,9 @@ public class RolePO extends BaseVOEntity implements Serializable {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (ObjectUtil.isNull(o)) {
|
||||
return false;
|
||||
}
|
||||
RolePO rolePO = (RolePO) o;
|
||||
return roleCode.equals(rolePO.getRoleCode());
|
||||
}
|
||||
|
||||
+11
@@ -28,6 +28,8 @@ public class UserDriverListPo {
|
||||
private String driverEnterpriseName="";
|
||||
@ApiModelProperty(name = "登录账号(2-20位)")
|
||||
private String userAccount = "";
|
||||
@ApiModelProperty(name = "组织表ID")
|
||||
private Long organizationId;
|
||||
@ApiModelProperty(name = "组织名称")
|
||||
private String organizationName = "";
|
||||
@ApiModelProperty(name = "身份证号")
|
||||
@@ -301,4 +303,13 @@ public class UserDriverListPo {
|
||||
@ApiModelProperty(value = "是否允许竞价(0-不允许竞价,1-允许参与竞价,2-允许查看竞价)")
|
||||
private Integer isDriverBidding;
|
||||
|
||||
@ApiModelProperty(value = "用户身份")
|
||||
private Integer userIdentity;
|
||||
|
||||
@ApiModelProperty(name = "车辆主体")
|
||||
private String vehicleBody;
|
||||
|
||||
@ApiModelProperty(name = "")
|
||||
private String wlhydriverId;
|
||||
|
||||
}
|
||||
|
||||
+3
@@ -185,6 +185,9 @@ public class UserDriverPo {
|
||||
@ApiModelProperty(name = "用户实名认证状态:0-无状态,1-已注册未认证,2-已认证待审核,3-审核通过,4-已驳回")
|
||||
private Integer userAuthStatus;
|
||||
|
||||
@ApiModelProperty(name = "车辆主体")
|
||||
private String vehicleBody;
|
||||
|
||||
|
||||
//===================车队司机参数===============
|
||||
@ApiModelProperty("车队队长userId")
|
||||
|
||||
+2
@@ -99,6 +99,8 @@ public class VerificationPo extends BaseVOEntity implements Serializable
|
||||
private Long topOrganizationId;
|
||||
@ApiModelProperty("组织表ID")
|
||||
private Long organizationId;
|
||||
@ApiModelProperty("组织名称")
|
||||
private String organizationName;
|
||||
// @ApiModelProperty("是否月结:1-是,2-否")
|
||||
// private Integer receivableType;
|
||||
@ApiModelProperty("部门id")
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.aliyun.oss.ServiceException;
|
||||
import io.minio.MinioClient;
|
||||
import io.minio.PutObjectArgs;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import org.springframework.web.util.UriUtils;
|
||||
|
||||
@@ -15,9 +16,11 @@ import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
@Service
|
||||
public class MinIoUploadService {
|
||||
@Autowired
|
||||
|
||||
private MinioClient minioClient;
|
||||
|
||||
private static String bucket="ngwl";
|
||||
private static String host="http://10.102.192.5:6000";
|
||||
private static String accessKey="minioadmin";
|
||||
@@ -64,7 +67,7 @@ public class MinIoUploadService {
|
||||
.stream(inputStream,inputStream.available(),-1).build();
|
||||
//文件名称相同会覆盖
|
||||
minioClient.putObject(objectArgs);
|
||||
String url =host+ "/"+bucket + "/"+fileName;
|
||||
String url =host+"/browser/"+bucket + "/"+fileName;
|
||||
|
||||
//
|
||||
return url;
|
||||
|
||||
@@ -1,240 +0,0 @@
|
||||
package minio;
|
||||
|
||||
import com.aliyun.oss.ServiceException;
|
||||
import io.minio.MinioClient;
|
||||
import io.minio.errors.InvalidEndpointException;
|
||||
import io.minio.errors.InvalidPortException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.coobird.thumbnailator.Thumbnails;
|
||||
import org.jeecg.modules.oss.dto.WaterMarkDTO;
|
||||
import org.jeecg.modules.system.entity.SysDepartInterfaceInfo;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import org.springframework.web.util.UriUtils;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Description: minio oss 上传工具类
|
||||
*/
|
||||
@Slf4j
|
||||
public class MinioBootUtil {
|
||||
|
||||
private static String bucket;
|
||||
private static String host;
|
||||
private static String accessKey;
|
||||
private static String secretKey;
|
||||
/**
|
||||
* minio 工具客户端
|
||||
*/
|
||||
private static MinioClient minioClient = null;
|
||||
|
||||
private static String FILE_URL;
|
||||
|
||||
/**
|
||||
* @Description 强制初始化minio
|
||||
* @Author Alex
|
||||
* @Date 2023/10/25 11:12
|
||||
*/
|
||||
public static MinioClient forceInitMinio(List<SysDepartInterfaceInfo> sysDepartInterfaceInfoList) throws InvalidPortException, InvalidEndpointException {
|
||||
for (SysDepartInterfaceInfo sysDepartInterfaceInfo : sysDepartInterfaceInfoList) {
|
||||
String interfaceTypeKey = sysDepartInterfaceInfo.getInterfaceTypeKey();//接口参数
|
||||
String interfaceTypeValue = sysDepartInterfaceInfo.getInterfaceTypeValue();//接口参数值
|
||||
switch (interfaceTypeKey) {
|
||||
case "bucket":
|
||||
bucket = interfaceTypeValue;
|
||||
break;
|
||||
case "host":
|
||||
host = interfaceTypeValue;
|
||||
break;
|
||||
case "accessKey":
|
||||
accessKey = interfaceTypeValue;
|
||||
break;
|
||||
case "secretKey":
|
||||
secretKey = interfaceTypeValue;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
minioClient = new MinioClient(host, accessKey, secretKey);
|
||||
return minioClient;
|
||||
}
|
||||
private static MinioClient initMinio() throws InvalidPortException, InvalidEndpointException {
|
||||
if (minioClient == null) {
|
||||
minioClient = new MinioClient(host, accessKey, secretKey);
|
||||
}
|
||||
return minioClient;
|
||||
}
|
||||
/**
|
||||
* 上传文件
|
||||
* 文件上传成功,返回文件完整访问路径
|
||||
* 文件上传失败,返回 null
|
||||
*
|
||||
* @param multipartFile 待上传文件
|
||||
* @param fileDir 文件保存目录
|
||||
* @return oss 中的相对文件路径
|
||||
*/
|
||||
public static String upload(MultipartFile multipartFile, String fileDir, List<SysDepartInterfaceInfo> sysDepartInterfaceInfoList) {
|
||||
for (SysDepartInterfaceInfo sysDepartInterfaceInfo : sysDepartInterfaceInfoList) {
|
||||
String interfaceTypeKey = sysDepartInterfaceInfo.getInterfaceTypeKey();//接口参数
|
||||
String interfaceTypeValue = sysDepartInterfaceInfo.getInterfaceTypeValue();//接口参数值
|
||||
switch (interfaceTypeKey) {
|
||||
case "bucket":
|
||||
bucket = interfaceTypeValue;
|
||||
break;
|
||||
case "host":
|
||||
host = interfaceTypeValue;
|
||||
break;
|
||||
case "accessKey":
|
||||
accessKey = interfaceTypeValue;
|
||||
break;
|
||||
case "secretKey":
|
||||
secretKey = interfaceTypeValue;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
try (InputStream inputStream = multipartFile.getInputStream()) {
|
||||
//初始化minio
|
||||
initMinio();
|
||||
// bucket 不存在,创建
|
||||
if (!minioClient.bucketExists(bucket)) {
|
||||
minioClient.makeBucket(bucket);
|
||||
}
|
||||
// 上传文件的名称
|
||||
String fileName = multipartFile.getOriginalFilename();
|
||||
long timestamp = Calendar.getInstance().getTimeInMillis();
|
||||
// PutObjectOptions,上传配置(文件大小,内存中文件分片大小)
|
||||
// PutObjectOptions putObjectOptions = new PutObjectOptions(multipartFile.getSize(), PutObjectOptions.MIN_MULTIPART_SIZE);
|
||||
// // 文件的ContentType
|
||||
// putObjectOptions.setContentType(multipartFile.getContentType());
|
||||
|
||||
SimpleDateFormat sdYear = new SimpleDateFormat("yyyy");
|
||||
SimpleDateFormat sdMonth = new SimpleDateFormat("MM");
|
||||
SimpleDateFormat sdDay = new SimpleDateFormat("dd");
|
||||
String year = sdYear.format(new Date());
|
||||
String month = sdMonth.format(new Date());
|
||||
String day = sdDay.format(new Date());
|
||||
String filrDir = "wlhy/" + year + "/" + month + "/" + day + "/";
|
||||
|
||||
// minioClient.putObject(bucket, filrDir+timestamp+fileName, inputStream, putObjectOptions);
|
||||
minioClient.putObject(bucket, filrDir+timestamp+fileName, inputStream, multipartFile.getContentType());
|
||||
// 返回访问路径
|
||||
String fileurl = host+ "/"+bucket + "/"+filrDir+timestamp+ UriUtils.encode(fileName, StandardCharsets.UTF_8);
|
||||
System.out.println("fileurl===="+fileurl);
|
||||
FILE_URL = fileurl;
|
||||
return fileurl;
|
||||
} catch (ServiceException e){
|
||||
log.error(e.getErrorMessage());
|
||||
} catch (Exception e){
|
||||
log.error(e.getMessage());
|
||||
}
|
||||
return FILE_URL;
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传文件 带时间水印
|
||||
* 文件上传成功,返回文件完整访问路径
|
||||
* 文件上传失败,返回 null
|
||||
*
|
||||
* @param multipartFile 待上传文件
|
||||
* @param fileDir 文件保存目录
|
||||
* @return oss 中的相对文件路径
|
||||
*/
|
||||
public static String uploadWaterMark(MultipartFile multipartFile, WaterMarkDTO waterMarkDTO, String fileDir, List<SysDepartInterfaceInfo> sysDepartInterfaceInfoList) {
|
||||
for (SysDepartInterfaceInfo sysDepartInterfaceInfo : sysDepartInterfaceInfoList) {
|
||||
String interfaceTypeKey = sysDepartInterfaceInfo.getInterfaceTypeKey();//接口参数
|
||||
String interfaceTypeValue = sysDepartInterfaceInfo.getInterfaceTypeValue();//接口参数值
|
||||
switch (interfaceTypeKey) {
|
||||
case "bucket":
|
||||
bucket = interfaceTypeValue;
|
||||
break;
|
||||
case "host":
|
||||
host = interfaceTypeValue;
|
||||
break;
|
||||
case "accessKey":
|
||||
accessKey = interfaceTypeValue;
|
||||
break;
|
||||
case "secretKey":
|
||||
secretKey = interfaceTypeValue;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 压缩代码
|
||||
InputStream inputStream = null;
|
||||
try {
|
||||
//初始化minio
|
||||
initMinio();
|
||||
// bucket 不存在,创建
|
||||
if (!minioClient.bucketExists(bucket)) {
|
||||
minioClient.makeBucket(bucket);
|
||||
}
|
||||
String OriginalFilename = multipartFile.getOriginalFilename();
|
||||
inputStream = multipartFile.getInputStream();
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
//水印内容
|
||||
String waterMarkContent = sdf.format(new Date());
|
||||
//以下两种方法加水印
|
||||
//方法1
|
||||
if (OriginalFilename.indexOf(".pdf") < 0) {
|
||||
ByteArrayOutputStream byteArrayOutputStreamut = new ByteArrayOutputStream();
|
||||
Thumbnails.of(inputStream).width(1024).keepAspectRatio(true).outputQuality(0.9).toOutputStream(byteArrayOutputStreamut);
|
||||
inputStream = new ByteArrayInputStream(byteArrayOutputStreamut.toByteArray());
|
||||
//添加水印
|
||||
inputStream = OssBootUtil.buildWatermarkOfText(inputStream, waterMarkDTO, OssBootUtil.WaterMarkLocation.SOUTH_WEST, null, 0.5f);
|
||||
}
|
||||
//方法2
|
||||
/*if (ImageUtil.isImage(multipartFile.getOriginalFilename())) {
|
||||
inputStream = ImageUtil.getInputStream(
|
||||
ImageUtil.setWatermark(
|
||||
ImageUtil.compress(
|
||||
ImageIO.read(inputStream)),waterMarkContent),
|
||||
ImageUtil.getFileExtention(multipartFile.getOriginalFilename()));
|
||||
}*/
|
||||
StringBuilder fileUrl = new StringBuilder();
|
||||
String suffix = multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf('.'));
|
||||
// 上传文件的名称
|
||||
String fileName = multipartFile.getOriginalFilename();
|
||||
long timestamp = Calendar.getInstance().getTimeInMillis();
|
||||
// PutObjectOptions,上传配置(文件大小,内存中文件分片大小)
|
||||
// PutObjectOptions putObjectOptions = new PutObjectOptions(multipartFile.getSize(), PutObjectOptions.MIN_MULTIPART_SIZE);
|
||||
// // 文件的ContentType
|
||||
// putObjectOptions.setContentType(multipartFile.getContentType());
|
||||
|
||||
SimpleDateFormat sdYear = new SimpleDateFormat("yyyy");
|
||||
SimpleDateFormat sdMonth = new SimpleDateFormat("MM");
|
||||
SimpleDateFormat sdDay = new SimpleDateFormat("dd");
|
||||
String year = sdYear.format(new Date());
|
||||
String month = sdMonth.format(new Date());
|
||||
String day = sdDay.format(new Date());
|
||||
String filrDir = "wlhy/" + year + "/" + month + "/" + day + "/";
|
||||
|
||||
// minioClient.putObject(bucket, filrDir+timestamp+fileName, inputStream, putObjectOptions);
|
||||
minioClient.putObject(bucket, filrDir+timestamp+fileName, inputStream, multipartFile.getContentType());
|
||||
// 返回访问路径
|
||||
String fileurl = host+ "/"+bucket + "/"+filrDir+timestamp+ UriUtils.encode(fileName, StandardCharsets.UTF_8);
|
||||
System.out.println("fileurl===="+fileurl);
|
||||
FILE_URL = fileurl;
|
||||
return fileurl;
|
||||
} catch (IOException e) {
|
||||
log.error(e.getMessage());
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
}
|
||||
return FILE_URL;
|
||||
}
|
||||
|
||||
}
|
||||
+1
@@ -129,6 +129,7 @@ public class TokenService
|
||||
if (StringUtils.isNotEmpty(token))
|
||||
{
|
||||
String userkey = JwtUtils.getUserKey(token);
|
||||
redisService.deleteObject(userkey);
|
||||
redisService.deleteObject(getTokenKey(userkey));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,16 +16,19 @@ spring:
|
||||
# server-addr: 127.0.0.1:8848
|
||||
# 线上测试环境配置 容器名+端口号
|
||||
# server-addr: 10.102.192.5:6848
|
||||
server-addr: 10.33.0.129:6010
|
||||
# server-addr: 10.33.0.129:6010
|
||||
#线上正式环境
|
||||
# server-addr: 10.102.192.105:6848
|
||||
server-addr: 10.102.192.5:6848
|
||||
username: nacos
|
||||
password: manhuoda@2023
|
||||
config:
|
||||
# server-addr: 127.0.0.1:8848
|
||||
# 线上测试环境配置 容器名+端口号
|
||||
# server-addr: 10.102.192.5:6848
|
||||
server-addr: 10.33.0.129:6010
|
||||
# server-addr: 10.33.0.129:6010
|
||||
#线上正式环境
|
||||
# server-addr: 10.102.192.105:6848
|
||||
server-addr: 10.102.192.5:6848
|
||||
username: nacos
|
||||
password: manhuoda@2023
|
||||
group: DEFAULT_GROUP # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置
|
||||
file-extension: yml #默认properties
|
||||
# 共享配置
|
||||
|
||||
+56
-1
@@ -69,9 +69,37 @@ public class AddressBookApplicationService
|
||||
// 获取登录人id
|
||||
Long userId = SecurityUtils.getLoginUser().getUserid();
|
||||
addressBookPo.setUserId(userId);
|
||||
|
||||
// 添加组织数据权限过滤
|
||||
applyOrganizationDataPermissionForAddressBook(addressBookPo);
|
||||
|
||||
return addressBookDomainService.selectAddressBookList(addressBookPo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 应用组织数据权限过滤(地址簿)
|
||||
* 通过用户表关联来过滤组织数据
|
||||
*/
|
||||
private void applyOrganizationDataPermissionForAddressBook(AddressBookPo addressBookPo) {
|
||||
try {
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (loginUser != null && loginUser.getUserPo() != null) {
|
||||
Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
|
||||
|
||||
// 如果当前登录用户的organizationId为2827(南光组织),可以查询全部组织数据
|
||||
// 其他组织只能查询自己组织的数据
|
||||
if (loginUserOrganizationId != null && !loginUserOrganizationId.equals(2827L)) {
|
||||
// 其他组织:需要通过用户表关联来过滤,只查询同一组织下用户创建的地址簿
|
||||
// 由于AddressBook表只有userId字段,需要在XML中通过用户表关联来过滤
|
||||
addressBookPo.setOrganizationId(loginUserOrganizationId);
|
||||
}
|
||||
// 如果是2827组织,不设置organizationId,可以查询全部
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// 如果获取登录用户信息失败,不添加过滤条件,避免影响正常查询
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增地址簿
|
||||
*
|
||||
@@ -156,12 +184,39 @@ public class AddressBookApplicationService
|
||||
*/
|
||||
public List<CommonRoutePo> selectCommonRouteList(CommonRouteDo commonRouteDo){
|
||||
// 获取登录人id
|
||||
// Long userId = SecurityUtils.getUserId()==0 ? 4L:SecurityUtils.getLoginUser().getUserid();
|
||||
Long userId = SecurityUtils.getLoginUser().getUserid();
|
||||
commonRouteDo.setCreateBy(userId);
|
||||
|
||||
// 添加组织数据权限过滤
|
||||
applyOrganizationDataPermissionForCommonRoute(commonRouteDo);
|
||||
|
||||
return commonRouteDomainService.selectCommonRouteList(commonRouteDo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 应用组织数据权限过滤(常用路线)
|
||||
* 通过用户表关联来过滤组织数据
|
||||
*/
|
||||
private void applyOrganizationDataPermissionForCommonRoute(CommonRouteDo commonRouteDo) {
|
||||
try {
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (loginUser != null && loginUser.getUserPo() != null) {
|
||||
Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
|
||||
|
||||
// 如果当前登录用户的organizationId为2827(南光组织),可以查询全部组织数据
|
||||
// 其他组织只能查询自己组织的数据
|
||||
if (loginUserOrganizationId != null && !loginUserOrganizationId.equals(2827L)) {
|
||||
// 其他组织:需要通过用户表关联来过滤,只查询同一组织下用户创建的常用路线
|
||||
// 由于CommonRoute表只有userId字段,需要在XML中通过用户表关联来过滤
|
||||
commonRouteDo.setOrganizationId(loginUserOrganizationId);
|
||||
}
|
||||
// 如果是2827组织,不设置organizationId,可以查询全部
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// 如果获取登录用户信息失败,不添加过滤条件,避免影响正常查询
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增常用路线
|
||||
*
|
||||
|
||||
+30
-3
@@ -38,10 +38,30 @@ public class ContainerApplicationService {
|
||||
|
||||
public List<ContainerPO> queryList(ContainerDO containerDO) {
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (loginUser != null){
|
||||
if (loginUser != null && loginUser.getUserPo() != null){
|
||||
Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
|
||||
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
|
||||
if (topOrganizationId != null && topOrganizationId != 1){
|
||||
containerDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
|
||||
|
||||
// 数据权限:根据organizationId来设置查询权限
|
||||
// organizationId等于2827时查询全部,其他仅查询各自组织的信息
|
||||
if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
|
||||
// 南光组织(organizationId=2827):可以查询所有组织的数据
|
||||
// 如果前端传递了 organizationId,使用前端传递的值进行过滤
|
||||
// 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
|
||||
if (containerDO.getOrganizationId() == null) {
|
||||
containerDO.setOrganizationId(null);
|
||||
containerDO.setTopOrganizationId(null);
|
||||
}
|
||||
} else {
|
||||
// 其他组织:设置organizationId,只查询当前组织的数据
|
||||
if (topOrganizationId != null && topOrganizationId != 1){
|
||||
containerDO.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
// 如果前端传递了organizationId,验证是否与当前登录用户的组织ID一致
|
||||
if (containerDO.getOrganizationId() != null && !containerDO.getOrganizationId().equals(loginUserOrganizationId)) {
|
||||
// 前端传递了其他组织的organizationId,强制使用当前登录用户的组织ID,防止越权查询
|
||||
containerDO.setOrganizationId(loginUserOrganizationId);
|
||||
}
|
||||
}
|
||||
}
|
||||
return containerDomainService.queryList(containerDO);
|
||||
@@ -52,6 +72,13 @@ public class ContainerApplicationService {
|
||||
* 新增容器管理
|
||||
*/
|
||||
public Boolean insert(ContainerDO containerDO) {
|
||||
// 设置当前登录用户的组织信息
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (loginUser != null && loginUser.getUserPo() != null) {
|
||||
containerDO.setOrganizationId(loginUser.getUserPo().getOrganizationId());
|
||||
containerDO.setOrganizationName(loginUser.getUserPo().getOrganizationName());
|
||||
containerDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
|
||||
}
|
||||
//翻译库区类型
|
||||
setDataDict(containerDO);
|
||||
return containerDomainService.insert(containerDO);
|
||||
|
||||
+174
-11
@@ -22,6 +22,7 @@ import com.mhd.common.core.web.domain.AjaxResult;
|
||||
import com.mhd.common.security.utils.SecurityUtils;
|
||||
import com.mhd.system.api.SystemServiceFeign;
|
||||
import com.mhd.system.api.model.LoginUser;
|
||||
import com.mhd.common.core.domain.po.UserPo;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -50,29 +51,131 @@ public class ExpenseAccountApplicationService {
|
||||
/**
|
||||
* 分页查询费用科目列表
|
||||
*/
|
||||
|
||||
public List<ExpenseAccountPO> queryList(ExpenseAccountDO expenseAccountDO) {
|
||||
setTopOrganizationIdLogin(expenseAccountDO);
|
||||
return expenseAccountDomainService.queryList(expenseAccountDO);
|
||||
try {
|
||||
log.info("开始查询费用科目列表,参数:organizationId={}, topOrganizationId={}, expenseAccountDO={}",
|
||||
expenseAccountDO.getOrganizationId(), expenseAccountDO.getTopOrganizationId(), expenseAccountDO);
|
||||
setDataPermission(expenseAccountDO);
|
||||
|
||||
// 处理 createByName 和 updateByName 字段:
|
||||
// 问题:ExpenseAccountAssembler 在查询场景下可能会自动设置 createByName 和 updateByName 为当前登录用户名
|
||||
// 这会导致 SQL 中添加 create_by_name LIKE '%nanguang%' 和 update_by_name LIKE '%nanguang%' 条件
|
||||
// 解决方案:
|
||||
// 1. 如果查询所有组织(organizationId 和 topOrganizationId 都为 null),清空这些字段(除非前端明确传递了这些字段作为查询条件)
|
||||
// 2. 如果查询指定组织(organizationId 不为 null),且是南光组织查询,如果 createByName 或 updateByName 等于当前登录用户名,清空它们
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (loginUser != null && loginUser.getUserPo() != null) {
|
||||
Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
|
||||
String currentUserName = loginUser.getUsername();
|
||||
|
||||
// 先保存前端传递的 createByName 和 updateByName(用于判断是否是前端传递的查询条件)
|
||||
String frontendCreateByName = expenseAccountDO.getCreateByName();
|
||||
String frontendUpdateByName = expenseAccountDO.getUpdateByName();
|
||||
|
||||
if (expenseAccountDO.getOrganizationId() == null && expenseAccountDO.getTopOrganizationId() == null) {
|
||||
// 查询所有组织的数据时,不应该通过创建者或更新者来过滤,清空这些字段
|
||||
// 除非前端明确传递了这些字段作为查询条件
|
||||
if (frontendCreateByName == null || frontendCreateByName.isEmpty() ||
|
||||
(currentUserName != null && frontendCreateByName.equals(currentUserName))) {
|
||||
// 前端未传递,或者等于当前登录用户名(可能是 Assembler 自动设置的),清空
|
||||
log.info("查询所有组织数据,清空 createByName 过滤条件(前端未传递或由 Assembler 自动设置)");
|
||||
expenseAccountDO.setCreateByName(null);
|
||||
}
|
||||
if (frontendUpdateByName == null || frontendUpdateByName.isEmpty() ||
|
||||
(currentUserName != null && frontendUpdateByName.equals(currentUserName))) {
|
||||
// 前端未传递,或者等于当前登录用户名(可能是 Assembler 自动设置的),清空
|
||||
log.info("查询所有组织数据,清空 updateByName 过滤条件(前端未传递或由 Assembler 自动设置)");
|
||||
expenseAccountDO.setUpdateByName(null);
|
||||
}
|
||||
} else if (expenseAccountDO.getOrganizationId() != null && loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
|
||||
// 南光组织查询指定组织时,如果 createByName 或 updateByName 等于当前登录用户名,说明可能是 Assembler 自动设置的
|
||||
// 清空这些字段,避免限制查询结果(因为其他组织的数据可能不是当前登录用户创建的)
|
||||
if (currentUserName != null) {
|
||||
if (expenseAccountDO.getCreateByName() != null && expenseAccountDO.getCreateByName().equals(currentUserName)) {
|
||||
log.info("南光组织查询指定组织数据(organizationId={}),清空 createByName 过滤条件(可能由 Assembler 自动设置)",
|
||||
expenseAccountDO.getOrganizationId());
|
||||
expenseAccountDO.setCreateByName(null);
|
||||
}
|
||||
if (expenseAccountDO.getUpdateByName() != null && expenseAccountDO.getUpdateByName().equals(currentUserName)) {
|
||||
log.info("南光组织查询指定组织数据(organizationId={}),清空 updateByName 过滤条件(可能由 Assembler 自动设置)",
|
||||
expenseAccountDO.getOrganizationId());
|
||||
expenseAccountDO.setUpdateByName(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
log.info("设置组织ID后,查询参数:organizationId={}, topOrganizationId={}, createByName={}, updateByName={}",
|
||||
expenseAccountDO.getOrganizationId(), expenseAccountDO.getTopOrganizationId(),
|
||||
expenseAccountDO.getCreateByName(), expenseAccountDO.getUpdateByName());
|
||||
List<ExpenseAccountPO> result = expenseAccountDomainService.queryList(expenseAccountDO);
|
||||
log.info("查询费用科目列表成功,返回数据条数:{}", result != null ? result.size() : 0);
|
||||
return result;
|
||||
} catch (Exception e) {
|
||||
log.error("查询费用科目列表异常", e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
public List<ExpenseAccountPO> treeCostSubject(ExpenseAccountDO expenseAccountDO){
|
||||
setTopOrganizationIdLogin(expenseAccountDO);
|
||||
setDataPermission(expenseAccountDO);
|
||||
return expenseAccountDomainService.treeCostSubject(expenseAccountDO);
|
||||
}
|
||||
|
||||
public List<ExpenseAccountPO> subjectTreeCost(ExpenseAccountDO expenseAccountDO){
|
||||
setTopOrganizationIdLogin(expenseAccountDO);
|
||||
setDataPermission(expenseAccountDO);
|
||||
return expenseAccountDomainService.treeCostSubject(expenseAccountDO);
|
||||
}
|
||||
|
||||
|
||||
private void setTopOrganizationIdLogin(ExpenseAccountDO expenseAccountDO){
|
||||
/**
|
||||
* 根据当前登录用户的组织信息实现数据隔离
|
||||
* 当前登录用户为组织ID字段organization_id为2827时可查全部组织数据,其他组织只能查自己
|
||||
*/
|
||||
private void setDataPermission(ExpenseAccountDO expenseAccountDO){
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (loginUser != null){
|
||||
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
|
||||
if (topOrganizationId != null && topOrganizationId != 1){
|
||||
expenseAccountDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
|
||||
if (loginUser == null || loginUser.getUserPo() == null) {
|
||||
log.warn("费用科目查询 - 未获取到登录用户信息,跳过数据权限过滤");
|
||||
return;
|
||||
}
|
||||
|
||||
UserPo userPo = loginUser.getUserPo();
|
||||
Long loginUserOrganizationId = userPo.getOrganizationId();
|
||||
Long topOrganizationId = userPo.getTopOrganizationId();
|
||||
|
||||
// 先保存前端传递的 organizationId(如果存在)
|
||||
Long frontendOrganizationId = expenseAccountDO.getOrganizationId();
|
||||
|
||||
// 数据权限:根据 organizationId 来设置查询权限
|
||||
// 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己
|
||||
if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
|
||||
// 南光组织(organizationId=2827):可以查询所有组织的数据
|
||||
// 如果前端传递了 organizationId,使用前端传递的值进行过滤
|
||||
// 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
|
||||
if (frontendOrganizationId != null) {
|
||||
expenseAccountDO.setOrganizationId(frontendOrganizationId);
|
||||
expenseAccountDO.setTopOrganizationId(null);
|
||||
} else {
|
||||
expenseAccountDO.setOrganizationId(null);
|
||||
expenseAccountDO.setTopOrganizationId(null);
|
||||
}
|
||||
} else {
|
||||
// 其他组织:设置 organizationId,只查询当前组织的数据
|
||||
if (frontendOrganizationId != null) {
|
||||
// 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致
|
||||
if (!frontendOrganizationId.equals(loginUserOrganizationId)) {
|
||||
log.warn("费用科目查询 - 前端传递的组织ID {} 与当前登录用户的组织ID {} 不一致,使用当前登录用户的组织ID进行过滤",
|
||||
frontendOrganizationId, loginUserOrganizationId);
|
||||
expenseAccountDO.setOrganizationId(loginUserOrganizationId);
|
||||
} else {
|
||||
expenseAccountDO.setOrganizationId(frontendOrganizationId);
|
||||
}
|
||||
expenseAccountDO.setTopOrganizationId(topOrganizationId);
|
||||
} else {
|
||||
// 前端没有传递 organizationId,使用当前登录用户的组织ID
|
||||
if (loginUserOrganizationId != null) {
|
||||
expenseAccountDO.setOrganizationId(loginUserOrganizationId);
|
||||
}
|
||||
expenseAccountDO.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -276,6 +379,35 @@ public class ExpenseAccountApplicationService {
|
||||
expenseAccountDO.setUpdateByName(loginUser.getUsername());
|
||||
return expenseAccountDomainService.update(expenseAccountDO);
|
||||
}
|
||||
/**
|
||||
* 修改创建订单是否固定显示 0-否 1-是
|
||||
* @param expenseAccountDTO
|
||||
* @return
|
||||
*/
|
||||
public boolean changeFixedOrderDisplay(ExpenseAccountDTO expenseAccountDTO) {
|
||||
//获取登录用户信息
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (ObjectUtil.isNull(loginUser)) {
|
||||
throw new DigitalLogisticsException(UserError.TIMEOUT);
|
||||
}
|
||||
//根据id修改启用状态停用状态
|
||||
if(expenseAccountDTO.getExpenseAccountId() == null){
|
||||
throw new ServiceException("费用科目id不能为空");
|
||||
}
|
||||
if(expenseAccountDTO.getFixedOrderDisplay() == null){
|
||||
throw new ServiceException("状态不能为空");
|
||||
}
|
||||
if(expenseAccountDTO.getFixedOrderDisplay() != 0 && expenseAccountDTO.getFixedOrderDisplay()!=1){
|
||||
throw new ServiceException("状态错误");
|
||||
}
|
||||
ExpenseAccountDO expenseAccountDO = new ExpenseAccountDO();
|
||||
expenseAccountDO.setExpenseAccountId(expenseAccountDTO.getExpenseAccountId());
|
||||
expenseAccountDO.setFixedOrderDisplay(expenseAccountDTO.getFixedOrderDisplay());
|
||||
expenseAccountDO.setUpdateBy(loginUser.getUserid());
|
||||
expenseAccountDO.setUpdateTime(new Date());
|
||||
expenseAccountDO.setUpdateByName(loginUser.getUsername());
|
||||
return expenseAccountDomainService.update(expenseAccountDO);
|
||||
}
|
||||
/**
|
||||
* 根据编码查询费用科目信息
|
||||
*/
|
||||
@@ -287,13 +419,44 @@ public class ExpenseAccountApplicationService {
|
||||
}
|
||||
|
||||
public List<QueryExpenseAccountPO> selectExpenseAccount(SearchExpenseAccountDO searchExpenseAccountDO){
|
||||
setDataPermissionForSearch(searchExpenseAccountDO);
|
||||
return expenseAccountDomainService.selectExpenseAccount(searchExpenseAccountDO);
|
||||
}
|
||||
|
||||
public List<QueryExpenseAccountPO> selectOtherExpenseAccount(SearchExpenseAccountDO searchExpenseAccountDO){
|
||||
setDataPermissionForSearch(searchExpenseAccountDO);
|
||||
return expenseAccountDomainService.selectOtherExpenseAccount(searchExpenseAccountDO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 为 SearchExpenseAccountDO 设置数据权限
|
||||
*/
|
||||
private void setDataPermissionForSearch(SearchExpenseAccountDO searchExpenseAccountDO) {
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (loginUser == null || loginUser.getUserPo() == null) {
|
||||
log.warn("费用科目查询 - 未获取到登录用户信息,跳过数据权限过滤");
|
||||
return;
|
||||
}
|
||||
|
||||
UserPo userPo = loginUser.getUserPo();
|
||||
Long loginUserOrganizationId = userPo.getOrganizationId();
|
||||
Long topOrganizationId = userPo.getTopOrganizationId();
|
||||
|
||||
// 数据权限:根据 organizationId 来设置查询权限
|
||||
// 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己
|
||||
if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
|
||||
// 南光组织(organizationId=2827):可以查询所有组织的数据,不设置组织过滤条件
|
||||
searchExpenseAccountDO.setOrganizationId(null);
|
||||
searchExpenseAccountDO.setTopOrganizationId(null);
|
||||
} else {
|
||||
// 其他组织:只查询当前组织的数据
|
||||
if (loginUserOrganizationId != null) {
|
||||
searchExpenseAccountDO.setOrganizationId(loginUserOrganizationId);
|
||||
}
|
||||
searchExpenseAccountDO.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
}
|
||||
|
||||
public List<QueryExpenseAccountPO> selectSocialVehicleExpenseAccount(){
|
||||
return expenseAccountDomainService.selectSocialVehicleExpenseAccount();
|
||||
}
|
||||
|
||||
+179
-13
@@ -35,24 +35,190 @@ public class ServiceItemsManageApplicationService {
|
||||
/**
|
||||
* 分页查询服务项管理列表
|
||||
*/
|
||||
|
||||
public List<ServiceItemsManagePO> queryList(ServiceItemsManageDO serviceItemsManageDO) {
|
||||
setTopOrganizationIdLogin(serviceItemsManageDO);
|
||||
return serviceItemsManageDomainService.queryList(serviceItemsManageDO);
|
||||
try {
|
||||
log.info("开始查询服务项管理列表,参数:organizationId={}, topOrganizationId={}, serviceItemsManageDO={}",
|
||||
serviceItemsManageDO.getOrganizationId(), serviceItemsManageDO.getTopOrganizationId(), serviceItemsManageDO);
|
||||
|
||||
// 先保存前端传递的 organizationId 和 topOrganizationId(如果存在)
|
||||
// 注意:这里需要在设置权限逻辑之前保存,因为 Assembler 可能已经设置了这些值
|
||||
Long frontendOrganizationId = serviceItemsManageDO.getOrganizationId();
|
||||
Long frontendTopOrganizationId = serviceItemsManageDO.getTopOrganizationId();
|
||||
|
||||
// 获取登录用户信息
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
Long loginUserOrganizationId = null;
|
||||
Long loginUserTopOrganizationId = null;
|
||||
|
||||
if (loginUser != null && loginUser.getUserPo() != null) {
|
||||
loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
|
||||
loginUserTopOrganizationId = loginUser.getUserPo().getTopOrganizationId();
|
||||
}
|
||||
|
||||
log.info("登录用户信息:loginUserOrganizationId={}, loginUserTopOrganizationId={}, 前端传递:frontendOrganizationId={}, frontendTopOrganizationId={}",
|
||||
loginUserOrganizationId, loginUserTopOrganizationId, frontendOrganizationId, frontendTopOrganizationId);
|
||||
|
||||
// 数据权限:根据 organizationId 来设置查询权限
|
||||
// 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己
|
||||
if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
|
||||
// 南光组织(organizationId=2827):可以查询所有组织的数据
|
||||
// 如果前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤
|
||||
// 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
|
||||
if (frontendOrganizationId != null) {
|
||||
// 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤
|
||||
serviceItemsManageDO.setOrganizationId(frontendOrganizationId);
|
||||
serviceItemsManageDO.setTopOrganizationId(null); // 明确设置为 null,避免使用 topOrganizationId 条件
|
||||
log.info("南光组织查询指定组织:organizationId={}", frontendOrganizationId);
|
||||
} else {
|
||||
// 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
|
||||
serviceItemsManageDO.setOrganizationId(null);
|
||||
serviceItemsManageDO.setTopOrganizationId(null);
|
||||
log.info("南光组织查询所有组织:不设置组织过滤条件");
|
||||
}
|
||||
} else {
|
||||
// 其他组织:设置organizationId,只查询当前组织的数据
|
||||
// 其他组织只能查询自己组织的数据,不能查询其他组织的数据
|
||||
if (frontendOrganizationId != null) {
|
||||
// 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致
|
||||
if (!frontendOrganizationId.equals(loginUserOrganizationId)) {
|
||||
// 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询
|
||||
log.warn("服务项管理查询 - 前端传递的组织ID {} 与当前登录用户的组织ID {} 不一致,使用当前登录用户的组织ID进行过滤",
|
||||
frontendOrganizationId, loginUserOrganizationId);
|
||||
serviceItemsManageDO.setOrganizationId(loginUserOrganizationId);
|
||||
} else {
|
||||
// 前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值
|
||||
serviceItemsManageDO.setOrganizationId(frontendOrganizationId);
|
||||
}
|
||||
if (loginUserTopOrganizationId != null) {
|
||||
serviceItemsManageDO.setTopOrganizationId(loginUserTopOrganizationId);
|
||||
}
|
||||
} else {
|
||||
// 前端没有传递 organizationId,使用当前登录用户的组织ID
|
||||
if (loginUserOrganizationId != null) {
|
||||
serviceItemsManageDO.setOrganizationId(loginUserOrganizationId);
|
||||
}
|
||||
if (loginUserTopOrganizationId != null) {
|
||||
serviceItemsManageDO.setTopOrganizationId(loginUserTopOrganizationId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 处理 createByName 和 updateByName 字段:
|
||||
// 问题:Assembler 在查询场景下(serviceItemsManageId == null)会自动设置 createByName 和 updateByName 为当前登录用户名
|
||||
// 这会导致 SQL 中添加 create_by_name LIKE '%nanguang%' 和 update_by_name LIKE '%nanguang%' 条件
|
||||
// 解决方案:
|
||||
// 1. 如果查询所有组织(organizationId 和 topOrganizationId 都为 null),清空这些字段
|
||||
// 2. 如果查询指定组织(organizationId 不为 null),且是南光组织查询,如果 createByName 或 updateByName 等于当前登录用户名,清空它们
|
||||
// 因为查询其他组织的数据时,不应该通过当前登录用户的名称来过滤
|
||||
// 注意:这种方法可能会误判(如果前端确实传递了当前登录用户名作为查询条件),但这种情况很少见,且影响较小
|
||||
|
||||
String currentUserName = null;
|
||||
if (loginUser != null && loginUser.getUserPo() != null) {
|
||||
currentUserName = loginUser.getUsername();
|
||||
}
|
||||
|
||||
if (serviceItemsManageDO.getOrganizationId() == null && serviceItemsManageDO.getTopOrganizationId() == null) {
|
||||
// 查询所有组织的数据时,不应该通过创建者或更新者来过滤,清空这些字段
|
||||
log.info("查询所有组织数据,清空 createByName 和 updateByName 过滤条件,避免限制查询结果");
|
||||
serviceItemsManageDO.setCreateByName(null);
|
||||
serviceItemsManageDO.setUpdateByName(null);
|
||||
} else if (serviceItemsManageDO.getOrganizationId() != null && loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
|
||||
// 南光组织查询指定组织时,如果 createByName 或 updateByName 等于当前登录用户名,说明可能是 Assembler 自动设置的
|
||||
// 清空这些字段,避免限制查询结果(因为其他组织的数据可能不是当前登录用户创建的)
|
||||
if (currentUserName != null) {
|
||||
if (serviceItemsManageDO.getCreateByName() != null && serviceItemsManageDO.getCreateByName().equals(currentUserName)) {
|
||||
log.info("南光组织查询指定组织数据(organizationId={}),清空 createByName 过滤条件(可能由 Assembler 自动设置)",
|
||||
serviceItemsManageDO.getOrganizationId());
|
||||
serviceItemsManageDO.setCreateByName(null);
|
||||
}
|
||||
if (serviceItemsManageDO.getUpdateByName() != null && serviceItemsManageDO.getUpdateByName().equals(currentUserName)) {
|
||||
log.info("南光组织查询指定组织数据(organizationId={}),清空 updateByName 过滤条件(可能由 Assembler 自动设置)",
|
||||
serviceItemsManageDO.getOrganizationId());
|
||||
serviceItemsManageDO.setUpdateByName(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
log.info("设置组织ID后,查询参数:organizationId={}, topOrganizationId={}, createByName={}, updateByName={}",
|
||||
serviceItemsManageDO.getOrganizationId(), serviceItemsManageDO.getTopOrganizationId(),
|
||||
serviceItemsManageDO.getCreateByName(), serviceItemsManageDO.getUpdateByName());
|
||||
List<ServiceItemsManagePO> result = serviceItemsManageDomainService.queryList(serviceItemsManageDO);
|
||||
log.info("查询服务项管理列表成功,返回数据条数:{}", result != null ? result.size() : 0);
|
||||
return result;
|
||||
} catch (Exception e) {
|
||||
log.error("查询服务项管理列表异常", e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
public List<ServiceItemsManagePO> getCostTypeList(ServiceItemsManageDO serviceItemsManageDO){
|
||||
setTopOrganizationIdLogin(serviceItemsManageDO);
|
||||
return serviceItemsManageDomainService.getCostsType(serviceItemsManageDO);
|
||||
}
|
||||
|
||||
private void setTopOrganizationIdLogin(ServiceItemsManageDO serviceItemsManageDO){
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (loginUser != null){
|
||||
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
|
||||
if (topOrganizationId != null && topOrganizationId != 1){
|
||||
serviceItemsManageDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
|
||||
try {
|
||||
log.info("开始查询费用类别列表,参数:{}", serviceItemsManageDO);
|
||||
|
||||
// 先保存前端传递的 organizationId(如果存在)
|
||||
Long frontendOrganizationId = serviceItemsManageDO.getOrganizationId();
|
||||
|
||||
// 获取登录用户信息
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
Long loginUserOrganizationId = null;
|
||||
Long topOrganizationId = null;
|
||||
|
||||
if (loginUser != null && loginUser.getUserPo() != null) {
|
||||
loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
|
||||
topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
|
||||
}
|
||||
|
||||
// 数据权限:根据 organizationId 来设置查询权限
|
||||
// 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己
|
||||
if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
|
||||
// 南光组织(organizationId=2827):可以查询所有组织的数据
|
||||
// 如果前端传递了 organizationId(包括2827),使用前端传递的值进行过滤
|
||||
// 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
|
||||
if (frontendOrganizationId != null) {
|
||||
// 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤
|
||||
serviceItemsManageDO.setOrganizationId(frontendOrganizationId);
|
||||
serviceItemsManageDO.setTopOrganizationId(null);
|
||||
} else {
|
||||
// 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
|
||||
serviceItemsManageDO.setOrganizationId(null);
|
||||
serviceItemsManageDO.setTopOrganizationId(null);
|
||||
}
|
||||
} else {
|
||||
// 其他组织:设置organizationId,只查询当前组织的数据
|
||||
// 其他组织只能查询自己组织的数据,不能查询其他组织的数据
|
||||
if (frontendOrganizationId != null) {
|
||||
// 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致
|
||||
if (!frontendOrganizationId.equals(loginUserOrganizationId)) {
|
||||
// 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询
|
||||
log.warn("费用类别查询 - 前端传递的组织ID {} 与当前登录用户的组织ID {} 不一致,使用当前登录用户的组织ID进行过滤",
|
||||
frontendOrganizationId, loginUserOrganizationId);
|
||||
serviceItemsManageDO.setOrganizationId(loginUserOrganizationId);
|
||||
} else {
|
||||
// 前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值
|
||||
serviceItemsManageDO.setOrganizationId(frontendOrganizationId);
|
||||
}
|
||||
if (topOrganizationId != null) {
|
||||
serviceItemsManageDO.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
} else {
|
||||
// 前端没有传递 organizationId,使用当前登录用户的组织ID
|
||||
if (loginUserOrganizationId != null) {
|
||||
serviceItemsManageDO.setOrganizationId(loginUserOrganizationId);
|
||||
}
|
||||
if (topOrganizationId != null) {
|
||||
serviceItemsManageDO.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
log.info("设置组织ID后,费用类别查询参数:organizationId={}, topOrganizationId={}",
|
||||
serviceItemsManageDO.getOrganizationId(), serviceItemsManageDO.getTopOrganizationId());
|
||||
List<ServiceItemsManagePO> result = serviceItemsManageDomainService.getCostsType(serviceItemsManageDO);
|
||||
log.info("查询费用类别列表成功,返回数据条数:{}", result != null ? result.size() : 0);
|
||||
return result;
|
||||
} catch (Exception e) {
|
||||
log.error("查询费用类别列表异常", e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+7
@@ -56,6 +56,13 @@ public class WarehouseApplicationService {
|
||||
* 新增仓库
|
||||
*/
|
||||
public Boolean insert(WarehouseDO warehouseDO) {
|
||||
// 设置当前登录用户的组织信息
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (loginUser != null && loginUser.getUserPo() != null) {
|
||||
warehouseDO.setOrganizationId(loginUser.getUserPo().getOrganizationId());
|
||||
warehouseDO.setOrganizationName(loginUser.getUserPo().getOrganizationName());
|
||||
warehouseDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
|
||||
}
|
||||
//设置数据字典键值
|
||||
setDataDict(warehouseDO);
|
||||
return warehouseDomainService.insert(warehouseDO);
|
||||
|
||||
+3
@@ -126,4 +126,7 @@ public class CommonRouteDo extends BaseVOEntity
|
||||
|
||||
@ApiModelProperty(name = "运费单价")
|
||||
private BigDecimal freightUnitPrice;
|
||||
|
||||
@ApiModelProperty(name = "组织ID(用于数据权限过滤,内部使用)", hidden = true)
|
||||
private Long organizationId;
|
||||
}
|
||||
|
||||
+6
@@ -101,4 +101,10 @@ public class ExpenseAccount extends BaseVOEntity{
|
||||
@ApiModelProperty(name = "收支类型")
|
||||
private Integer accountExpenseType;
|
||||
|
||||
@ApiModelProperty(name = "创建订单是否固定显示 0-否 1-是")
|
||||
private Integer fixedOrderDisplay;
|
||||
|
||||
@ApiModelProperty("费率")
|
||||
private BigDecimal rate;
|
||||
|
||||
}
|
||||
|
||||
+11
-1
@@ -10,6 +10,7 @@ import com.mhd.basic.domain.expenseAccount.repository.todo.ExpenseAccountDO;
|
||||
import com.mhd.basic.domain.expenseAccount.repository.todo.ExpenseAccountDoMap;
|
||||
import com.mhd.basic.domain.expenseAccount.repository.todo.SearchExpenseAccountDO;
|
||||
import com.mhd.basic.interfaces.dto.expenseAccount.SearchExpenseAccountDTO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -24,6 +25,7 @@ import java.util.List;
|
||||
* @author gen
|
||||
* @date 2024-06-04
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class ExpenseAccountImpl extends ServiceImpl<ExpenseAccountMapper, ExpenseAccount> implements IExpenseAccountService{
|
||||
@Autowired
|
||||
@@ -35,7 +37,15 @@ public class ExpenseAccountImpl extends ServiceImpl<ExpenseAccountMapper, Expens
|
||||
@Override
|
||||
public List<ExpenseAccountPO> queryList(ExpenseAccountDO expenseAccountDO)
|
||||
{
|
||||
return expenseAccountMapper.queryList(expenseAccountDO);
|
||||
// 添加日志,记录查询参数
|
||||
log.info("ExpenseAccountImpl.queryList 查询参数:topOrganizationId={}, subjectName={}, subjectCode={}, status={}",
|
||||
expenseAccountDO.getTopOrganizationId(),
|
||||
expenseAccountDO.getSubjectName(),
|
||||
expenseAccountDO.getSubjectCode(),
|
||||
expenseAccountDO.getStatus());
|
||||
List<ExpenseAccountPO> result = expenseAccountMapper.queryList(expenseAccountDO);
|
||||
log.info("ExpenseAccountImpl.queryList 查询结果:{} 条", result != null ? result.size() : 0);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+7
@@ -122,4 +122,11 @@ public class ExpenseAccountPO extends BaseVOEntity{
|
||||
@Excel(name = "服务项税率")
|
||||
private BigDecimal taxRate;
|
||||
|
||||
|
||||
|
||||
@ApiModelProperty("费率")
|
||||
private BigDecimal rate;
|
||||
|
||||
@ApiModelProperty(name = "创建订单是否固定显示 0-否 1-是")
|
||||
private Integer fixedOrderDisplay;
|
||||
}
|
||||
|
||||
+11
@@ -39,5 +39,16 @@ public class QueryExpenseAccountPO {
|
||||
@Excel(name = "上级科目名称")
|
||||
private String upperSubject;
|
||||
|
||||
@ApiModelProperty("一级组织表ID")
|
||||
@Excel(name = "一级组织表ID")
|
||||
private Long topOrganizationId;
|
||||
|
||||
@ApiModelProperty("组织表ID")
|
||||
@Excel(name = "组织表ID")
|
||||
private Long organizationId;
|
||||
|
||||
@ApiModelProperty("组织名称")
|
||||
@Excel(name = "组织名称")
|
||||
private String organizationName;
|
||||
|
||||
}
|
||||
|
||||
+21
@@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import java.math.BigDecimal;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import com.mhd.common.core.web.domain.BaseVOEntity;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -125,4 +126,24 @@ public class ExpenseAccountDO extends BaseVOEntity{
|
||||
|
||||
@ApiModelProperty("服务项名称")
|
||||
private String serviceItemsName;
|
||||
|
||||
@ApiModelProperty("费率")
|
||||
private BigDecimal rate;
|
||||
|
||||
@ApiModelProperty(name = "创建订单是否固定显示 0-否 1-是")
|
||||
private Integer fixedOrderDisplay;
|
||||
|
||||
@ApiModelProperty(name = "创建者姓名")
|
||||
private String createByName;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
private Date createTime;
|
||||
|
||||
@ApiModelProperty(value = "更新者")
|
||||
private Long updateBy;
|
||||
|
||||
@ApiModelProperty(name = "创建者姓名")
|
||||
private String updateByName;
|
||||
}
|
||||
|
||||
+6
@@ -25,4 +25,10 @@ public class SearchExpenseAccountDO{
|
||||
|
||||
@ApiModelProperty("社会车辆固定显示(1-是,2-否)")
|
||||
private Integer societyStatus;
|
||||
|
||||
@ApiModelProperty("组织ID")
|
||||
private Long organizationId;
|
||||
|
||||
@ApiModelProperty("上级组织ID")
|
||||
private Long topOrganizationId;
|
||||
}
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ public interface IServiceItemsManageService extends IService<ServiceItemsManage>
|
||||
/**
|
||||
* 查询费用类别
|
||||
*/
|
||||
public List<ServiceItemsManagePO> getCostType();
|
||||
public List<ServiceItemsManagePO> getCostType(ServiceItemsManageDO serviceItemsManageDO);
|
||||
/**
|
||||
* 新增服务项管理
|
||||
*/
|
||||
|
||||
+1
-1
@@ -21,6 +21,6 @@ public interface ServiceItemsManageMapper extends BaseMapper<ServiceItemsManage>
|
||||
/**
|
||||
* 查询费用类别
|
||||
*/
|
||||
public List<ServiceItemsManagePO> selectServiceTypes();
|
||||
public List<ServiceItemsManagePO> selectServiceTypes(ServiceItemsManageDO serviceItemsManageDO);
|
||||
|
||||
}
|
||||
|
||||
+73
-3
@@ -6,6 +6,7 @@ import com.mhd.basic.domain.serviceItemsManage.entity.ServiceItemsManage;
|
||||
import com.mhd.basic.domain.serviceItemsManage.repository.facade.IServiceItemsManageService;
|
||||
import com.mhd.basic.domain.serviceItemsManage.repository.po.ServiceItemsManagePO;
|
||||
import com.mhd.basic.domain.serviceItemsManage.repository.todo.ServiceItemsManageDO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -19,6 +20,7 @@ import java.util.List;
|
||||
* @author gen
|
||||
* @date 2024-06-03
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class ServiceItemsManageImpl extends ServiceImpl<ServiceItemsManageMapper, ServiceItemsManage> implements IServiceItemsManageService{
|
||||
@Autowired
|
||||
@@ -30,12 +32,80 @@ public class ServiceItemsManageImpl extends ServiceImpl<ServiceItemsManageMapper
|
||||
@Override
|
||||
public List<ServiceItemsManagePO> queryList(ServiceItemsManageDO serviceItemsManageDO)
|
||||
{
|
||||
return serviceItemsManageMapper.queryList(serviceItemsManageDO);
|
||||
// 添加日志,记录查询参数
|
||||
log.info("ServiceItemsManageImpl.queryList 查询参数:topOrganizationId={}, organizationId={}, serviceItemsName={}, serviceItemsCode={}",
|
||||
serviceItemsManageDO.getTopOrganizationId(),
|
||||
serviceItemsManageDO.getOrganizationId(),
|
||||
serviceItemsManageDO.getServiceItemsName(),
|
||||
serviceItemsManageDO.getServiceItemsCode());
|
||||
|
||||
// 构建SQL查询条件说明(用于日志,必须与 MyBatis XML 中的条件保持一致)
|
||||
StringBuilder sqlCondition = new StringBuilder("WHERE del_flag = 1");
|
||||
|
||||
// 组织过滤条件(与 XML 中的 <if test="organizationId != null"> 和 <if test="topOrganizationId != null and organizationId == null"> 对应)
|
||||
if (serviceItemsManageDO.getOrganizationId() != null) {
|
||||
// 如果设置了 organizationId,添加 organization_id 条件
|
||||
sqlCondition.append(" AND organization_id = ").append(serviceItemsManageDO.getOrganizationId());
|
||||
sqlCondition.append(" AND organization_name IS NOT NULL");
|
||||
sqlCondition.append(" AND organization_name != ''");
|
||||
sqlCondition.append(" AND LENGTH(TRIM(organization_name)) > 0");
|
||||
} else if (serviceItemsManageDO.getTopOrganizationId() != null) {
|
||||
// 如果设置了 topOrganizationId 但没有设置 organizationId,添加 top_organization_id 条件
|
||||
sqlCondition.append(" AND top_organization_id = ").append(serviceItemsManageDO.getTopOrganizationId());
|
||||
sqlCondition.append(" AND organization_name IS NOT NULL");
|
||||
sqlCondition.append(" AND organization_name != ''");
|
||||
sqlCondition.append(" AND LENGTH(TRIM(organization_name)) > 0");
|
||||
} else {
|
||||
// 如果 organizationId 和 topOrganizationId 都为 null,不添加组织过滤条件(查询所有组织的数据)
|
||||
sqlCondition.append(" (无组织过滤条件,查询所有组织的数据)");
|
||||
}
|
||||
|
||||
// 其他查询条件
|
||||
if (serviceItemsManageDO.getCreateByName() != null && !serviceItemsManageDO.getCreateByName().isEmpty()) {
|
||||
sqlCondition.append(" AND create_by_name LIKE '%").append(serviceItemsManageDO.getCreateByName()).append("%'");
|
||||
}
|
||||
if (serviceItemsManageDO.getUpdateByName() != null && !serviceItemsManageDO.getUpdateByName().isEmpty()) {
|
||||
sqlCondition.append(" AND update_by_name LIKE '%").append(serviceItemsManageDO.getUpdateByName()).append("%'");
|
||||
}
|
||||
if (serviceItemsManageDO.getOrganizationName() != null && !serviceItemsManageDO.getOrganizationName().isEmpty()) {
|
||||
sqlCondition.append(" AND organization_name LIKE '%").append(serviceItemsManageDO.getOrganizationName()).append("%'");
|
||||
}
|
||||
if (serviceItemsManageDO.getServiceItemsName() != null && !serviceItemsManageDO.getServiceItemsName().isEmpty()) {
|
||||
sqlCondition.append(" AND service_items_name LIKE '%").append(serviceItemsManageDO.getServiceItemsName()).append("%'");
|
||||
}
|
||||
if (serviceItemsManageDO.getServiceItemsCode() != null && !serviceItemsManageDO.getServiceItemsCode().isEmpty()) {
|
||||
sqlCondition.append(" AND service_items_code = '").append(serviceItemsManageDO.getServiceItemsCode()).append("'");
|
||||
}
|
||||
if (serviceItemsManageDO.getTaxRate() != null) {
|
||||
sqlCondition.append(" AND tax_rate = ").append(serviceItemsManageDO.getTaxRate());
|
||||
}
|
||||
if (serviceItemsManageDO.getRemark() != null && !serviceItemsManageDO.getRemark().isEmpty()) {
|
||||
sqlCondition.append(" AND remark LIKE '%").append(serviceItemsManageDO.getRemark()).append("%'");
|
||||
}
|
||||
|
||||
log.info("ServiceItemsManageImpl.queryList 生成的SQL条件(预估):SELECT * FROM service_items_manage {}", sqlCondition.toString());
|
||||
log.info("ServiceItemsManageImpl.queryList 实际执行的SQL请查看 MyBatis 日志,参数:organizationId={}, topOrganizationId={}, delFlag={}",
|
||||
serviceItemsManageDO.getOrganizationId(), serviceItemsManageDO.getTopOrganizationId(), serviceItemsManageDO.getDelFlag());
|
||||
|
||||
List<ServiceItemsManagePO> result = serviceItemsManageMapper.queryList(serviceItemsManageDO);
|
||||
log.info("ServiceItemsManageImpl.queryList 查询结果:{} 条", result != null ? result.size() : 0);
|
||||
// 记录查询结果中的组织ID分布
|
||||
if (result != null && !result.isEmpty()) {
|
||||
StringBuilder orgIds = new StringBuilder();
|
||||
for (ServiceItemsManagePO po : result) {
|
||||
if (orgIds.length() > 0) {
|
||||
orgIds.append(", ");
|
||||
}
|
||||
orgIds.append(po.getOrganizationId());
|
||||
}
|
||||
log.info("查询结果中的组织ID分布:{}", orgIds.toString());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ServiceItemsManagePO> getCostType() {
|
||||
return serviceItemsManageMapper.selectServiceTypes();
|
||||
public List<ServiceItemsManagePO> getCostType(ServiceItemsManageDO serviceItemsManageDO) {
|
||||
return serviceItemsManageMapper.selectServiceTypes(serviceItemsManageDO);
|
||||
}
|
||||
/**
|
||||
* 新增服务项管理
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@ public class ServiceItemsManageDomainService {
|
||||
* 查询费用类型
|
||||
*/
|
||||
public List<ServiceItemsManagePO> getCostsType(ServiceItemsManageDO serviceItemsManageDO){
|
||||
return serviceItemsManageService.getCostType();
|
||||
return serviceItemsManageService.getCostType(serviceItemsManageDO);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+36
-17
@@ -27,8 +27,10 @@ public class ExpenseAccountAssembler {
|
||||
*/
|
||||
public ExpenseAccountDO toDO(ExpenseAccountDTO expenseAccountDTO) {
|
||||
ExpenseAccountDO expenseAccountDO = new ExpenseAccountDO();
|
||||
// 拷贝
|
||||
BeanUtils.copyProperties(expenseAccountDTO, expenseAccountDO, IgnoreNullUtil.getNullPropertyNames(expenseAccountDTO));
|
||||
// 如果 expenseAccountDTO 不为 null,才进行拷贝
|
||||
if (expenseAccountDTO != null) {
|
||||
BeanUtils.copyProperties(expenseAccountDTO, expenseAccountDO, IgnoreNullUtil.getNullPropertyNames(expenseAccountDTO));
|
||||
}
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (ObjectUtil.isNull(loginUser)) {
|
||||
throw new DigitalLogisticsException(UserError.TIMEOUT);
|
||||
@@ -36,28 +38,45 @@ public class ExpenseAccountAssembler {
|
||||
String userName = loginUser.getUsername();
|
||||
// 获取登录人id
|
||||
Long userId = loginUser.getUserid();
|
||||
if(expenseAccountDTO.getExpenseAccountId() != null){
|
||||
|
||||
// 只有在新增或编辑操作时才设置 createByName 和 updateByName
|
||||
// 查询列表时不应该自动设置这些字段,否则会导致 SQL 中添加过滤条件,影响查询结果
|
||||
if(expenseAccountDTO != null && expenseAccountDTO.getExpenseAccountId() != null){
|
||||
// 编辑操作:只设置更新相关字段
|
||||
if(userId != null){
|
||||
expenseAccountDO.setUpdateBy(userId);
|
||||
}else {
|
||||
expenseAccountDO.setUpdateBy(new Long("0"));
|
||||
}
|
||||
expenseAccountDO.setUpdateByName(userName);
|
||||
expenseAccountDO.setUpdateTime(new Date());
|
||||
|
||||
}else {
|
||||
if(userId != null){
|
||||
expenseAccountDO.setCreateBy(userId);
|
||||
expenseAccountDO.setUpdateBy(userId);
|
||||
}else {
|
||||
expenseAccountDO.setCreateBy(new Long("0"));
|
||||
expenseAccountDO.setUpdateBy(new Long("0"));
|
||||
// 只有在 DTO 中没有传递 updateByName 时才设置(避免覆盖前端传递的值)
|
||||
if(expenseAccountDO.getUpdateByName() == null || expenseAccountDO.getUpdateByName().isEmpty()){
|
||||
expenseAccountDO.setUpdateByName(userName);
|
||||
}
|
||||
expenseAccountDO.setCreateByName(userName);
|
||||
expenseAccountDO.setUpdateByName(userName);
|
||||
expenseAccountDO.setCreateTime(new Date());
|
||||
expenseAccountDO.setUpdateTime(new Date());
|
||||
expenseAccountDO.setDelFlag(1);
|
||||
} else if(expenseAccountDTO != null && expenseAccountDTO.getExpenseAccountId() == null) {
|
||||
// expenseAccountId == null,可能是查询操作或新增操作
|
||||
// 如果前端传递了 createByName 或 updateByName,说明是查询条件,不应该设置(已经在 BeanUtils.copyProperties 中拷贝了)
|
||||
// 如果前端没有传递 createByName 和 updateByName,可能是新增操作,需要设置默认值
|
||||
boolean hasQueryCondition = (expenseAccountDTO.getCreateByName() != null && !expenseAccountDTO.getCreateByName().isEmpty())
|
||||
|| (expenseAccountDTO.getUpdateByName() != null && !expenseAccountDTO.getUpdateByName().isEmpty());
|
||||
|
||||
if(!hasQueryCondition) {
|
||||
// 没有查询条件,可能是新增操作,设置默认值
|
||||
if(userId != null){
|
||||
expenseAccountDO.setCreateBy(userId);
|
||||
expenseAccountDO.setUpdateBy(userId);
|
||||
}else {
|
||||
expenseAccountDO.setCreateBy(new Long("0"));
|
||||
expenseAccountDO.setUpdateBy(new Long("0"));
|
||||
}
|
||||
expenseAccountDO.setCreateByName(userName);
|
||||
expenseAccountDO.setUpdateByName(userName);
|
||||
expenseAccountDO.setCreateTime(new Date());
|
||||
expenseAccountDO.setUpdateTime(new Date());
|
||||
expenseAccountDO.setDelFlag(1);
|
||||
}
|
||||
// 如果有查询条件(createByName 或 updateByName),说明是查询操作,不应该设置这些字段
|
||||
// 字段值已经在 BeanUtils.copyProperties 中从 DTO 拷贝过来了
|
||||
}
|
||||
return expenseAccountDO;
|
||||
}
|
||||
|
||||
+40
-17
@@ -27,8 +27,10 @@ public class ServiceItemsManageAssembler {
|
||||
*/
|
||||
public ServiceItemsManageDO toDO(ServiceItemsManageDTO serviceItemsManageDTO) {
|
||||
ServiceItemsManageDO serviceItemsManageDO = new ServiceItemsManageDO();
|
||||
// 拷贝
|
||||
BeanUtils.copyProperties(serviceItemsManageDTO, serviceItemsManageDO, IgnoreNullUtil.getNullPropertyNames(serviceItemsManageDTO));
|
||||
// 如果 serviceItemsManageDTO 不为 null,才进行拷贝
|
||||
if (serviceItemsManageDTO != null) {
|
||||
BeanUtils.copyProperties(serviceItemsManageDTO, serviceItemsManageDO, IgnoreNullUtil.getNullPropertyNames(serviceItemsManageDTO));
|
||||
}
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (ObjectUtil.isNull(loginUser)) {
|
||||
throw new DigitalLogisticsException(UserError.TIMEOUT);
|
||||
@@ -36,28 +38,49 @@ public class ServiceItemsManageAssembler {
|
||||
String userName = loginUser.getUsername();
|
||||
// 获取登录人id
|
||||
Long userId = loginUser.getUserid();
|
||||
if(serviceItemsManageDTO.getServiceItemsManageId() != null){
|
||||
|
||||
// 只有在新增或编辑操作时才设置 createByName 和 updateByName
|
||||
// 查询列表时不应该自动设置这些字段,否则会导致 SQL 中添加过滤条件,影响查询结果
|
||||
// 判断规则:
|
||||
// 1. 如果 serviceItemsManageId != null,说明是编辑操作,只设置更新相关字段
|
||||
// 2. 如果 serviceItemsManageId == null 且前端传递了 createByName 或 updateByName,说明是查询条件,不应该覆盖
|
||||
// 3. 如果 serviceItemsManageId == null 且前端没有传递 createByName 和 updateByName,可能是新增操作,设置默认值
|
||||
if(serviceItemsManageDTO != null && serviceItemsManageDTO.getServiceItemsManageId() != null){
|
||||
// 编辑操作:只设置更新相关字段
|
||||
if(userId != null){
|
||||
serviceItemsManageDO.setUpdateBy(userId);
|
||||
}else {
|
||||
serviceItemsManageDO.setUpdateBy(new Long("0"));
|
||||
}
|
||||
serviceItemsManageDO.setUpdateByName(userName);
|
||||
serviceItemsManageDO.setUpdateTime(new Date());
|
||||
|
||||
}else {
|
||||
if(userId != null){
|
||||
serviceItemsManageDO.setCreateBy(userId);
|
||||
serviceItemsManageDO.setUpdateBy(userId);
|
||||
}else {
|
||||
serviceItemsManageDO.setCreateBy(new Long("0"));
|
||||
serviceItemsManageDO.setUpdateBy(new Long("0"));
|
||||
// 只有在 DTO 中没有传递 updateByName 时才设置(避免覆盖前端传递的值)
|
||||
if(serviceItemsManageDO.getUpdateByName() == null || serviceItemsManageDO.getUpdateByName().isEmpty()){
|
||||
serviceItemsManageDO.setUpdateByName(userName);
|
||||
}
|
||||
serviceItemsManageDO.setCreateByName(userName);
|
||||
serviceItemsManageDO.setUpdateByName(userName);
|
||||
serviceItemsManageDO.setCreateTime(new Date());
|
||||
serviceItemsManageDO.setUpdateTime(new Date());
|
||||
serviceItemsManageDO.setDelFlag(1);
|
||||
} else if(serviceItemsManageDTO != null && serviceItemsManageDTO.getServiceItemsManageId() == null) {
|
||||
// serviceItemsManageId == null,可能是查询操作或新增操作
|
||||
// 如果前端传递了 createByName 或 updateByName,说明是查询条件,不应该设置(已经在 BeanUtils.copyProperties 中拷贝了)
|
||||
// 如果前端没有传递 createByName 和 updateByName,可能是新增操作,需要设置默认值
|
||||
boolean hasQueryCondition = (serviceItemsManageDTO.getCreateByName() != null && !serviceItemsManageDTO.getCreateByName().isEmpty())
|
||||
|| (serviceItemsManageDTO.getUpdateByName() != null && !serviceItemsManageDTO.getUpdateByName().isEmpty());
|
||||
|
||||
if(!hasQueryCondition) {
|
||||
// 没有查询条件,可能是新增操作,设置默认值
|
||||
if(userId != null){
|
||||
serviceItemsManageDO.setCreateBy(userId);
|
||||
serviceItemsManageDO.setUpdateBy(userId);
|
||||
}else {
|
||||
serviceItemsManageDO.setCreateBy(new Long("0"));
|
||||
serviceItemsManageDO.setUpdateBy(new Long("0"));
|
||||
}
|
||||
serviceItemsManageDO.setCreateByName(userName);
|
||||
serviceItemsManageDO.setUpdateByName(userName);
|
||||
serviceItemsManageDO.setCreateTime(new Date());
|
||||
serviceItemsManageDO.setUpdateTime(new Date());
|
||||
serviceItemsManageDO.setDelFlag(1);
|
||||
}
|
||||
// 如果有查询条件(createByName 或 updateByName),说明是查询操作,不应该设置这些字段
|
||||
// 字段值已经在 BeanUtils.copyProperties 中从 DTO 拷贝过来了
|
||||
}
|
||||
return serviceItemsManageDO;
|
||||
}
|
||||
|
||||
+6
@@ -126,4 +126,10 @@ public class ExpenseAccountDTO extends BaseVOEntity{
|
||||
|
||||
@ApiModelProperty("服务项名称")
|
||||
private String serviceItemsName;
|
||||
|
||||
@ApiModelProperty("费率")
|
||||
private BigDecimal rate;
|
||||
|
||||
@ApiModelProperty(name = "创建订单是否固定显示 0-否 1-是")
|
||||
private Integer fixedOrderDisplay;
|
||||
}
|
||||
|
||||
+83
-6
@@ -18,6 +18,7 @@ import com.mhd.common.core.constant.HttpStatus;
|
||||
import com.mhd.common.core.domain.entity.R;
|
||||
import com.sun.org.apache.bcel.internal.generic.NEW;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -28,6 +29,8 @@ import javax.annotation.Resource;
|
||||
import com.mhd.common.core.web.controller.BaseController;
|
||||
import com.mhd.common.core.web.domain.AjaxResult;
|
||||
import com.mhd.common.core.web.page.TableDataInfo;
|
||||
import com.mhd.common.security.utils.SecurityUtils;
|
||||
import com.mhd.system.api.model.LoginUser;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
/**
|
||||
@@ -52,11 +55,35 @@ public class ExpenseAccountApi extends BaseController{
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(ExpenseAccountDTO expenseAccountDTO)
|
||||
{
|
||||
//转换实体
|
||||
ExpenseAccountDO expenseAccountDO = expenseAccountAssembler.toDO(expenseAccountDTO);
|
||||
startPage();
|
||||
List<ExpenseAccountPO> list = expenseAccountApplicationService.queryList(expenseAccountDO);
|
||||
return getDataTable(list);
|
||||
logger.info("收到查询费用科目列表请求,参数:{}", expenseAccountDTO);
|
||||
try {
|
||||
//转换实体,如果 expenseAccountDTO 为 null,创建一个新的对象
|
||||
if (expenseAccountDTO == null) {
|
||||
expenseAccountDTO = new ExpenseAccountDTO();
|
||||
logger.info("expenseAccountDTO 为 null,创建新对象");
|
||||
}
|
||||
ExpenseAccountDO expenseAccountDO = expenseAccountAssembler.toDO(expenseAccountDTO);
|
||||
if(StringUtils.isBlank(expenseAccountDTO.getCreateByName())){
|
||||
expenseAccountDO.setCreateByName(null);
|
||||
}
|
||||
if(StringUtils.isBlank(expenseAccountDTO.getUpdateByName())){
|
||||
expenseAccountDO.setUpdateByName(null);
|
||||
}
|
||||
logger.info("转换后的 ExpenseAccountDO:{}", expenseAccountDO);
|
||||
startPage();
|
||||
logger.info("分页参数已设置");
|
||||
List<ExpenseAccountPO> list = expenseAccountApplicationService.queryList(expenseAccountDO);
|
||||
logger.info("查询完成,返回数据条数:{}", list != null ? list.size() : 0);
|
||||
if (list != null && list.isEmpty()) {
|
||||
logger.warn("查询结果为空,可能的原因:1.数据库中没有符合条件的数据 2.数据权限过滤 3.SQL查询条件问题");
|
||||
logger.warn("查询条件:topOrganizationId={}, del_flag=1", expenseAccountDO.getTopOrganizationId());
|
||||
}
|
||||
return getDataTable(list);
|
||||
} catch (Exception e) {
|
||||
logger.error("查询费用科目列表失败", e);
|
||||
e.printStackTrace();
|
||||
return getDataTable(new ArrayList<>());
|
||||
}
|
||||
}
|
||||
|
||||
@ApiOperation("查询费用科目树型列表")
|
||||
@@ -81,9 +108,50 @@ public class ExpenseAccountApi extends BaseController{
|
||||
public AjaxResult selectOtherExpenseAccount(SearchExpenseAccountDTO searchExpenseAccountDTO){
|
||||
SearchExpenseAccountDO searchExpenseAccountDO = new SearchExpenseAccountDO();
|
||||
BeanUtils.copyProperties(searchExpenseAccountDTO,searchExpenseAccountDO);
|
||||
|
||||
// 数据权限:根据组织ID实现数据隔离
|
||||
// organizationId=2827(南光)时,查询所有组织的数据;其他组织只查询自己的数据
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (loginUser != null && loginUser.getOrganizationPo() != null) {
|
||||
Long loginUserOrganizationId = loginUser.getOrganizationPo().getOrganizationId();
|
||||
if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
|
||||
// 南光组织(organizationId=2827):可以查询所有组织的数据,不设置 organizationId 过滤条件
|
||||
searchExpenseAccountDO.setOrganizationId(null);
|
||||
} else {
|
||||
// 其他组织:只查询自己组织的数据
|
||||
searchExpenseAccountDO.setOrganizationId(loginUserOrganizationId);
|
||||
}
|
||||
}
|
||||
|
||||
return AjaxResult.success(expenseAccountApplicationService.selectOtherExpenseAccount(searchExpenseAccountDO));
|
||||
|
||||
}
|
||||
/**
|
||||
* 测试查询 - 不设置组织ID,查看是否有数据
|
||||
*/
|
||||
@ApiOperation("测试查询费用科目列表(不设置组织ID)")
|
||||
@GetMapping("/testList")
|
||||
public AjaxResult testList(ExpenseAccountDTO expenseAccountDTO)
|
||||
{
|
||||
logger.info("测试查询费用科目列表,不设置组织ID");
|
||||
try {
|
||||
if (expenseAccountDTO == null) {
|
||||
expenseAccountDTO = new ExpenseAccountDTO();
|
||||
}
|
||||
ExpenseAccountDO expenseAccountDO = expenseAccountAssembler.toDO(expenseAccountDTO);
|
||||
// 不设置组织ID,测试是否能查询到数据
|
||||
expenseAccountDO.setTopOrganizationId(null);
|
||||
logger.info("测试查询参数:{}", expenseAccountDO);
|
||||
startPage();
|
||||
List<ExpenseAccountPO> list = expenseAccountApplicationService.queryList(expenseAccountDO);
|
||||
logger.info("测试查询结果:{} 条", list != null ? list.size() : 0);
|
||||
return AjaxResult.success(list);
|
||||
} catch (Exception e) {
|
||||
logger.error("测试查询失败", e);
|
||||
return AjaxResult.error("测试查询失败:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ApiOperation("查询费用科目-所有现金明细")
|
||||
@GetMapping("/selectAllCashExpenseAccount")
|
||||
public AjaxResult selectAllCashExpenseAccount(){
|
||||
@@ -197,7 +265,16 @@ public class ExpenseAccountApi extends BaseController{
|
||||
return AjaxResult.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ApiOperation("修改创建订单默认显示设置")
|
||||
@PostMapping("/changeFixedOrderDisplay")
|
||||
public AjaxResult changeFixedOrderDisplay(@RequestBody ExpenseAccountDTO expenseAccountDTO)
|
||||
{
|
||||
try {
|
||||
return toAjax(expenseAccountApplicationService.changeFixedOrderDisplay(expenseAccountDTO));
|
||||
}catch (Exception e){
|
||||
return AjaxResult.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ApiOperation("根据code获取费用科目")
|
||||
@GetMapping(value = "/getInfoByCode")
|
||||
|
||||
+7
@@ -8,6 +8,7 @@ import com.mhd.basic.domain.serviceItemsManage.repository.todo.ServiceItemsManag
|
||||
import com.mhd.basic.interfaces.assember.serviceItemsManage.ServiceItemsManageAssembler;
|
||||
import com.mhd.basic.interfaces.dto.serviceItemsManage.ServiceItemsManageDTO;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@@ -40,6 +41,12 @@ public class ServiceItemsManageApi extends BaseController{
|
||||
{
|
||||
//转换实体
|
||||
ServiceItemsManageDO serviceItemsManageDO = serviceItemsManageAssembler.toDO(serviceItemsManageDTO);
|
||||
if(StringUtils.isBlank(serviceItemsManageDTO.getCreateByName())){
|
||||
serviceItemsManageDO.setCreateByName(null);
|
||||
}
|
||||
if(StringUtils.isBlank(serviceItemsManageDTO.getUpdateByName())){
|
||||
serviceItemsManageDO.setUpdateByName(null);
|
||||
}
|
||||
startPage();
|
||||
List<ServiceItemsManagePO> list = serviceItemsManageApplicationService.queryList(serviceItemsManageDO);
|
||||
return getDataTable(list);
|
||||
|
||||
+34
-7
@@ -85,12 +85,25 @@ public class SysDictDataServiceImpl extends ServiceImpl<SysDictDataMapper, SysDi
|
||||
if (ObjectUtil.isNull(loginUser)) {
|
||||
throw new DigitalLogisticsException(UserError.TIMEOUT);
|
||||
}
|
||||
// 数据权限验证:南光组织(organizationId=2827)可以删除所有组织的数据,其他组织只能删除自己组织的数据
|
||||
Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
|
||||
Long loginUserTopOrganizationId = loginUser.getUserPo().getTopOrganizationId();
|
||||
|
||||
for (Long dictCode : dictCodes)
|
||||
{
|
||||
SysDictData data = selectDictDataById(dictCode);
|
||||
if (ObjectUtil.notEqual(data.getTopOrganizationId(), loginUser.getUserPo().getTopOrganizationId())) {
|
||||
throw new ServiceException("修改失败");
|
||||
|
||||
// 南光组织(organizationId=2827)可以删除所有组织的数据
|
||||
if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
|
||||
// 南光组织可以删除,不需要验证 topOrganizationId
|
||||
} else {
|
||||
// 其他组织:只能删除自己组织的数据
|
||||
// 使用 Objects.equals 安全比较,处理 null 值的情况
|
||||
if (!java.util.Objects.equals(data.getTopOrganizationId(), loginUserTopOrganizationId)) {
|
||||
throw new ServiceException("删除失败:无权删除其他组织的字典数据");
|
||||
}
|
||||
}
|
||||
|
||||
dictDataMapper.deleteDictDataById(dictCode);
|
||||
SysDictData dictData = new SysDictData();
|
||||
dictData.setDictType(data.getDictType());
|
||||
@@ -146,11 +159,25 @@ public class SysDictDataServiceImpl extends ServiceImpl<SysDictDataMapper, SysDi
|
||||
if (ObjectUtil.isNull(sysDictData)) {
|
||||
throw new ServiceException("字典数据未找到");
|
||||
}
|
||||
if ("Y".equals(sysDictData.getIsDefault())) {
|
||||
throw new ServiceException("默认数据不允许修改");
|
||||
}
|
||||
if (ObjectUtil.notEqual(sysDictData.getTopOrganizationId(), loginUser.getUserPo().getTopOrganizationId())) {
|
||||
throw new ServiceException("修改失败");
|
||||
|
||||
// 数据权限验证:南光组织(organizationId=2827)可以修改所有组织的数据(包括默认数据),其他组织只能修改自己组织的数据(包括默认数据)
|
||||
Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
|
||||
Long loginUserTopOrganizationId = loginUser.getUserPo().getTopOrganizationId();
|
||||
Long dictDataTopOrganizationId = sysDictData.getTopOrganizationId();
|
||||
Long dictDataOrganizationId = sysDictData.getOrganizationId();
|
||||
|
||||
// 南光组织(organizationId=2827)可以修改所有组织的数据(包括默认数据)
|
||||
if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
|
||||
// 南光组织可以修改,不需要验证 topOrganizationId
|
||||
} else {
|
||||
// 其他组织:只能修改自己组织的数据(包括默认数据)
|
||||
// 使用 Objects.equals 安全比较,处理 null 值的情况
|
||||
boolean isSameTopOrg = java.util.Objects.equals(dictDataTopOrganizationId, loginUserTopOrganizationId);
|
||||
boolean isSameOrg = java.util.Objects.equals(dictDataOrganizationId, loginUserOrganizationId);
|
||||
|
||||
if (!isSameTopOrg || !isSameOrg) {
|
||||
throw new ServiceException("修改失败:无权修改其他组织的字典数据");
|
||||
}
|
||||
}
|
||||
data.setUpdateBy(loginUser.getUserPo().getUserName());
|
||||
int row = dictDataMapper.updateDictData(data);
|
||||
|
||||
@@ -14,14 +14,20 @@ spring:
|
||||
nacos:
|
||||
discovery:
|
||||
# server-addr: 127.0.0.1:8848
|
||||
# server-addr: 10.33.0.129:6010
|
||||
# 线上测试环境配置 容器名+端口号
|
||||
server-addr: 10.33.0.129:6010
|
||||
server-addr: 10.102.192.5:6848
|
||||
username: nacos
|
||||
password: manhuoda@2023
|
||||
#线上正式环境
|
||||
# server-addr: 10.102.192.105:6848
|
||||
config:
|
||||
# server-addr: 127.0.0.1:8848
|
||||
# server-addr: 10.33.0.129:6010
|
||||
# 线上测试环境配置 容器名+端口号
|
||||
server-addr: 10.33.0.129:6010
|
||||
server-addr: 10.102.192.5:6848
|
||||
username: nacos
|
||||
password: manhuoda@2023
|
||||
#线上正式环境
|
||||
# server-addr: 10.102.192.105:6848
|
||||
group: DEFAULT_GROUP # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
WHERE
|
||||
a.del_flag = 1
|
||||
<include refid="common_where"/>
|
||||
order by account_type,service_items_code,upper_subject_code,show_seq
|
||||
order by a.update_time DESC
|
||||
</select>
|
||||
<select id="selectCostSubject" parameterType="com.mhd.basic.domain.expenseAccount.repository.todo.ExpenseAccountDO"
|
||||
resultType="com.mhd.basic.domain.expenseAccount.repository.po.ExpenseAccountPO">
|
||||
@@ -191,12 +191,31 @@
|
||||
<if test="expenseAccountDO.updateTimeEnd != null and expenseAccountDO.updateTimeEnd != ''">
|
||||
AND date_format(a.update_time,'%Y-%m-%d') <![CDATA[<=]]> #{expenseAccountDO.updateTimeEnd}
|
||||
</if>
|
||||
<if test="expenseAccountDO.topOrganizationId != null ">
|
||||
<!-- 数据权限:南光组织(organizationId=2827)查全部,其他组织查自己 -->
|
||||
<!-- 如果 organizationId 和 topOrganizationId 都为 null,表示查询所有组织的数据(不添加组织过滤条件) -->
|
||||
<if test="expenseAccountDO.organizationId != null">
|
||||
<!-- 如果设置了 organizationId,添加 organization_id 条件 -->
|
||||
and a.organization_id = #{expenseAccountDO.organizationId}
|
||||
and a.organization_name IS NOT NULL
|
||||
and a.organization_name != ''
|
||||
and LENGTH(TRIM(a.organization_name)) > 0
|
||||
</if>
|
||||
<if test="expenseAccountDO.topOrganizationId != null and expenseAccountDO.organizationId == null">
|
||||
<!-- 如果设置了 topOrganizationId 但没有设置 organizationId,添加 top_organization_id 条件 -->
|
||||
and a.top_organization_id = #{expenseAccountDO.topOrganizationId}
|
||||
and a.organization_name IS NOT NULL
|
||||
and a.organization_name != ''
|
||||
and LENGTH(TRIM(a.organization_name)) > 0
|
||||
</if>
|
||||
<if test="expenseAccountDO.organizationName != null and expenseAccountDO.organizationName != ''">
|
||||
and a.organization_name like concat('%', #{expenseAccountDO.organizationName}, '%')
|
||||
</if>
|
||||
<if test="expenseAccountDO.serviceItemsCode != null and expenseAccountDO.serviceItemsCode != ''">
|
||||
and b.service_items_code = #{expenseAccountDO.serviceItemsCode}
|
||||
</if>
|
||||
<if test="expenseAccountDO.fixedOrderDisplay != null ">
|
||||
and a.fixed_order_display = #{expenseAccountDO.fixedOrderDisplay}
|
||||
</if>
|
||||
</sql>
|
||||
<select id="selectExpenseAccount" parameterType="com.mhd.basic.domain.expenseAccount.repository.todo.SearchExpenseAccountDO" resultType="com.mhd.basic.domain.expenseAccount.repository.po.QueryExpenseAccountPO">
|
||||
select
|
||||
@@ -238,6 +257,15 @@
|
||||
<if test="searchExpenseAccountDO.societyStatus != null ">
|
||||
and a.society_status = #{searchExpenseAccountDO.societyStatus}
|
||||
</if>
|
||||
<!-- 数据权限:南光组织(organizationId=2827)查全部,其他组织查自己 -->
|
||||
<!-- 如果 organizationId 为 null,表示查询所有组织的数据(不添加组织过滤条件) -->
|
||||
<if test="searchExpenseAccountDO.organizationId != null">
|
||||
<!-- 如果设置了 organizationId,添加 organization_id 条件 -->
|
||||
and a.organization_id = #{searchExpenseAccountDO.organizationId}
|
||||
and a.organization_name IS NOT NULL
|
||||
and a.organization_name != ''
|
||||
and LENGTH(TRIM(a.organization_name)) > 0
|
||||
</if>
|
||||
and a.del_flag=1
|
||||
order by show_seq
|
||||
</select>
|
||||
|
||||
+25
-13
@@ -8,18 +8,36 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
|
||||
<sql id="selectServiceItemsManagePo1">
|
||||
<where>
|
||||
del_flag = 1
|
||||
<!-- 删除标记:0-无状态,1-正常,2-已删除,查询时只查询正常的数据 -->
|
||||
<choose>
|
||||
<when test="delFlag != null">
|
||||
and del_flag = #{delFlag}
|
||||
</when>
|
||||
<otherwise>
|
||||
and del_flag = 1
|
||||
</otherwise>
|
||||
</choose>
|
||||
<if test="createByName != null and createByName != ''">
|
||||
and create_by_name like concat('%', #{createByName}, '%')
|
||||
</if>
|
||||
<if test="updateByName != null and updateByName != ''">
|
||||
and update_by_name like concat('%', #{updateByName}, '%')
|
||||
</if>
|
||||
<if test="topOrganizationId != null ">
|
||||
and top_organization_id = #{topOrganizationId}
|
||||
</if>
|
||||
<if test="organizationId != null ">
|
||||
<!-- 数据权限:南光组织(organizationId=2827)查全部,其他组织查自己 -->
|
||||
<!-- 如果 organizationId 和 topOrganizationId 都为 null,表示查询所有组织的数据(不添加组织过滤条件) -->
|
||||
<if test="organizationId != null">
|
||||
<!-- 如果设置了 organizationId,添加 organization_id 条件 -->
|
||||
and organization_id = #{organizationId}
|
||||
and organization_name IS NOT NULL
|
||||
and organization_name != ''
|
||||
and LENGTH(TRIM(organization_name)) > 0
|
||||
</if>
|
||||
<if test="topOrganizationId != null and organizationId == null">
|
||||
<!-- 如果设置了 topOrganizationId 但没有设置 organizationId,添加 top_organization_id 条件 -->
|
||||
and top_organization_id = #{topOrganizationId}
|
||||
and organization_name IS NOT NULL
|
||||
and organization_name != ''
|
||||
and LENGTH(TRIM(organization_name)) > 0
|
||||
</if>
|
||||
<if test="organizationName != null and organizationName != ''">
|
||||
and organization_name like concat('%', #{organizationName}, '%')
|
||||
@@ -42,12 +60,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="createTimeEnd != null and createTimeEnd != ''">
|
||||
AND date_format(create_time,'%Y-%m-%d') <![CDATA[<=]]> #{createTimeEnd}
|
||||
</if>
|
||||
<if test="createByName != null and createByName != ''">
|
||||
and create_by_name like concat('%', #{createByName}, '%')
|
||||
</if>
|
||||
<if test="updateByName != null and updateByName != ''">
|
||||
and update_by_name like concat('%', #{updateByName}, '%')
|
||||
</if>
|
||||
<if test="updateTimeStart != null and updateTimeStart != ''">
|
||||
AND date_format(update_time,'%Y-%m-%d') <![CDATA[>=]]> #{updateTimeStart}
|
||||
</if>
|
||||
@@ -63,10 +75,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<include refid="selectServiceItemsManagePo1"/>
|
||||
</select>
|
||||
|
||||
<select id="selectServiceTypes"
|
||||
<select id="selectServiceTypes" parameterType="com.mhd.basic.domain.serviceItemsManage.repository.todo.ServiceItemsManageDO"
|
||||
resultType="com.mhd.basic.domain.serviceItemsManage.repository.po.ServiceItemsManagePO">
|
||||
select organization_name,service_items_code,service_items_name,tax_rate,CONCAT(service_items_name,service_items_code) cost_type
|
||||
from service_items_manage
|
||||
where del_flag = 1
|
||||
<include refid="selectServiceItemsManagePo1"/>
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
+7
@@ -9,6 +9,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
a.*
|
||||
from
|
||||
common_route a
|
||||
<if test="commonRouteDo.organizationId != null">
|
||||
LEFT JOIN "USER" u ON a.user_id = u.user_id AND u.del_flag = 0
|
||||
</if>
|
||||
WHERE
|
||||
a.del_flag = 1
|
||||
</sql>
|
||||
@@ -26,6 +29,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
and (a.mail_name like concat('%', #{commonRouteDo.synthesize}, '%') OR a.mail_phone LIKE concat('%', #{commonRouteDo.synthesize}, '%') OR a.mail_address_plot LIKE concat('%', #{commonRouteDo.synthesize}, '%')
|
||||
OR a.addressee_name like concat('%', #{commonRouteDo.synthesize}, '%') OR a.addressee_phone LIKE concat('%', #{commonRouteDo.synthesize}, '%') OR a.addressee_address_plot LIKE concat('%', #{commonRouteDo.synthesize}, '%'))
|
||||
</if>
|
||||
<!-- 组织数据权限过滤:通过用户表关联来过滤组织数据 -->
|
||||
<if test="commonRouteDo.organizationId != null">
|
||||
and u.organization_id = #{commonRouteDo.organizationId}
|
||||
</if>
|
||||
</sql>
|
||||
|
||||
<select id="selectCommonRouteByCommonRouteId" parameterType="java.lang.Long"
|
||||
|
||||
+28
-18
@@ -140,27 +140,37 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
</select>
|
||||
|
||||
<select id="selectAddressBookList" parameterType="com.mhd.common.core.domain.po.AddressBookPo" resultMap="AddressBookResult">
|
||||
<include refid="selectAddressBookVo"/>
|
||||
SELECT
|
||||
ab.*
|
||||
FROM
|
||||
address_book ab
|
||||
<if test="organizationId != null">
|
||||
LEFT JOIN "USER" u ON ab.user_id = u.user_id AND u.del_flag = 0
|
||||
</if>
|
||||
<where>
|
||||
del_flag = 1
|
||||
<if test="synthesize != null and synthesize != ''"> and (link_man like concat('%', #{synthesize}, '%') OR link_phone LIKE concat('%', #{synthesize}, '%') OR area_name LIKE concat('%', #{synthesize}, '%') OR address LIKE concat('%', #{synthesize}, '%') OR address_plot LIKE concat('%', #{synthesize}, '%')) </if>
|
||||
<if test="userId != null "> and user_id = #{userId}</if>
|
||||
<if test="linkMan != null and linkMan != ''"> and link_man = #{linkMan}</if>
|
||||
<if test="linkPhone != null and linkPhone != ''"> and link_phone = #{linkPhone}</if>
|
||||
<if test="provinceCode != null "> and province_code = #{provinceCode}</if>
|
||||
<if test="cityCode != null "> and city_code = #{cityCode}</if>
|
||||
<if test="countyCode != null "> and county_code = #{countyCode}</if>
|
||||
<if test="provinceName != null and provinceName != ''"> and province_name like concat('%', #{provinceName}, '%')</if>
|
||||
<if test="cityName != null and cityName != ''"> and city_name like concat('%', #{cityName}, '%')</if>
|
||||
<if test="countyName != null and countyName != ''"> and county_name like concat('%', #{countyName}, '%')</if>
|
||||
<if test="address != null and address != ''"> and address = #{address}</if>
|
||||
<if test="doorplate != null and doorplate != ''"> and doorplate = #{doorplate}</if>
|
||||
<if test="defaultStatus != null "> and default_status = #{defaultStatus}</if>
|
||||
<if test="createByName != null and createByName != ''"> and create_by_name like concat('%', #{createByName}, '%')</if>
|
||||
<if test="updateByName != null and updateByName != ''"> and update_by_name like concat('%', #{updateByName}, '%')</if>
|
||||
ab.del_flag = 1
|
||||
<if test="synthesize != null and synthesize != ''"> and (ab.link_man like concat('%', #{synthesize}, '%') OR ab.link_phone LIKE concat('%', #{synthesize}, '%') OR ab.area_name LIKE concat('%', #{synthesize}, '%') OR ab.address LIKE concat('%', #{synthesize}, '%') OR ab.address_plot LIKE concat('%', #{synthesize}, '%')) </if>
|
||||
<if test="userId != null "> and ab.user_id = #{userId}</if>
|
||||
<if test="linkMan != null and linkMan != ''"> and ab.link_man = #{linkMan}</if>
|
||||
<if test="linkPhone != null and linkPhone != ''"> and ab.link_phone = #{linkPhone}</if>
|
||||
<if test="provinceCode != null "> and ab.province_code = #{provinceCode}</if>
|
||||
<if test="cityCode != null "> and ab.city_code = #{cityCode}</if>
|
||||
<if test="countyCode != null "> and ab.county_code = #{countyCode}</if>
|
||||
<if test="provinceName != null and provinceName != ''"> and ab.province_name like concat('%', #{provinceName}, '%')</if>
|
||||
<if test="cityName != null and cityName != ''"> and ab.city_name like concat('%', #{cityName}, '%')</if>
|
||||
<if test="countyName != null and countyName != ''"> and ab.county_name like concat('%', #{countyName}, '%')</if>
|
||||
<if test="address != null and address != ''"> and ab.address = #{address}</if>
|
||||
<if test="doorplate != null and doorplate != ''"> and ab.doorplate = #{doorplate}</if>
|
||||
<if test="defaultStatus != null "> and ab.default_status = #{defaultStatus}</if>
|
||||
<if test="createByName != null and createByName != ''"> and ab.create_by_name like concat('%', #{createByName}, '%')</if>
|
||||
<if test="updateByName != null and updateByName != ''"> and ab.update_by_name like concat('%', #{updateByName}, '%')</if>
|
||||
<!-- 组织数据权限过滤:通过用户表关联来过滤组织数据 -->
|
||||
<if test="organizationId != null">
|
||||
and u.organization_id = #{organizationId}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY
|
||||
create_time DESC
|
||||
ab.create_time DESC
|
||||
</select>
|
||||
|
||||
<select id="selectAddressBookListByManifestId" parameterType="java.lang.Long" resultMap="AddressBookResult">
|
||||
|
||||
+11
@@ -4,14 +4,17 @@ import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.mhd.user.domain.userAggregate.entity.DriverVehicleBind;
|
||||
import com.mhd.user.domain.userAggregate.repository.mapper.DriverVehicleBindMapper;
|
||||
import com.mhd.user.domain.userAggregate.repository.po.DriverVehicleBindPo;
|
||||
import com.mhd.user.domain.userAggregate.repository.todo.DriverVehicleBindDo;
|
||||
import com.mhd.user.domain.userAggregate.service.DriverVehicleBindDomainService;
|
||||
import com.mhd.user.domain.userAggregate.service.UserDriverDomainService;
|
||||
import com.mhd.system.api.TransportFeign;
|
||||
import com.mhd.user.interfaces.dto.DriverVehicleBindDto;
|
||||
import com.mhd.user.interfaces.dto.addDTO.UserDriverDTO;
|
||||
import com.mhd.user.interfaces.facadeApi.Po.VehicleDriverBindAppPo;
|
||||
import com.mhd.common.core.domain.dto.VehicleDto;
|
||||
import com.mhd.user.domain.userAggregate.repository.po.UserDriverPo;
|
||||
@@ -49,6 +52,9 @@ public class DriverVehicleBindApplicationService {
|
||||
private CommonApplicationService commonApplicationService;
|
||||
@Resource
|
||||
private UserDriverDomainService userDriverDomainService;
|
||||
@Autowired
|
||||
private DriverVehicleBindMapper driverVehicleBindMapper;
|
||||
|
||||
/**
|
||||
* 分页查询司机车辆绑定关系列表
|
||||
*/
|
||||
@@ -355,4 +361,9 @@ public class DriverVehicleBindApplicationService {
|
||||
}
|
||||
return isTrue;
|
||||
}
|
||||
|
||||
public int delectDriverBind(UserDriverDTO userDriverDTO) {
|
||||
return driverVehicleBindMapper.delete(new LambdaQueryWrapper<DriverVehicleBind>().eq(DriverVehicleBind::getDriverBindId,userDriverDTO.getUserId())
|
||||
.eq(DriverVehicleBind::getVehicleId,userDriverDTO.getVehicleId()));
|
||||
}
|
||||
}
|
||||
|
||||
+290
-5
@@ -40,9 +40,11 @@ import com.mhd.user.domain.roleAggregate.repository.todo.RoleDo;
|
||||
import com.mhd.user.domain.roleAggregate.service.RoleDomainService;
|
||||
import com.mhd.user.domain.userAggregate.entity.DriverVehicleBind;
|
||||
import com.mhd.user.domain.userAggregate.entity.UserRoleEntity;
|
||||
import com.mhd.common.core.domain.po.UserRoleMenuPO;
|
||||
import com.mhd.user.domain.userAggregate.repository.po.UserDriverEnterprisePo;
|
||||
import com.mhd.user.domain.userAggregate.repository.po.UserDriverPo;
|
||||
import com.mhd.user.domain.userAggregate.repository.todo.*;
|
||||
import com.mhd.user.domain.userAggregate.repository.todo.UserDO;
|
||||
import com.mhd.user.domain.motorcade.service.MotorcadeRecordDomainService;
|
||||
import com.mhd.user.domain.userAggregate.service.*;
|
||||
import com.mhd.user.infrastructure.feign.SpecialLogisticsFeign;
|
||||
@@ -131,7 +133,55 @@ public class MotorcadeApplicationService {
|
||||
public List<MotorcadePo> queryList(MotorcadeDO motorcadeDo) {
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (loginUser != null && loginUser.getUserPo() != null){
|
||||
motorcadeDo.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
|
||||
UserPo userPo = loginUser.getUserPo();
|
||||
Long organizationId = userPo.getOrganizationId();
|
||||
Long topOrganizationId = userPo.getTopOrganizationId();
|
||||
|
||||
// 数据权限:根据 organizationId 来设置查询权限
|
||||
// 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己
|
||||
if (organizationId != null && organizationId.equals(2827L)) {
|
||||
// 南光组织(organizationId=2827):可以查询所有组织的数据
|
||||
// 如果前端传递了 organizationId,使用前端传递的值进行过滤
|
||||
// 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
|
||||
Long frontendOrganizationId = motorcadeDo.getOrganizationId();
|
||||
if (frontendOrganizationId != null) {
|
||||
// 前端传递了 organizationId,使用前端传递的值进行过滤
|
||||
motorcadeDo.setOrganizationId(frontendOrganizationId);
|
||||
motorcadeDo.setTopOrganizationId(null);
|
||||
} else {
|
||||
// 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
|
||||
motorcadeDo.setOrganizationId(null);
|
||||
motorcadeDo.setTopOrganizationId(null);
|
||||
}
|
||||
} else {
|
||||
// 其他组织:设置 organizationId,只查询当前组织的数据
|
||||
// 其他组织只能查询自己组织的数据,不能查询其他组织的数据
|
||||
Long frontendOrganizationId = motorcadeDo.getOrganizationId();
|
||||
if (frontendOrganizationId != null) {
|
||||
// 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致
|
||||
if (!frontendOrganizationId.equals(organizationId)) {
|
||||
// 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询
|
||||
log.warn("车队列表查询 - 前端传递的组织ID {} 与当前登录用户的组织ID {} 不一致,使用当前登录用户的组织ID进行过滤",
|
||||
frontendOrganizationId, organizationId);
|
||||
motorcadeDo.setOrganizationId(organizationId);
|
||||
} else {
|
||||
// 前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值
|
||||
motorcadeDo.setOrganizationId(frontendOrganizationId);
|
||||
}
|
||||
if (topOrganizationId != null) {
|
||||
motorcadeDo.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
} else {
|
||||
// 前端没有传递 organizationId,使用当前登录用户的组织ID
|
||||
motorcadeDo.setOrganizationId(organizationId);
|
||||
if (topOrganizationId != null) {
|
||||
motorcadeDo.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
log.info("车队列表查询 - 设置组织ID后,查询参数:organizationId={}, topOrganizationId={}",
|
||||
motorcadeDo.getOrganizationId(), motorcadeDo.getTopOrganizationId());
|
||||
}
|
||||
return motorcadeDomainService.queryList(motorcadeDo);
|
||||
}
|
||||
@@ -656,16 +706,28 @@ public class MotorcadeApplicationService {
|
||||
|
||||
motorcadeDo.setMotorcadeHeaderName(userPo.getUserName());
|
||||
motorcadeDo.setMotorcadeHeaderAccount(userPo.getUserAccount());
|
||||
motorcadeDo.setOrganizationId(loginUser.getUserPo().getOrganizationId());
|
||||
motorcadeDo.setOrganizationName(loginUser.getUserPo().getOrganizationName());
|
||||
motorcadeDo.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
|
||||
|
||||
// 设置当前登录用户的组织信息
|
||||
UserPo loginUserPo = loginUser.getUserPo();
|
||||
if (loginUserPo != null) {
|
||||
motorcadeDo.setOrganizationId(loginUserPo.getOrganizationId());
|
||||
motorcadeDo.setOrganizationName(loginUserPo.getOrganizationName());
|
||||
motorcadeDo.setTopOrganizationId(loginUserPo.getTopOrganizationId());
|
||||
log.info("新增车队 - 设置当前登录用户的组织信息,组织ID: {}, 组织名称: {}, 顶级组织ID: {}",
|
||||
loginUserPo.getOrganizationId(), loginUserPo.getOrganizationName(), loginUserPo.getTopOrganizationId());
|
||||
} else {
|
||||
log.warn("新增车队 - 当前登录用户信息为空,无法设置组织信息");
|
||||
}
|
||||
|
||||
motorcadeDo.setMotorcadeStatus(2L);
|
||||
//获取车队承运编码
|
||||
motorcadeDo.setDriverEnterpriseCode(userPo.getUserAccount());
|
||||
|
||||
// 设置当前登录用户的创建信息
|
||||
motorcadeDo.setCreateBy(loginUser.getUserid());
|
||||
motorcadeDo.setCreateByName(loginUser.getUsername());
|
||||
motorcadeDo.setCreateTime(DateUtil.date());
|
||||
log.info("新增车队 - 设置创建人信息,创建人ID: {}, 创建人姓名: {}", loginUser.getUserid(), loginUser.getUsername());
|
||||
motorcadeDomainService.insert(motorcadeDo);
|
||||
MotorcadeDriver motorcadeDriver = new MotorcadeDriverAssembler().getEntity();
|
||||
motorcadeDriver.setMotorcadeId(motorcadeDo.getMotorcadeId());
|
||||
@@ -674,9 +736,210 @@ public class MotorcadeApplicationService {
|
||||
if(!flag){
|
||||
throw new ServiceException("新增车队失败");
|
||||
}
|
||||
|
||||
// 新增车队时,更新车队长的用户信息(角色、用户类型、用户身份)
|
||||
updateCaptainUserInfo(motorcadeDo.getMotorcadeHeaderId(), loginUser);
|
||||
|
||||
// 新增车队时,给车队长分配"车队长"角色
|
||||
assignCaptainRoleToUser(motorcadeDo.getMotorcadeHeaderId(), loginUser);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新车队长的用户信息(角色代码、角色名称、业务类型等)
|
||||
* @param captainUserId 车队长用户ID
|
||||
* @param loginUser 当前登录用户
|
||||
*/
|
||||
private void updateCaptainUserInfo(Long captainUserId, LoginUser loginUser) {
|
||||
if (captainUserId == null || loginUser == null || loginUser.getUserPo() == null) {
|
||||
log.warn("更新用户信息失败 - 车队长用户ID或登录用户信息为空");
|
||||
return;
|
||||
}
|
||||
|
||||
log.info("新增车队 - 更新车队长的用户信息,车队长用户ID: {}", captainUserId);
|
||||
|
||||
try {
|
||||
// 获取当前登录用户的角色信息,用于设置车队长的角色
|
||||
Long loginUserId = loginUser.getUserPo().getUserId();
|
||||
List<UserRoleMenuPO> loginUserRoleList = userRoleDomainService.selectRolesByUserId(loginUserId);
|
||||
|
||||
String roleCode = RoleEnum.CAPTAIN.getCode();
|
||||
String roleName = RoleEnum.CAPTAIN.getName();
|
||||
|
||||
// 从当前登录用户的角色中查找"车队长"角色,获取角色名称
|
||||
if (CollUtil.isNotEmpty(loginUserRoleList)) {
|
||||
for (UserRoleMenuPO loginUserRole : loginUserRoleList) {
|
||||
if (RoleEnum.CAPTAIN.getCode().equals(loginUserRole.getRoleCode())) {
|
||||
roleCode = loginUserRole.getRoleCode();
|
||||
roleName = loginUserRole.getRoleName();
|
||||
log.info("从当前登录用户的角色中获取车队长角色信息 - 角色代码: {}, 角色名称: {}", roleCode, roleName);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 更新车队长的用户信息
|
||||
UserDO userDO = new UserDO();
|
||||
userDO.setUserId(captainUserId);
|
||||
userDO.setRoleCode(roleCode);
|
||||
userDO.setRoleName(roleName);
|
||||
|
||||
// 设置业务类型:如果用户已经是司机,则设置为司机&车队长(3),否则设置为车队长(2)
|
||||
UserPo captainUserPo = userApplicationService.selectByUserId(captainUserId);
|
||||
if (captainUserPo != null) {
|
||||
Integer businessType = captainUserPo.getBusinessType();
|
||||
// 业务类型:1=客户,2=司机,3=司机&车队长,4=客户&司机
|
||||
if (businessType != null && businessType == 2) {
|
||||
// 如果用户已经是司机,设置为司机&车队长(3)
|
||||
userDO.setBusinessType(3);
|
||||
log.info("车队长用户业务类型设置为:司机&车队长(3),原业务类型:{}", businessType);
|
||||
} else if (businessType != null && businessType == 4) {
|
||||
// 如果用户是客户&司机,设置为客户&司机&车队长(保持为4,或者可以设置为5如果有的话)
|
||||
// 这里暂时保持为4,或者根据业务需求调整
|
||||
userDO.setBusinessType(4);
|
||||
log.info("车队长用户业务类型保持为:客户&司机(4),原业务类型:{}", businessType);
|
||||
} else {
|
||||
// 如果用户不是司机,设置为车队长(2)
|
||||
userDO.setBusinessType(2);
|
||||
log.info("车队长用户业务类型设置为:车队长(2),原业务类型:{}", businessType);
|
||||
}
|
||||
} else {
|
||||
// 如果查询不到用户信息,默认设置为车队长(2)
|
||||
userDO.setBusinessType(2);
|
||||
log.warn("查询不到车队长用户信息,默认设置业务类型为:车队长(2)");
|
||||
}
|
||||
|
||||
// 设置组织信息(从当前登录用户获取)
|
||||
UserPo loginUserPo = loginUser.getUserPo();
|
||||
if (loginUserPo != null) {
|
||||
userDO.setOrganizationId(loginUserPo.getOrganizationId());
|
||||
userDO.setOrganizationName(loginUserPo.getOrganizationName());
|
||||
userDO.setTopOrganizationId(loginUserPo.getTopOrganizationId());
|
||||
log.info("设置车队长的组织信息 - 组织ID: {}, 组织名称: {}, 顶级组织ID: {}",
|
||||
loginUserPo.getOrganizationId(), loginUserPo.getOrganizationName(), loginUserPo.getTopOrganizationId());
|
||||
}
|
||||
|
||||
// 更新用户信息
|
||||
UserPo updateResult = userApplicationService.updateUser(userDO);
|
||||
if (updateResult != null && updateResult.getUserId() != null) {
|
||||
log.info("成功更新车队长的用户信息 - 用户ID: {}, 角色代码: {}, 角色名称: {}, 业务类型: {}, 组织ID: {}, 组织名称: {}",
|
||||
captainUserId, roleCode, roleName, userDO.getBusinessType(),
|
||||
userDO.getOrganizationId(), userDO.getOrganizationName());
|
||||
} else {
|
||||
log.warn("更新车队长的用户信息失败 - 更新结果为null,用户ID: {}, 请检查用户是否存在", captainUserId);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("更新车队长的用户信息失败 - 用户ID: {}, 错误信息: {}", captainUserId, e.getMessage(), e);
|
||||
// 不抛出异常,允许继续执行,但记录详细错误信息
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 将"车队长"角色分配给车队创建时的车队长用户
|
||||
* 优先从当前登录用户的角色中获取"车队长"角色,如果找不到,再根据组织ID查询
|
||||
* @param captainUserId 车队长用户ID
|
||||
* @param loginUser 当前登录用户
|
||||
*/
|
||||
private void assignCaptainRoleToUser(Long captainUserId, LoginUser loginUser) {
|
||||
if (captainUserId == null || loginUser == null || loginUser.getUserPo() == null) {
|
||||
log.warn("分配角色失败 - 车队长用户ID或登录用户信息为空");
|
||||
return;
|
||||
}
|
||||
|
||||
log.info("新增车队 - 分配车队长角色,车队长用户ID: {}", captainUserId);
|
||||
|
||||
Long loginUserId = loginUser.getUserPo().getUserId();
|
||||
Long organizationId = loginUser.getUserPo().getOrganizationId();
|
||||
|
||||
// 优先从当前登录用户的角色中查找"车队长"角色
|
||||
List<UserRoleMenuPO> loginUserRoleList = userRoleDomainService.selectRolesByUserId(loginUserId);
|
||||
RoleEntity roleEntity = null;
|
||||
|
||||
if (CollUtil.isNotEmpty(loginUserRoleList)) {
|
||||
log.info("当前登录用户共有 {} 个角色,查找车队长角色", loginUserRoleList.size());
|
||||
for (UserRoleMenuPO loginUserRole : loginUserRoleList) {
|
||||
if (RoleEnum.CAPTAIN.getCode().equals(loginUserRole.getRoleCode())) {
|
||||
// 找到"车队长"角色,使用当前登录用户的角色ID
|
||||
log.info("从当前登录用户的角色中找到车队长角色 - 角色ID: {}, 角色代码: {}", loginUserRole.getRoleId(), loginUserRole.getRoleCode());
|
||||
roleEntity = new RoleEntity();
|
||||
roleEntity.setRoleId(loginUserRole.getRoleId());
|
||||
roleEntity.setRoleCode(loginUserRole.getRoleCode());
|
||||
roleEntity.setRoleName(loginUserRole.getRoleName());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 如果当前登录用户没有"车队长"角色,根据组织ID查询
|
||||
if (ObjectUtil.isNull(roleEntity)) {
|
||||
if (organizationId == null) {
|
||||
log.warn("当前登录用户的组织ID为空,无法查询车队长角色");
|
||||
return;
|
||||
}
|
||||
|
||||
log.info("当前登录用户没有车队长角色,根据组织ID查询 - 组织ID: {}, 角色代码: {}", organizationId, RoleEnum.CAPTAIN.getCode());
|
||||
|
||||
// 查询"车队长"角色
|
||||
RoleDo roleDo = new RoleDo();
|
||||
roleDo.setRoleCode(RoleEnum.CAPTAIN.getCode());
|
||||
roleDo.setOrganizationId(organizationId);
|
||||
|
||||
roleEntity = roleDomainService.selectByOrganizationIdAndRoleCode(roleDo);
|
||||
|
||||
// 如果当前组织查询不到,尝试回退查询(不检查 organization_name IS NOT NULL)
|
||||
if (ObjectUtil.isNull(roleEntity)) {
|
||||
log.warn("使用 organization_name IS NOT NULL 条件查询不到角色,尝试回退查询(不检查 organization_name)- 组织ID: {}, 角色代码: {}", organizationId, RoleEnum.CAPTAIN.getCode());
|
||||
com.mhd.common.core.domain.po.RolePO rolePO = roleDomainService.selectByRoleCodeAndOrganizationId(RoleEnum.CAPTAIN.getCode(), organizationId);
|
||||
if (ObjectUtil.isNotNull(rolePO)) {
|
||||
// 将 RolePO 转换为 RoleEntity
|
||||
roleEntity = new RoleEntity();
|
||||
roleEntity.setRoleId(rolePO.getRoleId());
|
||||
roleEntity.setRoleCode(rolePO.getRoleCode());
|
||||
roleEntity.setRoleName(rolePO.getRoleName());
|
||||
roleEntity.setRoleRemark(rolePO.getRoleRemark());
|
||||
roleEntity.setRoleDataScope(rolePO.getRoleDataScope());
|
||||
roleEntity.setRoleStatus(rolePO.getRoleStatus());
|
||||
roleEntity.setRoleType(rolePO.getRoleType());
|
||||
roleEntity.setOrganizationId(rolePO.getOrganizationId());
|
||||
roleEntity.setOrganizationName(rolePO.getOrganizationName());
|
||||
roleEntity.setTopOrganizationId(rolePO.getTopOrganizationId());
|
||||
log.info("回退查询成功找到角色 - 角色ID: {}, 角色名称: {}, 组织名称: {}", roleEntity.getRoleId(), roleEntity.getRoleName(), roleEntity.getOrganizationName());
|
||||
}
|
||||
}
|
||||
|
||||
// 如果还是查询不到,尝试使用顶级组织ID查询
|
||||
if (ObjectUtil.isNull(roleEntity)) {
|
||||
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
|
||||
if (topOrganizationId != null && topOrganizationId.equals(organizationId)) {
|
||||
log.info("当前组织查询不到角色,尝试使用顶级组织ID查询 - 顶级组织ID: {}, 角色代码: {}", topOrganizationId, RoleEnum.CAPTAIN.getCode());
|
||||
roleDo.setOrganizationId(null);
|
||||
roleDo.setTopOrganizationId(topOrganizationId);
|
||||
roleEntity = roleDomainService.selectByOrganizationIdAndRoleCode(roleDo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ObjectUtil.isNotNull(roleEntity)) {
|
||||
log.info("找到车队长角色 - 角色ID: {}, 角色名称: {}", roleEntity.getRoleId(), roleEntity.getRoleName());
|
||||
UserRoleDo userRoleDo = new UserRoleDo();
|
||||
userRoleDo.setUserId(captainUserId);
|
||||
userRoleDo.setRoleId(roleEntity.getRoleId());
|
||||
|
||||
// 判断是否已存在相应角色
|
||||
List<UserRoleEntity> userRoleEntities = userRoleDomainService.selectList(userRoleDo);
|
||||
if (CollUtil.isEmpty(userRoleEntities)) {
|
||||
userRoleDomainService.addUserRole(userRoleDo);
|
||||
log.info("成功分配车队长角色给用户 - 角色ID: {}, 角色名称: {}", roleEntity.getRoleId(), roleEntity.getRoleName());
|
||||
} else {
|
||||
log.info("用户已存在车队长角色,跳过 - 角色ID: {}", roleEntity.getRoleId());
|
||||
}
|
||||
} else {
|
||||
log.warn("未找到车队长角色 - 组织ID: {}, 角色代码: {}, 请检查该组织下是否配置了该角色", organizationId, RoleEnum.CAPTAIN.getCode());
|
||||
// 不抛出异常,允许继续执行,因为角色可能在其他地方分配
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@NeedSetValueField
|
||||
public Boolean editWeb(MotorcadeDO motorcadeDo) {
|
||||
@@ -1166,7 +1429,29 @@ public class MotorcadeApplicationService {
|
||||
return motorcadeDomainService.queryList(motorcadeDo);
|
||||
}
|
||||
public List<MotorcadePo> queryNonePagingList() {
|
||||
return motorcadeDomainService.queryNonePagingList();
|
||||
// 获取当前登录用户的组织信息,用于数据权限过滤
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (loginUser != null && loginUser.getUserPo() != null) {
|
||||
UserPo userPo = loginUser.getUserPo();
|
||||
Long organizationId = userPo.getOrganizationId();
|
||||
Long topOrganizationId = userPo.getTopOrganizationId();
|
||||
|
||||
// 数据权限:根据 organizationId 来设置查询权限
|
||||
// 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己
|
||||
if (organizationId != null && organizationId.equals(2827L)) {
|
||||
// 南光组织(organizationId=2827):可以查询所有组织的数据,传递 null 表示不限制
|
||||
log.info("查询车队列表(不分页) - 南光组织,查询所有组织的数据");
|
||||
return motorcadeDomainService.queryNonePagingList(null, null);
|
||||
} else {
|
||||
// 其他组织:只能查询自己组织的数据
|
||||
if (organizationId != null) {
|
||||
log.info("查询车队列表(不分页) - 其他组织,查询组织ID: {}", organizationId);
|
||||
return motorcadeDomainService.queryNonePagingList(organizationId, topOrganizationId);
|
||||
}
|
||||
}
|
||||
}
|
||||
log.warn("查询车队列表(不分页) - 未获取到登录用户信息或组织ID,返回空列表");
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+4
@@ -146,6 +146,10 @@ public class OpenUserApplicationService {
|
||||
userDriverDO.setUserId(userPo.getUserId());
|
||||
userDriverDO.setDriverEnterpriseCode(openDriverDto.getDriverEnterpriseCode());
|
||||
userDriverDO.setDataSources(openDriverDto.getDataSources());
|
||||
// 设置组织信息
|
||||
userDriverDO.setOrganizationId(sysTenantsPo.getOrganizationId());
|
||||
userDriverDO.setTopOrganizationId(sysTenantsPo.getTopOrganizationId());
|
||||
userDriverDO.setOrganizationName(sysTenantsPo.getOrganizationName());
|
||||
userDriverDomainService.saveUserDriverByOpen(userDriverDO);
|
||||
|
||||
//处理车队数据
|
||||
|
||||
+188
-11
@@ -83,22 +83,78 @@ public class RoleApplicationService {
|
||||
throw new DigitalLogisticsException(UserError.TIMEOUT);
|
||||
}
|
||||
UserPo userPo = loginUser.getUserPo();
|
||||
|
||||
// 先保存前端传递的 organizationId(如果存在)
|
||||
Long frontendOrganizationId = roleDo.getOrganizationId();
|
||||
|
||||
// 获取登录用户信息
|
||||
Long loginUserOrganizationId = null;
|
||||
Long topOrganizationId = null;
|
||||
if (userPo != null) {
|
||||
loginUserOrganizationId = userPo.getOrganizationId();
|
||||
topOrganizationId = userPo.getTopOrganizationId();
|
||||
}
|
||||
|
||||
if (userPo.getUserAccountType() != null && userPo.getUserAccountType() == 5){
|
||||
roleDo.setCreateBy(userPo.getCreateBy());
|
||||
}else {
|
||||
UserDataPermissionQueryDTO userDataPermissionQueryDTO = new UserDataPermissionQueryDTO();
|
||||
userDataPermissionQueryDTO.setPermissionMenuId(roleDo.getPermissionMenuId());
|
||||
userDataPermissionQueryDTO = userDataPermissionApplicationService.getUserDataPermissionQueryDTO(userDataPermissionQueryDTO);
|
||||
|
||||
// 在复制属性之前,先保存前端传递的 organizationId(如果存在)
|
||||
// 因为 BeanUtils.copyProperties 可能会覆盖掉前端传递的值
|
||||
Long savedFrontendOrganizationId = frontendOrganizationId;
|
||||
|
||||
BeanUtils.copyProperties(userDataPermissionQueryDTO, roleDo, IgnoreNullUtil.getNullPropertyNames(userDataPermissionQueryDTO));
|
||||
UserPo loginUserPo = loginUser.getUserPo();
|
||||
if (ObjectUtil.isNull(roleDo.getOrganizationId())) {
|
||||
roleDo.setOrganizationId(loginUserPo.getOrganizationId());
|
||||
|
||||
// 重新获取前端传递的 organizationId(优先使用前端传递的值)
|
||||
// 对于南光组织,如果前端传递了 organizationId,必须使用前端传递的值
|
||||
Long currentFrontendOrganizationId = savedFrontendOrganizationId != null ? savedFrontendOrganizationId : roleDo.getOrganizationId();
|
||||
|
||||
// 数据权限:查询权限根据 organizationId 来设置,与其他模块保持一致
|
||||
// organizationId等于2827时,为南光组织,查所有;其他组织查自己
|
||||
if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
|
||||
// 南光组织(organizationId=2827):可以查询所有组织的数据
|
||||
// 如果前端传递了 organizationId(包括2827),使用前端传递的值进行过滤
|
||||
// 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
|
||||
if (currentFrontendOrganizationId != null) {
|
||||
// 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤
|
||||
roleDo.setOrganizationId(currentFrontendOrganizationId);
|
||||
roleDo.setTopOrganizationId(null);
|
||||
} else {
|
||||
// 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
|
||||
roleDo.setOrganizationId(null);
|
||||
roleDo.setTopOrganizationId(null);
|
||||
}
|
||||
if (!Strings.isNullOrEmpty(loginUserPo.getRoleCode()) && RoleEnum.SUPER_ADMIN.getCode().equals(loginUserPo.getRoleCode())) {
|
||||
//角色等级:0-无状态,1-内置角色,2-组织角色
|
||||
roleDo.setRoleGrade(1);
|
||||
//roleDo.setRoleGrade(1);
|
||||
} else {
|
||||
//roleDo.setRoleGrade(2);
|
||||
}
|
||||
} else {
|
||||
roleDo.setRoleGrade(2);
|
||||
// 其他组织:设置organizationId,只查询当前组织的数据
|
||||
// 其他组织只能查询自己组织的数据,不能查询其他组织的数据
|
||||
if (currentFrontendOrganizationId != null) {
|
||||
// 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致
|
||||
if (!currentFrontendOrganizationId.equals(loginUserOrganizationId)) {
|
||||
// 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询
|
||||
log.warn("角色查询 - 前端传递的组织ID {} 与当前登录用户的组织ID {} 不一致,使用当前登录用户的组织ID进行过滤",
|
||||
currentFrontendOrganizationId, loginUserOrganizationId);
|
||||
roleDo.setOrganizationId(loginUserOrganizationId);
|
||||
} else {
|
||||
// 前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值
|
||||
roleDo.setOrganizationId(currentFrontendOrganizationId);
|
||||
}
|
||||
roleDo.setTopOrganizationId(topOrganizationId);
|
||||
} else {
|
||||
// 前端没有传递 organizationId,使用当前登录用户的组织ID
|
||||
roleDo.setOrganizationId(loginUserOrganizationId);
|
||||
roleDo.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
//roleDo.setRoleGrade(2);
|
||||
}
|
||||
}
|
||||
return roleDomainService.selecRolePoList(roleDo);
|
||||
@@ -144,8 +200,39 @@ public class RoleApplicationService {
|
||||
throw new DigitalLogisticsException(UserError.TIMEOUT);
|
||||
}
|
||||
UserPo loginUserPo = loginUser.getUserPo();
|
||||
if (ObjectUtil.isNull(roleDo.getOrganizationId())) {
|
||||
roleDo.setOrganizationId(loginUserPo.getOrganizationId());
|
||||
|
||||
// 保存前端传递的 organizationId
|
||||
Long frontendOrganizationId = roleDo.getOrganizationId();
|
||||
Long loginUserOrganizationId = loginUserPo.getOrganizationId();
|
||||
|
||||
// 数据权限:查询权限根据 organizationId 来设置,与其他模块保持一致
|
||||
// organizationId等于2827时,为南光组织,查所有;其他组织查自己
|
||||
if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
|
||||
// 南光组织(organizationId=2827):可以查询所有组织的数据
|
||||
// 如果前端传递了 organizationId 且不等于 2827,使用前端传递的值进行过滤
|
||||
// 如果前端没有传递 organizationId 或传递的是 2827,清空组织过滤条件,查询所有组织的数据
|
||||
if (frontendOrganizationId != null && !frontendOrganizationId.equals(2827L)) {
|
||||
// 前端传递了其他组织的 organizationId,使用前端传递的值进行过滤
|
||||
roleDo.setOrganizationId(frontendOrganizationId);
|
||||
roleDo.setTopOrganizationId(null);
|
||||
} else {
|
||||
// 前端没有传递 organizationId 或传递的是 2827,清空组织过滤条件,查询所有组织的数据
|
||||
roleDo.setOrganizationId(null);
|
||||
roleDo.setTopOrganizationId(null);
|
||||
}
|
||||
} else {
|
||||
// 其他组织:设置organizationId,只查询当前组织的数据
|
||||
if (ObjectUtil.isNull(frontendOrganizationId)) {
|
||||
roleDo.setOrganizationId(loginUserOrganizationId);
|
||||
} else {
|
||||
// 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致
|
||||
if (!frontendOrganizationId.equals(loginUserOrganizationId)) {
|
||||
// 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询
|
||||
log.warn("角色查询 - 前端传递的组织ID {} 与当前登录用户的组织ID {} 不一致,使用当前登录用户的组织ID进行过滤",
|
||||
frontendOrganizationId, loginUserOrganizationId);
|
||||
roleDo.setOrganizationId(loginUserOrganizationId);
|
||||
}
|
||||
}
|
||||
}
|
||||
return roleDomainService.selectList(roleDo);
|
||||
}
|
||||
@@ -226,10 +313,36 @@ public class RoleApplicationService {
|
||||
}
|
||||
UserPo loginUserPo = loginUser.getUserPo();
|
||||
|
||||
//校验组织ID是否存在
|
||||
if(ObjectUtil.isNull(roleDo.getOrganizationId())){
|
||||
roleDo.setOrganizationId(loginUserPo.getOrganizationId());
|
||||
// 数据隔离:校验组织ID和权限,与其他模块保持一致
|
||||
Long frontendOrganizationId = roleDo.getOrganizationId();
|
||||
Long loginUserOrganizationId = loginUserPo.getOrganizationId();
|
||||
Long topOrganizationId = loginUserPo.getTopOrganizationId();
|
||||
|
||||
// 判断是否为南光组织:topOrganizationId == null 时为顶级组织(南光组织)
|
||||
// 与其他模块保持一致(VerificationApplicationService、TmsReceiptApplicationService等)
|
||||
boolean isNanguangOrg = (topOrganizationId == null);
|
||||
|
||||
if (ObjectUtil.isNull(frontendOrganizationId)) {
|
||||
// 如果前端没有传递 organizationId,使用当前登录用户的组织ID
|
||||
roleDo.setOrganizationId(loginUserOrganizationId);
|
||||
} else {
|
||||
// 如果前端传递了 organizationId,需要进行数据权限校验
|
||||
if (isNanguangOrg) {
|
||||
// 南光组织:可以为任何组织创建角色,使用前端传递的 organizationId
|
||||
roleDo.setOrganizationId(frontendOrganizationId);
|
||||
log.info("南光组织创建角色 - 目标组织ID: {}", frontendOrganizationId);
|
||||
} else {
|
||||
// 其他组织:只能为自己组织创建角色,不能为其他组织创建角色
|
||||
if (!frontendOrganizationId.equals(loginUserOrganizationId)) {
|
||||
log.warn("非南光组织尝试为其他组织创建角色 - 登录用户组织ID: {}, 尝试创建的组织ID: {}",
|
||||
loginUserOrganizationId, frontendOrganizationId);
|
||||
throw new ServiceException("无权限为其他组织创建角色,只能为本组织创建角色");
|
||||
}
|
||||
// 使用当前登录用户的组织ID
|
||||
roleDo.setOrganizationId(loginUserOrganizationId);
|
||||
}
|
||||
}
|
||||
|
||||
if (ObjectUtil.isNotNull(roleDo.getRoleId())) {
|
||||
RolePO rolePO = roleDomainService.selectByRoleId(roleDo.getRoleId());
|
||||
if (rolePO == null) {
|
||||
@@ -254,7 +367,58 @@ public class RoleApplicationService {
|
||||
if (roleEntity != null){
|
||||
throw new ServiceException("角色编码重复");
|
||||
}
|
||||
roleDo.setOrganizationId(loginUser.getUserPo().getOrganizationId());
|
||||
// 设置组织信息:保留传入的 organizationId,如果为 null 则使用当前登录用户的组织ID
|
||||
// 注意:不能强制覆盖传入的 organizationId,否则会导致角色保存到错误的组织下
|
||||
if (roleDo.getOrganizationId() == null) {
|
||||
roleDo.setOrganizationId(loginUserPo.getOrganizationId());
|
||||
roleDo.setOrganizationName(loginUserPo.getOrganizationName());
|
||||
roleDo.setTopOrganizationId(loginUserPo.getTopOrganizationId());
|
||||
} else {
|
||||
// 如果传入了 organizationId,需要根据该 organizationId 查询对应的 organizationName
|
||||
// 如果 organizationName 为空,尝试通过 Feign 查询组织信息
|
||||
if (roleDo.getOrganizationName() == null || roleDo.getOrganizationName().isEmpty()) {
|
||||
try {
|
||||
AjaxResult orgInfo = organizationServiceFeign.getInfo(roleDo.getOrganizationId());
|
||||
if (orgInfo != null && "200".equals(String.valueOf(orgInfo.get("code")))) {
|
||||
JSONObject data = (JSONObject) orgInfo.get("data");
|
||||
if (data != null && data.containsKey("organizationName")) {
|
||||
roleDo.setOrganizationName(data.getString("organizationName"));
|
||||
log.info("通过 ProductServiceFeign 获取到组织名称: {}", roleDo.getOrganizationName());
|
||||
}
|
||||
}
|
||||
// 如果查询失败,使用当前登录用户的组织名称作为默认值
|
||||
if (roleDo.getOrganizationName() == null || roleDo.getOrganizationName().isEmpty()) {
|
||||
roleDo.setOrganizationName(loginUserPo.getOrganizationName());
|
||||
log.warn("无法通过 organizationId {} 获取组织名称,使用当前登录用户的组织名称作为默认值", roleDo.getOrganizationId());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.warn("通过 ProductServiceFeign 获取组织名称失败: {},使用当前登录用户的组织名称作为默认值", e.getMessage());
|
||||
roleDo.setOrganizationName(loginUserPo.getOrganizationName());
|
||||
}
|
||||
}
|
||||
// 如果 topOrganizationId 为空,尝试从组织信息中获取,否则使用当前登录用户的顶级组织ID
|
||||
if (roleDo.getTopOrganizationId() == null) {
|
||||
try {
|
||||
AjaxResult orgInfo = organizationServiceFeign.getInfo(roleDo.getOrganizationId());
|
||||
if (orgInfo != null && "200".equals(String.valueOf(orgInfo.get("code")))) {
|
||||
JSONObject data = (JSONObject) orgInfo.get("data");
|
||||
if (data != null && data.containsKey("topOrganizationId")) {
|
||||
Object topOrgId = data.get("topOrganizationId");
|
||||
if (topOrgId != null) {
|
||||
roleDo.setTopOrganizationId(Long.parseLong(topOrgId.toString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
// 如果查询失败,使用当前登录用户的顶级组织ID作为默认值
|
||||
if (roleDo.getTopOrganizationId() == null) {
|
||||
roleDo.setTopOrganizationId(loginUserPo.getTopOrganizationId());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.warn("通过 ProductServiceFeign 获取顶级组织ID失败: {},使用当前登录用户的顶级组织ID作为默认值", e.getMessage());
|
||||
roleDo.setTopOrganizationId(loginUserPo.getTopOrganizationId());
|
||||
}
|
||||
}
|
||||
}
|
||||
roleDo.setCreateBy(loginUserPo.getUserId());
|
||||
roleDo.setCreateByName(loginUserPo.getUserName());
|
||||
roleDo.setCreateTime(new Date());
|
||||
@@ -263,6 +427,19 @@ public class RoleApplicationService {
|
||||
roleDo.setUpdateTime(new Date());
|
||||
//删除标记:0-无状态,1-正常,2-已删除
|
||||
roleDo.setDelFlag(1);
|
||||
|
||||
// 添加调试日志,确认保存的角色信息
|
||||
log.info("新增角色 - 组织ID: {}, 组织名称: {}, 角色代码: {}, 角色名称: {}, 顶级组织ID: {}",
|
||||
roleDo.getOrganizationId(), roleDo.getOrganizationName(), roleDo.getRoleCode(),
|
||||
roleDo.getRoleName(), roleDo.getTopOrganizationId());
|
||||
|
||||
// 确保 organizationName 不为空,否则查询时会查不到
|
||||
if (roleDo.getOrganizationName() == null || roleDo.getOrganizationName().isEmpty()) {
|
||||
log.error("新增角色失败 - organizationName 为空!组织ID: {}, 角色代码: {}",
|
||||
roleDo.getOrganizationId(), roleDo.getRoleCode());
|
||||
throw new ServiceException("组织名称不能为空,请检查组织信息是否正确");
|
||||
}
|
||||
|
||||
int i = roleDomainService.addRole(roleDo);
|
||||
Long roleId = roleDo.getRoleId();
|
||||
//复制之前角色的菜单
|
||||
@@ -984,4 +1161,4 @@ public class RoleApplicationService {
|
||||
public List<RolePO> getRoleListByUserId(Long userId) {
|
||||
return roleDomainService.getRoleListByUserId(userId);
|
||||
}
|
||||
}
|
||||
}
|
||||
+121
-11
@@ -330,17 +330,82 @@ public class UserApplicationService {
|
||||
* @Date 2023/1/12 14:58
|
||||
*/
|
||||
public List<UserPo> staffList(UserDO userDo) {
|
||||
// 首先保存前端传递的 organizationId(如果存在)
|
||||
Long frontendOrganizationId = userDo.getOrganizationId();
|
||||
|
||||
//获取当前登陆人
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
UserPo userPo = loginUser.getUserPo();
|
||||
if (ObjectUtil.isNull(loginUser)) {
|
||||
throw new DigitalLogisticsException(UserError.TIMEOUT);
|
||||
}
|
||||
if (userPo.getRoleCode().contains(RoleEnum.PLAT_ADMIN.getCode()) && ObjectUtil.equal(userPo.getOrganizationId(),userPo.getTopOrganizationId())){
|
||||
userDo.setTopOrganizationId(userPo.getTopOrganizationId());
|
||||
}else {
|
||||
userDo.setOrganizationId(userPo.getOrganizationId());
|
||||
|
||||
Long loginUserOrganizationId = userPo.getOrganizationId();
|
||||
Long topOrganizationId = userPo.getTopOrganizationId();
|
||||
|
||||
// 数据权限:查询权限根据 organizationId 来设置
|
||||
// 当 organizationId 是 2827 时查询全部,其他仅查询各自组织的信息
|
||||
if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
|
||||
// 南光组织(organizationId=2827):可以查询所有组织的数据
|
||||
// 如果前端传递了 organizationId,使用前端传递的值进行过滤(包括2827)
|
||||
// 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
|
||||
if (frontendOrganizationId != null) {
|
||||
// 前端传递了 organizationId,使用前端传递的值进行过滤
|
||||
userDo.setOrganizationId(frontendOrganizationId);
|
||||
userDo.setTopOrganizationId(null);
|
||||
} else {
|
||||
// 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
|
||||
// 但如果用户是平台管理员且 organizationId 等于 topOrganizationId,使用 topOrganizationId
|
||||
if (userPo.getRoleCode() != null && userPo.getRoleCode().contains(RoleEnum.PLAT_ADMIN.getCode())
|
||||
&& ObjectUtil.equal(loginUserOrganizationId, topOrganizationId)) {
|
||||
userDo.setTopOrganizationId(topOrganizationId);
|
||||
userDo.setOrganizationId(null);
|
||||
} else {
|
||||
userDo.setOrganizationId(null);
|
||||
userDo.setTopOrganizationId(null);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 其他组织:设置organizationId,只查询当前组织的数据
|
||||
// 其他组织只能查询自己组织的数据,不能查询其他组织(包括南光)的数据
|
||||
// 如果其他组织尝试查询南光(organizationId=2827)的数据,返回空数据
|
||||
if (frontendOrganizationId != null) {
|
||||
// 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致
|
||||
if (frontendOrganizationId.equals(2827L)) {
|
||||
// 其他组织尝试查询南光的数据,设置一个不存在的 organizationId,返回空数据
|
||||
userDo.setOrganizationId(-1L);
|
||||
userDo.setTopOrganizationId(null);
|
||||
} else if (!frontendOrganizationId.equals(loginUserOrganizationId)) {
|
||||
// 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询
|
||||
userDo.setOrganizationId(loginUserOrganizationId);
|
||||
if (topOrganizationId != null) {
|
||||
userDo.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
} else {
|
||||
// 前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值
|
||||
userDo.setOrganizationId(frontendOrganizationId);
|
||||
if (topOrganizationId != null) {
|
||||
userDo.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 前端没有传递 organizationId,使用当前登录用户的组织ID
|
||||
// 如果用户是平台管理员且 organizationId 等于 topOrganizationId,使用 topOrganizationId
|
||||
if (userPo.getRoleCode() != null && userPo.getRoleCode().contains(RoleEnum.PLAT_ADMIN.getCode())
|
||||
&& ObjectUtil.equal(loginUserOrganizationId, topOrganizationId)) {
|
||||
userDo.setTopOrganizationId(topOrganizationId);
|
||||
userDo.setOrganizationId(null);
|
||||
} else {
|
||||
if (loginUserOrganizationId != null) {
|
||||
userDo.setOrganizationId(loginUserOrganizationId);
|
||||
}
|
||||
if (topOrganizationId != null) {
|
||||
userDo.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return userDomainService.selectList(userDo);
|
||||
}
|
||||
|
||||
@@ -1084,6 +1149,19 @@ public class UserApplicationService {
|
||||
if (ObjectUtil.isNull(userDO.getOrganizationId())) {
|
||||
userDO.setOrganizationId(loginUser.getUserPo().getOrganizationId());
|
||||
userDO.setOrganizationName(loginUser.getUserPo().getOrganizationName());
|
||||
} else {
|
||||
// 如果前端传递了 organizationId,根据 organizationId 查询组织信息,获取正确的组织名称
|
||||
AjaxResult orgInfoResult = productServiceFeign.getInfo(userDO.getOrganizationId());
|
||||
String orgInfoCode = orgInfoResult.get("code").toString();
|
||||
if ("200".equals(orgInfoCode)) {
|
||||
Object orgData = orgInfoResult.get("data");
|
||||
if (ObjectUtil.isNotNull(orgData)) {
|
||||
OrganizationPo organizationPo = BeanUtil.toBean(orgData, OrganizationPo.class);
|
||||
if (ObjectUtil.isNotNull(organizationPo)) {
|
||||
userDO.setOrganizationName(organizationPo.getOrganizationName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
UserPo userPo = new UserPo();
|
||||
//先根据组织ID获取一级组织
|
||||
@@ -1151,7 +1229,15 @@ public class UserApplicationService {
|
||||
}
|
||||
BeanUtils.copyProperties(userEntity, userPo);
|
||||
//同步网货平台员工信息
|
||||
wlhyDomainService.addOrEditPlatformUser(userEntity);
|
||||
try {
|
||||
wlhyDomainService.addOrEditPlatformUser(userEntity);
|
||||
} catch (Exception e) {
|
||||
// 同步网货失败时,记录日志但不影响用户保存
|
||||
// 避免同步失败导致整个事务回滚,用户数据无法保存
|
||||
log.warn("同步网货平台员工信息失败,但不影响用户保存: {}", e.getMessage());
|
||||
// 如果业务要求必须同步成功,可以取消下面的注释,让异常抛出
|
||||
// throw e;
|
||||
}
|
||||
return userPo;
|
||||
}
|
||||
}
|
||||
@@ -1249,7 +1335,12 @@ public class UserApplicationService {
|
||||
}
|
||||
BeanUtils.copyProperties(userEntity, userPo);
|
||||
//同步网货平台员工信息
|
||||
wlhyDomainService.addOrEditPlatformUser(userEntity);
|
||||
try {
|
||||
wlhyDomainService.addOrEditPlatformUser(userEntity);
|
||||
} catch (Exception e) {
|
||||
// 同步网货失败时,记录日志但不影响用户保存
|
||||
log.warn("同步网货平台员工信息失败,但不影响用户保存: {}", e.getMessage());
|
||||
}
|
||||
return userPo;
|
||||
}
|
||||
}
|
||||
@@ -1342,7 +1433,12 @@ public class UserApplicationService {
|
||||
}
|
||||
BeanUtils.copyProperties(userEntity, userPo);
|
||||
//同步网货平台员工信息
|
||||
wlhyDomainService.addOrEditPlatformUser(userEntity);
|
||||
try {
|
||||
wlhyDomainService.addOrEditPlatformUser(userEntity);
|
||||
} catch (Exception e) {
|
||||
// 同步网货失败时,记录日志但不影响用户保存
|
||||
log.warn("同步网货平台员工信息失败,但不影响用户保存: {}", e.getMessage());
|
||||
}
|
||||
return userPo;
|
||||
}
|
||||
}
|
||||
@@ -2042,6 +2138,7 @@ public class UserApplicationService {
|
||||
VehiclePo vehiclePo = new VehiclePo();
|
||||
sysUser.setUserid(userPo.getUserId());
|
||||
sysUser.setUsername(userPo.getUserAccount());
|
||||
sysUser.setRealname(userPo.getUserName());
|
||||
UserDriverPo userDriverPo = userDriverDomainService.selectByUserId(userPo.getUserId());
|
||||
if (ObjectUtil.isNull(userDriverPo)) {
|
||||
userDriverPo = new UserDriverPo();
|
||||
@@ -4822,12 +4919,25 @@ public class UserApplicationService {
|
||||
if (Objects.isNull(loginUser)){
|
||||
throw new ServiceException("当前用户不存在!");
|
||||
}
|
||||
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
|
||||
Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
|
||||
Long filterOrganizationId = null;
|
||||
Long userId = null;
|
||||
if(loginUser.getUserPo().getBusinessType()==1||loginUser.getUserPo().getBusinessType()==3||loginUser.getUserPo().getUserAccountType()==5){
|
||||
userId = loginUser.getUserid();
|
||||
|
||||
// 数据隔离:根据 organizationId 字段来实现
|
||||
// 如果当前登录用户的organizationId为2827,可查询全部组织数据;其他组织只能查询自己组织的数据
|
||||
if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
|
||||
// 南光组织:查询所有组织的数据,不设置 organizationId 和 userId 过滤条件
|
||||
filterOrganizationId = null;
|
||||
userId = null;
|
||||
} else {
|
||||
// 其他组织:只查询自己组织的数据
|
||||
filterOrganizationId = loginUserOrganizationId;
|
||||
// 如果当前登录用户是货主或企业用户,只查询当前登录用户的信息
|
||||
if(loginUser.getUserPo().getBusinessType()==1||loginUser.getUserPo().getBusinessType()==3||loginUser.getUserPo().getUserAccountType()==5){
|
||||
userId = loginUser.getUserid();
|
||||
}
|
||||
}
|
||||
return userDomainService.findAllShipperInfo(userId,topOrganizationId);
|
||||
return userDomainService.findAllShipperInfo(userId, filterOrganizationId);
|
||||
}
|
||||
|
||||
private QueryAllShipperInfoVo convertToVo(UserEntity userEntity) {
|
||||
|
||||
+173
@@ -44,6 +44,8 @@ import com.mhd.user.domain.roleAggregate.entity.RoleEntity;
|
||||
import com.mhd.user.domain.roleAggregate.repository.todo.RoleDo;
|
||||
import com.mhd.user.domain.roleAggregate.service.RoleDomainService;
|
||||
import com.mhd.user.domain.userAggregate.entity.*;
|
||||
import com.mhd.user.domain.userAggregate.repository.mapper.DriverVehicleBindMapper;
|
||||
import com.mhd.user.domain.userAggregate.repository.mapper.UserMapper;
|
||||
import com.mhd.user.domain.userAggregate.repository.po.*;
|
||||
import com.mhd.user.domain.userAggregate.repository.po.UserDriverEnterprisePo;
|
||||
import com.mhd.user.domain.userAggregate.repository.po.UserDriverPo;
|
||||
@@ -178,6 +180,10 @@ public class UserDriverApplicationService {
|
||||
private MotorcadeCollectionDomainService motorcadeCollectionDomainService;
|
||||
@Resource
|
||||
private VehicleBindingStrategyFactory vehicleBindingStrategyFactory;
|
||||
@Autowired
|
||||
private DriverVehicleBindMapper driverVehicleBindMapper;
|
||||
@Autowired
|
||||
private UserMapper userMapper;
|
||||
|
||||
/**
|
||||
* @Description 承运人列表查询
|
||||
@@ -323,6 +329,14 @@ public class UserDriverApplicationService {
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
|
||||
// 设置当前登录用户的组织信息
|
||||
UserPo userPo = loginUser.getUserPo();
|
||||
if (userPo != null) {
|
||||
userDriverDO.setOrganizationId(userPo.getOrganizationId());
|
||||
userDriverDO.setOrganizationName(userPo.getOrganizationName());
|
||||
userDriverDO.setTopOrganizationId(userPo.getTopOrganizationId());
|
||||
}
|
||||
|
||||
if(userDriverDO.getUserDriverType()==1&&StringUtils.isBlank(userDriverDO.getDepartmentId())){
|
||||
throw new ServiceException("请维护司机部门信息");
|
||||
}
|
||||
@@ -344,6 +358,9 @@ public class UserDriverApplicationService {
|
||||
if (ObjectUtil.isNull(userDriverDO.getUserId())) {
|
||||
throw new ServiceException("用户ID未设置,无法继续司机认证流程");
|
||||
}
|
||||
|
||||
// 新增承运人时,使用当前登录账号的用户角色
|
||||
assignLoginUserRolesToDriver(userDriverDO.getUserId(), loginUser);
|
||||
|
||||
// 新增的自有司机,默认审核通过
|
||||
if (userDriverDO.getUserDriverType().equals(UserDriverConstants.OWN_DIVER)){
|
||||
@@ -580,6 +597,111 @@ public class UserDriverApplicationService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 将"个人司机"角色分配给新创建的承运人用户
|
||||
* 优先从当前登录用户的角色中获取"个人司机"角色,如果找不到,再根据组织ID查询
|
||||
* @param driverUserId 承运人用户ID
|
||||
* @param loginUser 当前登录用户
|
||||
*/
|
||||
private void assignLoginUserRolesToDriver(Long driverUserId, LoginUser loginUser) {
|
||||
if (driverUserId == null || loginUser == null || loginUser.getUserPo() == null) {
|
||||
log.warn("分配角色失败 - 承运人用户ID或登录用户信息为空");
|
||||
return;
|
||||
}
|
||||
|
||||
log.info("新增承运人 - 分配个人司机角色,承运人用户ID: {}", driverUserId);
|
||||
|
||||
Long loginUserId = loginUser.getUserPo().getUserId();
|
||||
Long organizationId = loginUser.getUserPo().getOrganizationId();
|
||||
|
||||
// 优先从当前登录用户的角色中查找"个人司机"角色
|
||||
List<UserRoleMenuPO> loginUserRoleList = userRoleDomainService.selectRolesByUserId(loginUserId);
|
||||
RoleEntity roleEntity = null;
|
||||
|
||||
if (CollUtil.isNotEmpty(loginUserRoleList)) {
|
||||
log.info("当前登录用户共有 {} 个角色,查找个人司机角色", loginUserRoleList.size());
|
||||
for (UserRoleMenuPO loginUserRole : loginUserRoleList) {
|
||||
if (RoleEnum.DRIVER.getCode().equals(loginUserRole.getRoleCode())) {
|
||||
// 找到"个人司机"角色,使用当前登录用户的角色ID
|
||||
log.info("从当前登录用户的角色中找到个人司机角色 - 角色ID: {}, 角色代码: {}", loginUserRole.getRoleId(), loginUserRole.getRoleCode());
|
||||
roleEntity = new RoleEntity();
|
||||
roleEntity.setRoleId(loginUserRole.getRoleId());
|
||||
roleEntity.setRoleCode(loginUserRole.getRoleCode());
|
||||
roleEntity.setRoleName(loginUserRole.getRoleName());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 如果当前登录用户没有"个人司机"角色,根据组织ID查询
|
||||
if (ObjectUtil.isNull(roleEntity)) {
|
||||
if (organizationId == null) {
|
||||
log.warn("当前登录用户的组织ID为空,无法查询个人司机角色");
|
||||
return;
|
||||
}
|
||||
|
||||
log.info("当前登录用户没有个人司机角色,根据组织ID查询 - 组织ID: {}, 角色代码: {}", organizationId, RoleEnum.DRIVER.getCode());
|
||||
|
||||
// 查询"个人司机"角色
|
||||
RoleDo roleDo = new RoleDo();
|
||||
roleDo.setRoleCode(RoleEnum.DRIVER.getCode());
|
||||
roleDo.setOrganizationId(organizationId);
|
||||
|
||||
roleEntity = roleDomainService.selectByOrganizationIdAndRoleCode(roleDo);
|
||||
|
||||
// 如果当前组织查询不到,尝试回退查询(不检查 organization_name IS NOT NULL)
|
||||
if (ObjectUtil.isNull(roleEntity)) {
|
||||
log.warn("使用 organization_name IS NOT NULL 条件查询不到角色,尝试回退查询(不检查 organization_name)- 组织ID: {}, 角色代码: {}", organizationId, RoleEnum.DRIVER.getCode());
|
||||
com.mhd.common.core.domain.po.RolePO rolePO = roleDomainService.selectByRoleCodeAndOrganizationId(RoleEnum.DRIVER.getCode(), organizationId);
|
||||
if (ObjectUtil.isNotNull(rolePO)) {
|
||||
// 将 RolePO 转换为 RoleEntity
|
||||
roleEntity = new RoleEntity();
|
||||
roleEntity.setRoleId(rolePO.getRoleId());
|
||||
roleEntity.setRoleCode(rolePO.getRoleCode());
|
||||
roleEntity.setRoleName(rolePO.getRoleName());
|
||||
roleEntity.setRoleRemark(rolePO.getRoleRemark());
|
||||
roleEntity.setRoleDataScope(rolePO.getRoleDataScope());
|
||||
roleEntity.setRoleStatus(rolePO.getRoleStatus());
|
||||
roleEntity.setRoleType(rolePO.getRoleType());
|
||||
roleEntity.setOrganizationId(rolePO.getOrganizationId());
|
||||
roleEntity.setOrganizationName(rolePO.getOrganizationName());
|
||||
roleEntity.setTopOrganizationId(rolePO.getTopOrganizationId());
|
||||
log.info("回退查询成功找到角色 - 角色ID: {}, 角色名称: {}, 组织名称: {}", roleEntity.getRoleId(), roleEntity.getRoleName(), roleEntity.getOrganizationName());
|
||||
}
|
||||
}
|
||||
|
||||
// 如果还是查询不到,尝试使用顶级组织ID查询
|
||||
if (ObjectUtil.isNull(roleEntity)) {
|
||||
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
|
||||
if (topOrganizationId != null && topOrganizationId.equals(organizationId)) {
|
||||
log.info("当前组织查询不到角色,尝试使用顶级组织ID查询 - 顶级组织ID: {}, 角色代码: {}", topOrganizationId, RoleEnum.DRIVER.getCode());
|
||||
roleDo.setOrganizationId(null);
|
||||
roleDo.setTopOrganizationId(topOrganizationId);
|
||||
roleEntity = roleDomainService.selectByOrganizationIdAndRoleCode(roleDo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ObjectUtil.isNotNull(roleEntity)) {
|
||||
log.info("找到个人司机角色 - 角色ID: {}, 角色名称: {}", roleEntity.getRoleId(), roleEntity.getRoleName());
|
||||
UserRoleDo userRoleDo = new UserRoleDo();
|
||||
userRoleDo.setUserId(driverUserId);
|
||||
userRoleDo.setRoleId(roleEntity.getRoleId());
|
||||
|
||||
// 判断是否已存在相应角色
|
||||
List<UserRoleEntity> userRoleEntities = userRoleDomainService.selectList(userRoleDo);
|
||||
if (CollUtil.isEmpty(userRoleEntities)) {
|
||||
userRoleDomainService.addUserRole(userRoleDo);
|
||||
log.info("成功分配个人司机角色给承运人用户 - 角色ID: {}, 角色名称: {}", roleEntity.getRoleId(), roleEntity.getRoleName());
|
||||
} else {
|
||||
log.info("承运人用户已存在个人司机角色,跳过 - 角色ID: {}", roleEntity.getRoleId());
|
||||
}
|
||||
} else {
|
||||
log.warn("未找到个人司机角色 - 组织ID: {}, 角色代码: {}, 请检查该组织下是否配置了该角色", organizationId, RoleEnum.DRIVER.getCode());
|
||||
// 不抛出异常,允许继续执行,因为角色可能在其他地方分配
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 托运人待审核推送
|
||||
*/
|
||||
@@ -2052,6 +2174,42 @@ public class UserDriverApplicationService {
|
||||
return mapList;
|
||||
}
|
||||
|
||||
public List<Map<String, String>> userPersonalDriverAuthList() {
|
||||
//获取当前登录人
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (ObjectUtil.isNull(loginUser)) {
|
||||
throw new DigitalLogisticsException(UserError.TIMEOUT);
|
||||
}
|
||||
|
||||
UserDriverDO userDriverDO = new UserDriverDO();
|
||||
//20240227 修改为查询用户关联的司机数据,包括车队长、承运企业
|
||||
List<UserDriverPo> userDriverPos = userDriverDomainService.userPersonalDriverAuthList(userDriverDO);
|
||||
|
||||
List<Map<String, String>> mapList = new ArrayList<>();
|
||||
if (CollUtil.isNotEmpty(userDriverPos)) {
|
||||
for (UserDriverPo u : userDriverPos) {
|
||||
Map<String, String> map = new HashMap<>();
|
||||
map.put("userId", u.getUserId().toString());
|
||||
|
||||
StringBuilder str = new StringBuilder();
|
||||
str.append(u.getUserName());
|
||||
|
||||
if (StrUtil.isNotEmpty(u.getUserPhone())) {
|
||||
str.append(", ").append(u.getUserPhone());
|
||||
}
|
||||
|
||||
if (StrUtil.isNotEmpty(u.getDriverEnterpriseName())) {
|
||||
str.append("【").append(u.getDriverEnterpriseName()).append("】");
|
||||
}
|
||||
|
||||
map.put("label", String.valueOf(str));
|
||||
mapList.add(map);
|
||||
}
|
||||
}
|
||||
|
||||
return mapList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 车队认证-车队长查询
|
||||
*/
|
||||
@@ -2718,5 +2876,20 @@ public class UserDriverApplicationService {
|
||||
// }
|
||||
return motorcade.getDriverEnterpriseCode();
|
||||
}
|
||||
|
||||
public int bindVehicleForHome(UserDriverDO userDriverDO) {
|
||||
DriverVehicleBind driverVehicleBind = new DriverVehicleBind();
|
||||
driverVehicleBind.setUserId(userDriverDO.getUserId());
|
||||
driverVehicleBind.setVehicleId(userDriverDO.getVehicleId());
|
||||
driverVehicleBind.setDefaultFlag(1);
|
||||
driverVehicleBind.setDelFlag(1);
|
||||
driverVehicleBind.setDriverBindId(userDriverDO.getUserId());
|
||||
UserPo userPo = userMapper.selectByUserId(userDriverDO.getUserId());
|
||||
driverVehicleBind.setBindDriverName(userPo.getUserName());
|
||||
driverVehicleBind.setBindDriverPhone(userPo.getUserPhone());
|
||||
//向网货同步添加绑定关系
|
||||
// wlhyDomainService.binding(driverVehicleBind);
|
||||
return driverVehicleBindMapper.insert(driverVehicleBind);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+9
@@ -750,6 +750,15 @@ public class UserDriverEnterpriseApplicationService {
|
||||
public UserDriverEnterprisePo getEnterpriseByUserId(Long userId) {
|
||||
return userDriverEnterpriseDomainService.getEnterpriseByUserId(userId);
|
||||
}
|
||||
/**
|
||||
* 根据用户id查询用户企业信息
|
||||
*
|
||||
* @param userId
|
||||
* @return
|
||||
*/
|
||||
public UserDriverEnterprisePo getEnterpriseByUserIds(Long userId) {
|
||||
return userDriverEnterpriseDomainService.getEnterpriseByUserIds(userId);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param driverEnterpriseCode
|
||||
|
||||
+156
-23
@@ -29,6 +29,7 @@ import com.mhd.system.api.service.webSocket.AsyncWebSocketApplicationService;
|
||||
import com.mhd.user.domain.roleAggregate.entity.RoleEntity;
|
||||
import com.mhd.user.domain.roleAggregate.repository.todo.RoleDo;
|
||||
import com.mhd.user.domain.roleAggregate.service.RoleDomainService;
|
||||
import com.mhd.common.core.domain.po.RolePO;
|
||||
import com.mhd.user.domain.userAggregate.entity.UserRoleEntity;
|
||||
import com.mhd.user.domain.userAggregate.entity.UserShipperEntity;
|
||||
import com.mhd.user.domain.userAggregate.event.ShipperEventPublisher;
|
||||
@@ -118,17 +119,85 @@ public class UserShipperApplicationService {
|
||||
*/
|
||||
@NeedSetValueMethod
|
||||
public List<UserShipperPo> userShipperList(UserShipperDO userShipperDO) {
|
||||
// userShipperDO.setTopOrganizationId(SecurityUtils.getLoginUser().getUserPo().getTopOrganizationId());
|
||||
List<UserShipperPo> userShipperList=userShipperDomainService.userShipperList(userShipperDO);
|
||||
for(UserShipperPo userShipperPo:userShipperList){
|
||||
R<TmsShipper> tmsShipper=wlhyServiceFeign.queryBySzwlUserId(userShipperPo.getUserId());
|
||||
// 获取登录人信息
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (loginUser == null || loginUser.getUserPo() == null) {
|
||||
log.warn("托运人列表查询 - 未获取到登录用户信息,跳过数据权限过滤");
|
||||
List<UserShipperPo> userShipperList = userShipperDomainService.userShipperList(userShipperDO);
|
||||
return processShipperList(userShipperList);
|
||||
}
|
||||
|
||||
UserPo userPo = loginUser.getUserPo();
|
||||
|
||||
// 先保存前端传递的 organizationId(如果存在)
|
||||
Long frontendOrganizationId = userShipperDO.getOrganizationId();
|
||||
|
||||
// 获取当前登录用户的组织信息
|
||||
Long loginUserOrganizationId = userPo.getOrganizationId();
|
||||
Long topOrganizationId = userPo.getTopOrganizationId();
|
||||
|
||||
// 数据权限:根据 organizationId 来设置查询权限
|
||||
// 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己
|
||||
if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
|
||||
// 南光组织(organizationId=2827):可以查询所有组织的数据
|
||||
// 如果前端传递了 organizationId,使用前端传递的值进行过滤
|
||||
// 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
|
||||
if (frontendOrganizationId != null) {
|
||||
// 前端传递了 organizationId,使用前端传递的值进行过滤
|
||||
userShipperDO.setOrganizationId(frontendOrganizationId);
|
||||
userShipperDO.setTopOrganizationId(null);
|
||||
log.info("托运人列表查询 - 南光组织查询指定组织:organizationId={}", frontendOrganizationId);
|
||||
} else {
|
||||
// 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
|
||||
userShipperDO.setOrganizationId(null);
|
||||
userShipperDO.setTopOrganizationId(null);
|
||||
log.info("托运人列表查询 - 南光组织查询所有组织:不设置组织过滤条件");
|
||||
}
|
||||
} else {
|
||||
// 其他组织:设置 organizationId,只查询当前组织的数据
|
||||
// 其他组织只能查询自己组织的数据,不能查询其他组织的数据
|
||||
if (frontendOrganizationId != null) {
|
||||
// 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致
|
||||
if (!frontendOrganizationId.equals(loginUserOrganizationId)) {
|
||||
// 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询
|
||||
log.warn("托运人列表查询 - 前端传递的组织ID {} 与当前登录用户的组织ID {} 不一致,使用当前登录用户的组织ID进行过滤",
|
||||
frontendOrganizationId, loginUserOrganizationId);
|
||||
userShipperDO.setOrganizationId(loginUserOrganizationId);
|
||||
} else {
|
||||
// 前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值
|
||||
userShipperDO.setOrganizationId(frontendOrganizationId);
|
||||
}
|
||||
if (topOrganizationId != null) {
|
||||
userShipperDO.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
} else {
|
||||
// 前端没有传递 organizationId,使用当前登录用户的组织ID
|
||||
userShipperDO.setOrganizationId(loginUserOrganizationId);
|
||||
if (topOrganizationId != null) {
|
||||
userShipperDO.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
log.info("托运人列表查询 - 设置组织ID后,查询参数:organizationId={}, topOrganizationId={}, userId={}",
|
||||
userShipperDO.getOrganizationId(), userShipperDO.getTopOrganizationId(), userShipperDO.getUserId());
|
||||
|
||||
List<UserShipperPo> userShipperList = userShipperDomainService.userShipperList(userShipperDO);
|
||||
return processShipperList(userShipperList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理托运人列表,填充网货平台数据
|
||||
*/
|
||||
private List<UserShipperPo> processShipperList(List<UserShipperPo> userShipperList) {
|
||||
for(UserShipperPo userShipperPo : userShipperList){
|
||||
R<TmsShipper> tmsShipper = wlhyServiceFeign.queryBySzwlUserId(userShipperPo.getUserId());
|
||||
if (tmsShipper.getCode() == R.SUCCESS) {
|
||||
if(ObjectUtil.isNotNull(tmsShipper.getData())){
|
||||
userShipperPo.setAuthorizedQuota(tmsShipper.getData().getCreditLine());
|
||||
userShipperPo.setSettlementDay(tmsShipper.getData().getSettlementInterval());
|
||||
userShipperPo.setAuthorizedUsedAmount(tmsShipper.getData().getUsedQuota());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return userShipperList;
|
||||
@@ -154,6 +223,13 @@ public class UserShipperApplicationService {
|
||||
if (ObjectUtil.isNull(loginUser)) {
|
||||
throw new DigitalLogisticsException(UserError.USER_NULL);
|
||||
}
|
||||
// 设置当前登录用户的组织信息
|
||||
UserPo userPo = loginUser.getUserPo();
|
||||
if (userPo != null) {
|
||||
userShipperDO.setOrganizationId(userPo.getOrganizationId());
|
||||
userShipperDO.setOrganizationName(userPo.getOrganizationName());
|
||||
userShipperDO.setTopOrganizationId(userPo.getTopOrganizationId());
|
||||
}
|
||||
// 2023年5月22日,改动为个人认证和企业认证分开认证,所以此处需要根据前端认证的角色,给不同的字段赋值
|
||||
if (userShipperDO.getShipperType() == null) {
|
||||
throw new ServiceException("角色类型不能为空");
|
||||
@@ -652,36 +728,41 @@ public class UserShipperApplicationService {
|
||||
String roleCodes = null;
|
||||
//实名认证通过此时赋值企业、个人货主角色
|
||||
if (userShipperDO.getShipperAuthStatus() == 3) {
|
||||
RoleDo roleDo = new RoleDo();
|
||||
if (userShipperDO.getAuthType() == 1) {
|
||||
roleDo.setRoleCode(RoleEnum.SHIPPER.getCode());
|
||||
} else if (userShipperDO.getAuthType() == 2) {
|
||||
roleDo.setRoleCode(RoleEnum.COMPANY.getCode());
|
||||
} else {
|
||||
throw new ServiceException("角色未找到");
|
||||
// 新增委托方时,使用当前登录账号的用户角色
|
||||
Long loginUserId = loginUser.getUserPo().getUserId();
|
||||
log.info("新增委托方 - 使用当前登录用户的角色,登录用户ID: {}", loginUserId);
|
||||
|
||||
// 获取当前登录用户的所有角色
|
||||
List<UserRoleMenuPO> loginUserRoleList = userRoleDomainService.selectRolesByUserId(loginUserId);
|
||||
if (CollUtil.isEmpty(loginUserRoleList)) {
|
||||
log.warn("当前登录用户没有角色,登录用户ID: {}", loginUserId);
|
||||
throw new ServiceException("当前登录用户没有角色,无法分配给委托方");
|
||||
}
|
||||
roleDo.setOrganizationId(loginUser.getUserPo().getOrganizationId());
|
||||
RoleEntity roleEntity = roleDomainService.selectByOrganizationIdAndRoleCode(roleDo);
|
||||
if (ObjectUtil.isNotNull(roleEntity)) {
|
||||
|
||||
log.info("当前登录用户共有 {} 个角色", loginUserRoleList.size());
|
||||
|
||||
// 将当前登录用户的所有角色分配给新创建的委托方用户
|
||||
for (UserRoleMenuPO loginUserRole : loginUserRoleList) {
|
||||
UserRoleDo userRoleDo = new UserRoleDo();
|
||||
userRoleDo.setUserId(userShipperDO.getUserId());
|
||||
userRoleDo.setRoleId(roleEntity.getRoleId());
|
||||
// userApplicationService.assignUserRoles(userRoleDo);
|
||||
//判断是否已存在相应角色
|
||||
userRoleDo.setRoleId(loginUserRole.getRoleId());
|
||||
|
||||
// 判断是否已存在相应角色
|
||||
List<UserRoleEntity> userRoleEntities = userRoleDomainService.selectList(userRoleDo);
|
||||
if (CollUtil.isEmpty(userRoleEntities)) {
|
||||
userRoleDomainService.addUserRole(userRoleDo);
|
||||
log.info("成功分配角色给委托方用户 - 角色ID: {}, 角色代码: {}", loginUserRole.getRoleId(), loginUserRole.getRoleCode());
|
||||
} else {
|
||||
log.info("委托方用户已存在该角色,跳过 - 角色ID: {}, 角色代码: {}", loginUserRole.getRoleId(), loginUserRole.getRoleCode());
|
||||
}
|
||||
} else {
|
||||
throw new ServiceException("当前组织无相应角色");
|
||||
}
|
||||
//审核通过后,调用用户开通钱包
|
||||
AccountCashWalletDto accountCashWalletDto = new AccountCashWalletDto();
|
||||
accountCashWalletDto.setUserId(userShipperPo.getUserId());
|
||||
AjaxResult ajaxResult = financeServiceFeign.accountCashWalletSave(accountCashWalletDto);
|
||||
if (null == ajaxResult || !"200".equals(String.valueOf(ajaxResult.get("code")))) {
|
||||
/*if (null == ajaxResult || !"200".equals(String.valueOf(ajaxResult.get("code")))) {
|
||||
throw new ServiceException("开通钱包失败");
|
||||
}
|
||||
}*/
|
||||
|
||||
//审核通过,此时重新更新网货中的角色code,需要重新查询
|
||||
List<UserRoleMenuPO> roleCodeList = userRoleDomainService.selectRolesByUserId(userShipperDO.getUserId());
|
||||
@@ -773,7 +854,59 @@ public class UserShipperApplicationService {
|
||||
*/
|
||||
public Map<String, String> userShipperCount(UserShipperDO userShipperDO) {
|
||||
Map<String, String> res = new HashMap<>();
|
||||
// userShipperDO.setTopOrganizationId(SecurityUtils.getLoginUser().getUserPo().getTopOrganizationId());
|
||||
|
||||
// 获取登录人信息
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (loginUser == null || loginUser.getUserPo() == null) {
|
||||
log.warn("托运人统计查询 - 未获取到登录用户信息,跳过数据权限过滤");
|
||||
} else {
|
||||
UserPo userPo = loginUser.getUserPo();
|
||||
|
||||
// 先保存前端传递的 organizationId(如果存在)
|
||||
Long frontendOrganizationId = userShipperDO.getOrganizationId();
|
||||
|
||||
// 获取当前登录用户的组织信息
|
||||
Long loginUserOrganizationId = userPo.getOrganizationId();
|
||||
Long topOrganizationId = userPo.getTopOrganizationId();
|
||||
|
||||
// 数据权限:根据 topOrganizationId 来设置查询权限,与其他模块保持一致
|
||||
// topOrganizationId 为 null 时,为顶级组织(南光组织),查所有;其他组织查自己
|
||||
if (topOrganizationId == null) {
|
||||
// 南光组织:可以查询所有组织的数据
|
||||
// 如果前端传递了 organizationId,使用前端传递的值进行过滤
|
||||
// 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
|
||||
if (frontendOrganizationId != null) {
|
||||
// 前端传递了 organizationId,使用前端传递的值进行过滤
|
||||
userShipperDO.setOrganizationId(frontendOrganizationId);
|
||||
userShipperDO.setTopOrganizationId(null);
|
||||
} else {
|
||||
// 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
|
||||
userShipperDO.setOrganizationId(null);
|
||||
userShipperDO.setTopOrganizationId(null);
|
||||
}
|
||||
} else {
|
||||
// 其他组织:设置 organizationId,只查询当前组织的数据
|
||||
// 其他组织只能查询自己组织的数据,不能查询其他组织的数据
|
||||
if (frontendOrganizationId != null) {
|
||||
// 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致
|
||||
if (!frontendOrganizationId.equals(loginUserOrganizationId)) {
|
||||
// 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询
|
||||
log.warn("托运人统计查询 - 前端传递的组织ID {} 与当前登录用户的组织ID {} 不一致,使用当前登录用户的组织ID进行过滤",
|
||||
frontendOrganizationId, loginUserOrganizationId);
|
||||
userShipperDO.setOrganizationId(loginUserOrganizationId);
|
||||
} else {
|
||||
// 前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值
|
||||
userShipperDO.setOrganizationId(frontendOrganizationId);
|
||||
}
|
||||
userShipperDO.setTopOrganizationId(topOrganizationId);
|
||||
} else {
|
||||
// 前端没有传递 organizationId,使用当前登录用户的组织ID
|
||||
userShipperDO.setOrganizationId(loginUserOrganizationId);
|
||||
userShipperDO.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//先将所有托运人查询出来,然后再进行
|
||||
List<UserShipperPo> userShipperPoList = userShipperDomainService.userShipperAndRoleList(userShipperDO);
|
||||
//托运人总数
|
||||
|
||||
+1
-1
@@ -71,5 +71,5 @@ public interface MotorcadeRepositoryInterface extends IService<Motorcade>
|
||||
|
||||
List<MotorcadePo> getAllOtherMotorcade(Long userId);
|
||||
|
||||
List<MotorcadePo> queryNonePagingList(Long organizationId);
|
||||
List<MotorcadePo> queryNonePagingList(Long organizationId, Long topOrganizationId);
|
||||
}
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@ public interface MotorcadeMapper extends BaseMapper<Motorcade>
|
||||
*/
|
||||
public List<MotorcadePo> queryList(MotorcadeDO motorcadeDo);
|
||||
|
||||
List<MotorcadePo> queryNonePagingList(@Param("organizationId") Long organizationId);
|
||||
List<MotorcadePo> queryNonePagingList(@Param("organizationId") Long organizationId, @Param("topOrganizationId") Long topOrganizationId);
|
||||
|
||||
/**
|
||||
* 查询我加入的所以车队id
|
||||
|
||||
+2
-2
@@ -130,7 +130,7 @@ public class MotorcadeRepositoryImpl extends ServiceImpl<MotorcadeMapper, Motorc
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MotorcadePo> queryNonePagingList(Long organizationId) {
|
||||
return motorcadeMapper.queryNonePagingList(organizationId);
|
||||
public List<MotorcadePo> queryNonePagingList(Long organizationId, Long topOrganizationId) {
|
||||
return motorcadeMapper.queryNonePagingList(organizationId, topOrganizationId);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-6
@@ -182,11 +182,7 @@ public class MotorcadeDomainService {
|
||||
}
|
||||
|
||||
|
||||
public List<MotorcadePo> queryNonePagingList() {
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (loginUser != null && loginUser.getUserPo() != null &&loginUser.getUserPo().getTopOrganizationId()!= null){
|
||||
return motorcadeInterface.queryNonePagingList(loginUser.getUserPo().getTopOrganizationId());
|
||||
}
|
||||
return Collections.emptyList();
|
||||
public List<MotorcadePo> queryNonePagingList(Long organizationId, Long topOrganizationId) {
|
||||
return motorcadeInterface.queryNonePagingList(organizationId, topOrganizationId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,10 @@ public class RoleEntity extends BaseVOEntity {
|
||||
private Integer roleType;
|
||||
@ApiModelProperty(name = "组织表ID")
|
||||
private Long organizationId;
|
||||
@ApiModelProperty(name = "组织名称")
|
||||
private String organizationName;
|
||||
@ApiModelProperty(name = "一级组织表ID")
|
||||
private Long topOrganizationId;
|
||||
@ApiModelProperty(name = "职务/角色权限字符,控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasRole('admin')`)")
|
||||
private String roleCode;
|
||||
@ApiModelProperty(name = "职务/角色名称")
|
||||
|
||||
+4
@@ -17,6 +17,10 @@ public class RoleDo extends BaseVOEntity implements Serializable {
|
||||
private Long parentRoleId;
|
||||
@ApiModelProperty(name = "组织表ID")
|
||||
private Long organizationId;
|
||||
@ApiModelProperty(name = "组织名称")
|
||||
private String organizationName;
|
||||
@ApiModelProperty(name = "一级组织表ID")
|
||||
private Long topOrganizationId;
|
||||
@ApiModelProperty(name = "角色业务场景数据字典ID")
|
||||
private Long roleBusinessExampleId;
|
||||
@ApiModelProperty(name = "角色业务场景名称")
|
||||
|
||||
+22
@@ -1,6 +1,7 @@
|
||||
package com.mhd.user.domain.userAggregate.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
@@ -127,4 +128,25 @@ public class UserDriverEntity extends BaseVOEntity {
|
||||
|
||||
@ApiModelProperty(name = "tms推送状态: 1-未推送 2- 已推送")
|
||||
private Integer tmsPushStatus;
|
||||
|
||||
@ApiModelProperty(name = "用户身份")
|
||||
private Integer userIdentity;
|
||||
|
||||
/**
|
||||
* 一级组织表ID
|
||||
*/
|
||||
@ApiModelProperty(name = "一级组织表ID")
|
||||
private Long topOrganizationId;
|
||||
|
||||
/**
|
||||
* 组织表ID
|
||||
*/
|
||||
@ApiModelProperty(name = "组织表ID")
|
||||
private Long organizationId;
|
||||
|
||||
/**
|
||||
* 组织名称
|
||||
*/
|
||||
@ApiModelProperty(name = "组织名称")
|
||||
private String organizationName;
|
||||
}
|
||||
|
||||
+12
@@ -194,4 +194,16 @@ public class UserShipperEntity extends BaseVOEntity {
|
||||
|
||||
@ApiModelProperty(name = "客户nc编码")
|
||||
private String customerNcCode;
|
||||
|
||||
@ApiModelProperty("结算币种")
|
||||
private String settlementCurrency;
|
||||
|
||||
@ApiModelProperty(name = "一级组织表ID")
|
||||
private Long topOrganizationId;
|
||||
|
||||
@ApiModelProperty(name = "组织表ID")
|
||||
private Long organizationId;
|
||||
|
||||
@ApiModelProperty(name = "组织名称")
|
||||
private String organizationName;
|
||||
}
|
||||
|
||||
+10
@@ -26,6 +26,14 @@ public class UserDriverFactory {
|
||||
String userName = loginUser.getUsername();
|
||||
// 获取登录人id
|
||||
Long userId = loginUser.getUserid();
|
||||
|
||||
// 设置组织信息:如果 userDriverDO 中没有设置组织信息,则使用当前登录用户的组织信息
|
||||
if (userDriverEntity.getOrganizationId() == null && loginUser.getUserPo() != null) {
|
||||
userDriverEntity.setOrganizationId(loginUser.getUserPo().getOrganizationId());
|
||||
userDriverEntity.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
|
||||
userDriverEntity.setOrganizationName(loginUser.getUserPo().getOrganizationName());
|
||||
}
|
||||
|
||||
if(userDriverDO.getDriverId() != null){
|
||||
if(userId != null){
|
||||
userDriverEntity.setUpdateBy(userId);
|
||||
@@ -54,6 +62,8 @@ public class UserDriverFactory {
|
||||
public UserDriverEntity getUserDriverEntityByOpen(UserDriverDO userDriverDO) {
|
||||
UserDriverEntity userDriverEntity = new UserDriverEntity();
|
||||
BeanUtils.copyProperties(userDriverDO,userDriverEntity, IgnoreNullUtil.getNullPropertyNames(userDriverDO));
|
||||
|
||||
// 设置组织信息:从 userDriverDO 中复制,如果为空则保持null(开放接口可能由外部系统设置)
|
||||
|
||||
if(userDriverDO.getDriverId() != null){
|
||||
userDriverEntity.setUpdateBy(new Long("0"));
|
||||
|
||||
+2
@@ -1,5 +1,6 @@
|
||||
package com.mhd.user.domain.userAggregate.factory;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.mhd.user.domain.userAggregate.entity.UserEntity;
|
||||
import com.mhd.common.core.domain.po.UserPo;
|
||||
import com.mhd.user.domain.userAggregate.repository.todo.UserDO;
|
||||
@@ -20,6 +21,7 @@ public class UserFactory {
|
||||
public UserEntity getUserEntity(UserDO userDO) {
|
||||
UserEntity userEntity = new UserEntity();
|
||||
BeanUtils.copyProperties(userDO,userEntity, IgnoreNullUtil.getNullPropertyNames(userDO));
|
||||
userEntity.setDepartmentId(ObjectUtil.isNotEmpty(userDO.getDepartmentId())?Integer.valueOf(userDO.getDepartmentId()):null);
|
||||
return userEntity;
|
||||
}
|
||||
public CheckDO getCheckDo(UserDO userDO) {
|
||||
|
||||
+2
@@ -52,4 +52,6 @@ public interface UserDriverEnterpriseService extends IService<UserDriverEnterpri
|
||||
List<UserDriverEnterprisePo> queryCaptainList(UserDriverEnterpriseDo userDriverEnterpriseDo);
|
||||
|
||||
UserDriverEnterprisePo getEnterpriseByUserId(Long userId);
|
||||
|
||||
UserDriverEnterprisePo getEnterpriseByUserIds(Long userId);
|
||||
}
|
||||
|
||||
+2
@@ -55,6 +55,8 @@ public interface UserDriverRepositoryInterface extends IService<UserDriverEntity
|
||||
|
||||
List<UserDriverPo> userDriverAuthList(UserDriverDO userDriverDO);
|
||||
|
||||
List<UserDriverPo> userPersonalDriverAuthList(UserDriverDO userDriverDO);
|
||||
|
||||
List<Map<String, Object>> motorcadeAuthCaptainList(Long organizationId);
|
||||
|
||||
List<UserDriverPo> getRegionDriverList(UserDriverDO userDriverDO);
|
||||
|
||||
+1
-1
@@ -69,7 +69,7 @@ public interface UserRepositoryInterface extends IService<UserEntity> {
|
||||
|
||||
UserEntity selectByTopOrganizationId(Long organizationId);
|
||||
|
||||
List<QueryAllShipperInfoVo> findAllShipperInfo(Long userId, Long topOrganizationId);
|
||||
List<QueryAllShipperInfoVo> findAllShipperInfo(Long userId, Long organizationId);
|
||||
|
||||
|
||||
String finShipperEnterpriseNamedByUserId(Long userId);
|
||||
|
||||
+2
@@ -35,4 +35,6 @@ public interface UserDriverEnterpriseMapper extends BaseMapper<UserDriverEnterpr
|
||||
List<UserDriverEnterprisePo> queryCaptainList(@Param("userDriverEnterpriseDo") UserDriverEnterpriseDo userDriverEnterpriseDo);
|
||||
|
||||
UserDriverEnterprisePo getEnterpriseByUserId(@Param("userId") Long userId);
|
||||
|
||||
UserDriverEnterprisePo getEnterpriseByUserIds(@Param("userId") Long userId);
|
||||
}
|
||||
|
||||
+2
@@ -54,6 +54,8 @@ public interface UserDriverMapper extends BaseMapper<UserDriverEntity> {
|
||||
|
||||
List<UserDriverPo> userDriverAuthList(UserDriverDO userDriverDO);
|
||||
|
||||
List<UserDriverPo> userPersonalDriverAuthList(UserDriverDO userDriverDO);
|
||||
|
||||
List<Map<String, Object>> motorcadeAuthCaptainList(Long organizationId);
|
||||
|
||||
List<UserDriverPo> getRegionDriverList(@Param("userDriverDO") UserDriverDO userDriverDO);
|
||||
|
||||
+1
-1
@@ -68,7 +68,7 @@ public interface UserMapper extends BaseMapper<UserEntity> {
|
||||
UserEntity selectByTopOrganizationId(@Param("organizationId") Long organizationId);
|
||||
|
||||
|
||||
List<QueryAllShipperInfoVo> findAllShipperInfo(@Param("userId") Long userId, @Param("topOrganizationId") Long topOrganizationId);
|
||||
List<QueryAllShipperInfoVo> findAllShipperInfo(@Param("userId") Long userId, @Param("organizationId") Long organizationId);
|
||||
|
||||
|
||||
String finShipperEnterpriseNamedByUserId(@Param("userId") Long userId);
|
||||
|
||||
+5
@@ -111,4 +111,9 @@ public class UserDriverEnterpriseImpl extends ServiceImpl<UserDriverEnterpriseMa
|
||||
public UserDriverEnterprisePo getEnterpriseByUserId(Long userId) {
|
||||
return userDriverEnterpriseMapper.getEnterpriseByUserId(userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserDriverEnterprisePo getEnterpriseByUserIds(Long userId) {
|
||||
return userDriverEnterpriseMapper.getEnterpriseByUserIds(userId);
|
||||
}
|
||||
}
|
||||
|
||||
+5
@@ -183,6 +183,11 @@ public class UserDriverRepositoryImpl extends ServiceImpl<UserDriverMapper,UserD
|
||||
return userDriverMapper.userDriverAuthList(userDriverDO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<UserDriverPo> userPersonalDriverAuthList(UserDriverDO userDriverDO) {
|
||||
return userDriverMapper.userPersonalDriverAuthList(userDriverDO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Map<String, Object>> motorcadeAuthCaptainList(Long organizationId) {
|
||||
return userDriverMapper.motorcadeAuthCaptainList(organizationId);
|
||||
|
||||
+2
-2
@@ -160,8 +160,8 @@ public class UserRepositoryImpl extends ServiceImpl<UserMapper,UserEntity> imple
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<QueryAllShipperInfoVo> findAllShipperInfo(Long userId, Long topOrganizationId) {
|
||||
return userMapper.findAllShipperInfo(userId,topOrganizationId);
|
||||
public List<QueryAllShipperInfoVo> findAllShipperInfo(Long userId, Long organizationId) {
|
||||
return userMapper.findAllShipperInfo(userId, organizationId);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+9
@@ -228,4 +228,13 @@ public class UserDriverPo extends BaseVOEntity {
|
||||
|
||||
@ApiModelProperty(name = "tms推送状态: 1-未推送 2- 已推送")
|
||||
private Integer tmsPushStatus;
|
||||
|
||||
@ApiModelProperty(name = "用户身份")
|
||||
private Integer userIdentity;
|
||||
|
||||
@ApiModelProperty(name = "经营许可证")
|
||||
private String driverBusinessLicenseFrontUrl;
|
||||
|
||||
@ApiModelProperty(name = "经营许可证号")
|
||||
private String driverBusinessLicenseNumber;
|
||||
}
|
||||
|
||||
+8
-1
@@ -100,8 +100,12 @@ public class UserShipperPo implements Serializable {
|
||||
@ApiModelProperty(name = "营业执照照片")
|
||||
private String shipperEnterpriseLicenseFrontUrl = "";
|
||||
|
||||
@ApiModelProperty(name = "组织表ID")
|
||||
private Long organizationId;
|
||||
@ApiModelProperty(name = "组织名称")
|
||||
private String organizationName = "";
|
||||
private String organizationName;
|
||||
// @ApiModelProperty(name = '一级组织表ID')
|
||||
private Long topOrganizationId;
|
||||
@ApiModelProperty(name = "创建者姓名")
|
||||
private String createByName = "";
|
||||
|
||||
@@ -257,4 +261,7 @@ public class UserShipperPo implements Serializable {
|
||||
|
||||
@ApiModelProperty(name = "客户nc编码")
|
||||
private String customerNcCode;
|
||||
|
||||
@ApiModelProperty("结算币种")
|
||||
private String settlementCurrency;
|
||||
}
|
||||
|
||||
+6
@@ -283,4 +283,10 @@ public class UserDriverDO extends UserDO {
|
||||
@ApiModelProperty(name = "车队名称")
|
||||
private String motorcadeName;
|
||||
|
||||
@ApiModelProperty(name = "用户身份")
|
||||
private Integer userIdentity;
|
||||
|
||||
@ApiModelProperty(name = "车辆主体")
|
||||
private String vehicleBody;
|
||||
|
||||
}
|
||||
|
||||
+3
@@ -228,4 +228,7 @@ public class UserShipperDO extends UserDO {
|
||||
|
||||
@ApiModelProperty(name = "客户nc编码")
|
||||
private String customerNcCode;
|
||||
|
||||
@ApiModelProperty("结算币种")
|
||||
private String settlementCurrency;
|
||||
}
|
||||
|
||||
+2
-2
@@ -246,8 +246,8 @@ public class UserDomainService {
|
||||
return userRepositoryInterface.selectByTopOrganizationId(organizationId);
|
||||
}
|
||||
|
||||
public List<QueryAllShipperInfoVo> findAllShipperInfo(Long userId, Long topOrganizationId) {
|
||||
return userRepositoryInterface.findAllShipperInfo(userId,topOrganizationId);
|
||||
public List<QueryAllShipperInfoVo> findAllShipperInfo(Long userId, Long organizationId) {
|
||||
return userRepositoryInterface.findAllShipperInfo(userId, organizationId);
|
||||
}
|
||||
|
||||
public String findUserNameByUserId(Long userId){
|
||||
|
||||
+65
-2
@@ -92,13 +92,71 @@ public class UserDriverDomainService {
|
||||
*/
|
||||
// @DataPermissions(cacheName = "master")
|
||||
public List<UserDriverListPo> userDriverList(UserDriverDO userDriverDO) {
|
||||
// 首先保存前端传递的 organizationId(如果存在)
|
||||
Long frontendOrganizationId = userDriverDO.getOrganizationId();
|
||||
|
||||
//获取当前登陆人
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
|
||||
Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
|
||||
|
||||
if (loginUser.getUserPo().getBusinessType() == 2){
|
||||
userDriverDO.setCreateBy(loginUser.getUserPo().getUserId());
|
||||
userDriverDO.setOrganizationId(null);
|
||||
// 当 businessType == 2 时,如果前端没有传递 organizationId,清空组织过滤条件
|
||||
if (frontendOrganizationId == null) {
|
||||
userDriverDO.setOrganizationId(null);
|
||||
}
|
||||
}
|
||||
userDriverDO.setTopOrganizationId(loginUser.getUserPo().getOrganizationId());
|
||||
|
||||
// 数据权限:查询权限根据 organizationId 来设置
|
||||
// 当 organizationId 是 2827 时查询全部,其他仅查询各自组织的信息
|
||||
if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
|
||||
// 南光组织(organizationId=2827):可以查询所有组织的数据
|
||||
// 如果前端传递了 organizationId,使用前端传递的值进行过滤(包括2827)
|
||||
// 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
|
||||
if (frontendOrganizationId != null) {
|
||||
// 前端传递了 organizationId,使用前端传递的值进行过滤
|
||||
userDriverDO.setOrganizationId(frontendOrganizationId);
|
||||
userDriverDO.setTopOrganizationId(null);
|
||||
} else {
|
||||
// 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
|
||||
userDriverDO.setOrganizationId(null);
|
||||
userDriverDO.setTopOrganizationId(null);
|
||||
}
|
||||
} else {
|
||||
// 其他组织:设置organizationId,只查询当前组织的数据
|
||||
// 其他组织只能查询自己组织的数据,不能查询其他组织(包括南光)的数据
|
||||
// 如果其他组织尝试查询南光(organizationId=2827)的数据,返回空数据
|
||||
if (frontendOrganizationId != null) {
|
||||
// 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致
|
||||
if (frontendOrganizationId.equals(2827L)) {
|
||||
// 其他组织尝试查询南光的数据,设置一个不存在的 organizationId,返回空数据
|
||||
userDriverDO.setOrganizationId(-1L);
|
||||
userDriverDO.setTopOrganizationId(null);
|
||||
} else if (!frontendOrganizationId.equals(loginUserOrganizationId)) {
|
||||
// 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询
|
||||
userDriverDO.setOrganizationId(loginUserOrganizationId);
|
||||
if (topOrganizationId != null) {
|
||||
userDriverDO.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
} else {
|
||||
// 前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值
|
||||
userDriverDO.setOrganizationId(frontendOrganizationId);
|
||||
if (topOrganizationId != null) {
|
||||
userDriverDO.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 前端没有传递 organizationId,使用当前登录用户的组织ID
|
||||
if (loginUserOrganizationId != null) {
|
||||
userDriverDO.setOrganizationId(loginUserOrganizationId);
|
||||
}
|
||||
if (topOrganizationId != null) {
|
||||
userDriverDO.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return userDriverRepositoryInterface.userDriverList(userDriverDO);
|
||||
}
|
||||
|
||||
@@ -187,6 +245,11 @@ public class UserDriverDomainService {
|
||||
return userDriverRepositoryInterface.userDriverAuthList(userDriverDO);
|
||||
}
|
||||
|
||||
@DataPermissions(cacheName = "master")
|
||||
public List<UserDriverPo> userPersonalDriverAuthList(UserDriverDO userDriverDO) {
|
||||
return userDriverRepositoryInterface.userPersonalDriverAuthList(userDriverDO);
|
||||
}
|
||||
|
||||
public List<Map<String, Object>> motorcadeAuthCaptainList(Long organizationId) {
|
||||
return userDriverRepositoryInterface.motorcadeAuthCaptainList(organizationId);
|
||||
}
|
||||
|
||||
+4
@@ -154,4 +154,8 @@ public class UserDriverEnterpriseDomainService {
|
||||
.eq(UserDriverEnterprise::getUserId, userId)
|
||||
.update();
|
||||
}
|
||||
|
||||
public UserDriverEnterprisePo getEnterpriseByUserIds(Long userId) {
|
||||
return userDriverEnterpriseService.getEnterpriseByUserIds(userId);
|
||||
}
|
||||
}
|
||||
|
||||
+11
-2
@@ -49,10 +49,19 @@ public class UserShipperDomainService {
|
||||
|
||||
// @DataPermissions(cacheName = "master")
|
||||
public List<UserShipperPo> userShipperList(UserShipperDO userShipperDO) {
|
||||
// 数据权限逻辑已在 UserShipperApplicationService.userShipperList 中处理
|
||||
// 这里不再重复处理数据权限,直接使用传入的参数进行查询
|
||||
|
||||
//获取当前登陆人
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
userShipperDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
|
||||
if(loginUser.getUserPo().getBusinessType()==1||loginUser.getUserPo().getBusinessType()==3||loginUser.getUserPo().getUserAccountType()==5){
|
||||
// 如果 organizationId 和 topOrganizationId 都为 null,表示查询所有组织的数据(南光组织查询全部)
|
||||
// 此时不应该设置 userId 过滤条件,否则会限制查询结果
|
||||
boolean isQueryAllOrganizations = (userShipperDO.getOrganizationId() == null && userShipperDO.getTopOrganizationId() == null);
|
||||
|
||||
if(loginUser != null && loginUser.getUserPo() != null &&
|
||||
(loginUser.getUserPo().getBusinessType()==1||loginUser.getUserPo().getBusinessType()==3||loginUser.getUserPo().getUserAccountType()==5) &&
|
||||
!isQueryAllOrganizations) {
|
||||
// 只有在不是查询所有组织的情况下,才设置 userId 过滤条件
|
||||
userShipperDO.setUserId(loginUser.getUserid());
|
||||
}
|
||||
return userShipperRepositoryInterface.selectList(userShipperDO);
|
||||
|
||||
+22
-6
@@ -278,9 +278,17 @@ public class UserWlhyDomainService {
|
||||
tmsShipperDTO.setIdCardEndDate(idCardEndDate);
|
||||
Date idCardStartDate = DateUtil.parse(userPo.getUserIdcardDateFrom());
|
||||
tmsShipperDTO.setIdCardStartDate(idCardStartDate);
|
||||
tmsShipperDTO.setOrganizationId(loginUser.getUserPo().getOrganizationId());
|
||||
tmsShipperDTO.setOrganizationName(loginUser.getUserPo().getOrganizationName());
|
||||
tmsShipperDTO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
|
||||
// 优先使用 userShipperEntity 对象中保存的组织信息,确保与数据库中的组织ID一致
|
||||
// 如果 userShipperEntity 中没有组织信息,则使用当前登录用户的组织信息作为后备
|
||||
if (userShipperEntity.getOrganizationId() != null) {
|
||||
tmsShipperDTO.setOrganizationId(userShipperEntity.getOrganizationId());
|
||||
tmsShipperDTO.setOrganizationName(userShipperEntity.getOrganizationName());
|
||||
tmsShipperDTO.setTopOrganizationId(userShipperEntity.getTopOrganizationId());
|
||||
} else if (loginUser.getUserPo() != null) {
|
||||
tmsShipperDTO.setOrganizationId(loginUser.getUserPo().getOrganizationId());
|
||||
tmsShipperDTO.setOrganizationName(loginUser.getUserPo().getOrganizationName());
|
||||
tmsShipperDTO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
|
||||
}
|
||||
tmsShipperDTO.setCompanyName(userShipperEntity.getShipperEnterpriseName());
|
||||
return tmsShipperDTO;
|
||||
}
|
||||
@@ -640,9 +648,17 @@ public class UserWlhyDomainService {
|
||||
TmsDriverAddOrUpdateDTO tmsDriverAddOrUpdateDTO = new TmsDriverAddOrUpdateDTO();
|
||||
tmsDriverAddOrUpdateDTO.setAddress(userPo.getUserAreaAddress());
|
||||
tmsDriverAddOrUpdateDTO.setRegisteredAddress(userPo.getUserAreaAddress());
|
||||
tmsDriverAddOrUpdateDTO.setTopOrganizationId(userPo.getTopOrganizationId());
|
||||
tmsDriverAddOrUpdateDTO.setOrganizationId(userPo.getOrganizationId());
|
||||
tmsDriverAddOrUpdateDTO.setOrganizationName(userPo.getOrganizationName());
|
||||
// 优先使用 userDriverDO 对象中保存的组织信息,确保与数据库中的组织ID一致
|
||||
// 如果 userDriverDO 中没有组织信息,则使用 userPo 中的组织信息作为后备
|
||||
if (userDriverDO.getOrganizationId() != null) {
|
||||
tmsDriverAddOrUpdateDTO.setTopOrganizationId(userDriverDO.getTopOrganizationId());
|
||||
tmsDriverAddOrUpdateDTO.setOrganizationId(userDriverDO.getOrganizationId());
|
||||
tmsDriverAddOrUpdateDTO.setOrganizationName(userDriverDO.getOrganizationName());
|
||||
} else if (userPo != null) {
|
||||
tmsDriverAddOrUpdateDTO.setTopOrganizationId(userPo.getTopOrganizationId());
|
||||
tmsDriverAddOrUpdateDTO.setOrganizationId(userPo.getOrganizationId());
|
||||
tmsDriverAddOrUpdateDTO.setOrganizationName(userPo.getOrganizationName());
|
||||
}
|
||||
tmsDriverAddOrUpdateDTO.setSzwlUserId(userDriverDO.getUserId());
|
||||
Integer type = userDriverDO.getDriverType() != 1 ? 1 : 0;
|
||||
tmsDriverAddOrUpdateDTO.setType(type);
|
||||
|
||||
@@ -308,4 +308,10 @@ public class UserDriverDTO extends UserDTO {
|
||||
|
||||
@ApiModelProperty(name = "部门id")
|
||||
private String departmentId;
|
||||
|
||||
@ApiModelProperty(name = "用户身份")
|
||||
private Integer userIdentity;
|
||||
|
||||
@ApiModelProperty(name = "车辆主体")
|
||||
private String vehicleBody;
|
||||
}
|
||||
|
||||
@@ -194,4 +194,7 @@ public class UserShipperDTO extends UserDTO {
|
||||
@ApiModelProperty("客户nc编码")
|
||||
private String customerNcCode;
|
||||
|
||||
@ApiModelProperty("结算币种")
|
||||
private String settlementCurrency;
|
||||
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import com.mhd.common.log.enums.BusinessType;
|
||||
import com.mhd.user.application.service.*;
|
||||
import com.mhd.user.domain.userAggregate.entity.DriverExcel;
|
||||
import com.mhd.user.domain.userAggregate.repository.po.DriverVehicleBindPo;
|
||||
import com.mhd.user.domain.userAggregate.repository.po.UserDriverEnterprisePo;
|
||||
import com.mhd.user.domain.userAggregate.repository.todo.*;
|
||||
import com.mhd.user.interfaces.assember.*;
|
||||
import com.mhd.user.interfaces.dto.DriverExcelDto;
|
||||
@@ -128,7 +129,20 @@ public class UserDriverAPI extends BaseController {
|
||||
UserDriverDO userDriverDO = userDriverAssember.toUserDriverDO(userDriverDTO);
|
||||
return toAjax(userDriverApplicationService.bindVehicle(userDriverDO));
|
||||
}
|
||||
@Log(title = "承运人管理-绑定车辆", description ="绑定车辆",businessType = BusinessType.UPDATE)
|
||||
@ApiOperation("绑定车辆")
|
||||
@PostMapping("/bindVehicleForHome")
|
||||
public AjaxResult bindVehicleForHome(@RequestBody UserDriverDTO userDriverDTO){
|
||||
UserDriverDO userDriverDO = userDriverAssember.toUserDriverDO(userDriverDTO);
|
||||
return toAjax(userDriverApplicationService.bindVehicleForHome(userDriverDO));
|
||||
}
|
||||
|
||||
@ApiOperation("删除司机绑定关系")
|
||||
@PostMapping("/driverVehicleBindApi/delectDriverBind")
|
||||
public AjaxResult delectDriverBind(@RequestBody UserDriverDTO userDriverDTO) {
|
||||
return toAjax(driverVehicleBindApplicationService.delectDriverBind(userDriverDTO));
|
||||
|
||||
}
|
||||
@Log(title = "承运人管理-个体承运人新增绑定车辆", description ="个体承运人新增绑定车辆",businessType = BusinessType.UPDATE)
|
||||
@ApiOperation("个体承运人新增绑定车辆")
|
||||
@PostMapping("/bindVehicle1")
|
||||
@@ -246,6 +260,17 @@ public class UserDriverAPI extends BaseController {
|
||||
return AjaxResult.success(userDriverApplicationService.userDriverAuthList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 车辆认证-承运人查询(个人司机)
|
||||
* @return
|
||||
*/
|
||||
@Log(title = "承运人管理-查询", description ="车辆认证-承运人查询(个人司机)",businessType = BusinessType.INQUIRE)
|
||||
@ApiOperation("车辆认证-承运人查询(个人司机)")
|
||||
@GetMapping("/userPersonalDriverAuthList")
|
||||
public AjaxResult userPersonalDriverAuthList() {
|
||||
return AjaxResult.success(userDriverApplicationService.userPersonalDriverAuthList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 车辆导入-承运人查询
|
||||
* @return
|
||||
@@ -303,6 +328,12 @@ public class UserDriverAPI extends BaseController {
|
||||
return AjaxResult.success(userDriverEnterpriseApplicationService.getEnterpriseByUserId(userId));
|
||||
}
|
||||
|
||||
@ApiOperation("根据用户id查询企业信息(返回值不同)")
|
||||
@GetMapping("/getEnterpriseByUserIds")
|
||||
public UserDriverEnterprisePo getEnterpriseByUserIds(@RequestParam("userId") Long userId) {
|
||||
return userDriverEnterpriseApplicationService.getEnterpriseByUserIds(userId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取司机校验相应值
|
||||
*/
|
||||
|
||||
+15
-1
@@ -58,4 +58,18 @@ public class QueryAllShipperInfoVo {
|
||||
|
||||
@ApiModelProperty("是否有默认地址")
|
||||
private Boolean hasDefaultAddress;
|
||||
}
|
||||
|
||||
@ApiModelProperty("用户nc")
|
||||
private String documentPreparerNcCode;
|
||||
|
||||
@ApiModelProperty(name = "客户nc编码")
|
||||
private String customerNcCode;
|
||||
|
||||
@ApiModelProperty(name = "组织ID")
|
||||
private Long organizationId;
|
||||
|
||||
@ApiModelProperty(name = "一级组织ID")
|
||||
private Long topOrganizationId;
|
||||
@ApiModelProperty("结算币种")
|
||||
private String settlementCurrency;
|
||||
}
|
||||
@@ -20,15 +20,17 @@ spring:
|
||||
discovery:
|
||||
# server-addr: 127.0.0.1:8848
|
||||
# 线上测试环境配置 容器名+端口号
|
||||
# server-addr: 10.33.0.129:6010
|
||||
#线上正式环境
|
||||
server-addr: 10.102.192.105:6848
|
||||
# server-addr: 10.33.0.129:6010
|
||||
server-addr: 10.102.192.5:6848
|
||||
username: nacos
|
||||
password: manhuoda@2023
|
||||
config:
|
||||
# server-addr: 127.0.0.1:8848
|
||||
# 线上测试环境配置 容器名+端口号
|
||||
# server-addr: 10.33.0.129:6010
|
||||
#线上正式环境
|
||||
server-addr: 10.102.192.105:6848
|
||||
# server-addr: 10.33.0.129:6010
|
||||
server-addr: 10.102.192.5:6848
|
||||
username: nacos
|
||||
password: manhuoda@2023
|
||||
group: DEFAULT_GROUP # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置
|
||||
file-extension: yml #默认properties
|
||||
# 共享配置
|
||||
@@ -40,4 +42,4 @@ spring:
|
||||
max-request-size: 50MB
|
||||
mybatis-plus:
|
||||
configuration:
|
||||
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
|
||||
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
|
||||
@@ -209,8 +209,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="organizationName != null and organizationName != ''">
|
||||
and m.organization_name like concat('%', #{organizationName}, '%')
|
||||
</if>
|
||||
<if test="topOrganizationId != null and topOrganizationId != ''">
|
||||
and top_organization_id = #{topOrganizationId}
|
||||
<!-- 数据权限:南光组织(organizationId=2827)查全部,其他组织查自己 -->
|
||||
<if test="organizationId != null">
|
||||
<!-- 如果设置了 organizationId,添加 organization_id 条件 -->
|
||||
and m.organization_id = #{organizationId}
|
||||
and m.organization_name IS NOT NULL
|
||||
</if>
|
||||
<if test="topOrganizationId != null">
|
||||
<!-- 如果设置了 topOrganizationId,添加 top_organization_id 条件 -->
|
||||
and m.top_organization_id = #{topOrganizationId}
|
||||
<if test="organizationId == null">
|
||||
<!-- 如果没有设置 organizationId,添加 organization_name IS NOT NULL 条件 -->
|
||||
and m.organization_name IS NOT NULL
|
||||
</if>
|
||||
</if>
|
||||
<if test="organizationIdList != null ">
|
||||
AND m.organization_id in
|
||||
@@ -377,7 +388,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
LEFT JOIN
|
||||
motorcade_driver d
|
||||
ON m.motorcade_id = d.motorcade_id and d.del_flag = 1
|
||||
where top_organization_id = #{organizationId} and m.del_flag = 1
|
||||
<where>
|
||||
m.del_flag = 1
|
||||
<!-- 数据权限:南光组织(organizationId=2827)查全部,其他组织查自己 -->
|
||||
<if test="organizationId != null">
|
||||
<!-- 如果设置了 organizationId,添加 organization_id 条件 -->
|
||||
and m.organization_id = #{organizationId}
|
||||
and m.organization_name IS NOT NULL
|
||||
</if>
|
||||
<if test="topOrganizationId != null">
|
||||
<!-- 如果设置了 topOrganizationId,添加 top_organization_id 条件 -->
|
||||
and m.top_organization_id = #{topOrganizationId}
|
||||
<if test="organizationId == null">
|
||||
<!-- 如果没有设置 organizationId,添加 organization_name IS NOT NULL 条件 -->
|
||||
and m.organization_name IS NOT NULL
|
||||
</if>
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -25,6 +25,8 @@
|
||||
a.role_id,
|
||||
a.parent_role_id,
|
||||
a.organization_id,
|
||||
a.organization_name AS organizationName,
|
||||
a.top_organization_id AS topOrganizationId,
|
||||
a.role_code,
|
||||
a.role_name,
|
||||
a.role_remark,
|
||||
@@ -51,6 +53,7 @@
|
||||
a.del_flag = 1
|
||||
<include refid="common_where"></include>
|
||||
GROUP BY a.role_id
|
||||
ORDER BY COALESCE(a.update_time, a.create_time) DESC
|
||||
</select>
|
||||
<select id="selectByOrganizationIdAndRoleCode"
|
||||
parameterType="com.mhd.user.domain.roleAggregate.repository.todo.RoleDo"
|
||||
@@ -119,6 +122,16 @@
|
||||
</if>
|
||||
<if test="organizationId !=null">
|
||||
and a.organization_id = #{organizationId}
|
||||
and a.organization_name IS NOT NULL
|
||||
</if>
|
||||
<if test="topOrganizationId !=null">
|
||||
and a.top_organization_id = #{topOrganizationId}
|
||||
<if test="organizationId == null">
|
||||
and a.organization_name IS NOT NULL
|
||||
</if>
|
||||
</if>
|
||||
<if test="organizationName != null and organizationName != ''">
|
||||
and a.organization_name like concat('%' , #{organizationName} , '%')
|
||||
</if>
|
||||
<if test="organizationIds !=null">
|
||||
and a.organization_id in
|
||||
|
||||
@@ -106,4 +106,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
AND a.user_id = #{userId}
|
||||
</select>
|
||||
|
||||
<select id="getEnterpriseByUserIds" resultType="com.mhd.user.domain.userAggregate.repository.po.UserDriverEnterprisePo" parameterType="java.lang.Long">
|
||||
SELECT
|
||||
a.*
|
||||
FROM
|
||||
user_driver_enterprise a
|
||||
WHERE
|
||||
a.del_flag = 1
|
||||
AND a.driver_type = 2
|
||||
AND a.user_id = #{userId}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -120,6 +120,7 @@
|
||||
a.driver_work_license_front_url,
|
||||
a.work_certificate_back_img_url,
|
||||
b.create_time,
|
||||
a.user_identity,
|
||||
b.create_by,
|
||||
b.create_by_name,
|
||||
b.update_time,
|
||||
@@ -186,6 +187,7 @@
|
||||
ude.driver_corp_idcard_number,
|
||||
r.roleName,
|
||||
dvb.vehicle_id,
|
||||
wlhydriver.id as wlhydriverId,
|
||||
WM_CONCAT(DISTINCT dvb.vehicle_license_plate_number ) AS vehicleLicensePlateNumber,
|
||||
WM_CONCAT(DISTINCT m.motorcade_name ) AS driverTeamName
|
||||
FROM
|
||||
@@ -205,6 +207,8 @@
|
||||
user_id
|
||||
) r ON r.user_id = b.user_id
|
||||
LEFT JOIN user_driver a ON a.user_id = b.user_id
|
||||
LEFT JOIN NGWL_TEST_WLHY.sys_user wlhyuser ON wlhyuser.szwl_user_id = b.user_id
|
||||
LEFT JOIN NGWL_TEST_WLHY.tms_driver wlhydriver ON wlhydriver.driver_id = wlhyuser.id
|
||||
LEFT JOIN user_driver_enterprise ude ON b.user_id = ude.user_id
|
||||
AND ude.driver_type = 1
|
||||
LEFT JOIN user_driver_enterprise ud ON b.user_id = ud.user_id
|
||||
@@ -228,6 +232,7 @@
|
||||
|
||||
<sql id="selectUserDriverVo2">
|
||||
SELECT a.driver_id,
|
||||
a.user_driver_type,
|
||||
a.driver_allow_driving_type_id,
|
||||
a.driver_allow_driving_type_name,
|
||||
a.driver_certification_authority,
|
||||
@@ -262,6 +267,7 @@
|
||||
a.driver_fill_auth_id,
|
||||
a.driver_fill_auth_name,
|
||||
a.driver_fill_auth_remark,
|
||||
a.user_identity,
|
||||
b.user_id,
|
||||
b.top_organization_id,
|
||||
b.organization_id,
|
||||
@@ -300,11 +306,13 @@
|
||||
ude.driver_corp_legal_name,
|
||||
ude.driver_corp_name,
|
||||
ude.driver_corp_idcard_number,
|
||||
ude.driver_business_license_front_url,
|
||||
ude.driver_business_license_number,
|
||||
WM_CONCAT(dvb.vehicle_license_plate_number) AS vehicleLicensePlateNumber,
|
||||
WM_CONCAT(m.motorcade_name) AS driverTeamName,
|
||||
md.motorcade_id motorcade_header_id
|
||||
FROM "USER" b
|
||||
LEFT JOIN user_driver a ON a.user_id = b.user_id AND b.del_flag = 1
|
||||
LEFT JOIN user_driver a ON a.user_id = b.user_id AND a.del_flag = 1
|
||||
LEFT JOIN user_driver_enterprise ude ON a.user_id = ude.user_id AND ude.del_flag = 1
|
||||
LEFT JOIN driver_vehicle_bind dvb ON a.user_id = dvb.user_id AND dvb.del_flag = 1
|
||||
LEFT JOIN motorcade m ON a.driver_id = m.motorcade_header_id AND m.del_flag = 1
|
||||
@@ -602,6 +610,9 @@
|
||||
<if test="userDriverDO.userDriverType != null">
|
||||
and a.user_driver_type = #{userDriverDO.userDriverType}
|
||||
</if>
|
||||
<if test="userDriverDO.userIdentity != null">
|
||||
and a.user_identity = #{userDriverDO.userIdentity}
|
||||
</if>
|
||||
/*准驾车型id*/
|
||||
<if test="userDriverDO.driverAllowDrivingTypeId != null and userDriverDO.driverAllowDrivingTypeId != ''">
|
||||
and a.driver_allow_driving_type_id = #{userDriverDO.driverAllowDrivingTypeId}
|
||||
@@ -692,7 +703,10 @@
|
||||
<!-- </foreach>-->
|
||||
<!-- </if>-->
|
||||
|
||||
<if test="userDriverDO.organizationId != null"> and b.organization_id = #{userDriverDO.organizationId}</if>
|
||||
<if test="userDriverDO.organizationId != null">
|
||||
and b.organization_id = #{userDriverDO.organizationId}
|
||||
and b.organization_name IS NOT NULL
|
||||
</if>
|
||||
<if test="userDriverDO.createBy != null">
|
||||
and (b.create_by = #{userDriverDO.createBy}
|
||||
or b.user_id = #{userDriverDO.createBy}
|
||||
@@ -973,6 +987,37 @@
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<select id="userPersonalDriverAuthList" resultType="com.mhd.user.domain.userAggregate.repository.po.UserDriverPo">
|
||||
select ud.driver_id,
|
||||
u.user_id,
|
||||
u.user_name,
|
||||
u.user_phone,
|
||||
u.user_account,
|
||||
ude.user_driver_enterprise_id,
|
||||
ude.driver_enterprise_name
|
||||
from "USER" u
|
||||
left join user_driver ud on ud.user_id = u.user_id and u.del_flag = 1
|
||||
left join user_driver_enterprise ude
|
||||
on u.user_id = ude.user_id and ude.del_flag = 1
|
||||
where u.del_flag = 1 and u.role_code = 'driver'
|
||||
<if test="createBy != null"> and u.create_by = #{createBy}</if>
|
||||
<if test="createBy != null and organizationIdList == null">
|
||||
and u.create_by = #{createBy}</if>
|
||||
<if test="organizationIdList != null and createBy == null">
|
||||
AND u.organization_id in
|
||||
<foreach item="id" collection="organizationIdList" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="organizationIdList != null and createBy != null">
|
||||
AND (u.organization_id in
|
||||
<foreach item="id" collection="organizationIdList" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
OR u.create_by = #{createBy})
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<select id="motorcadeAuthCaptainList" resultType="java.util.HashMap">
|
||||
select u.user_id userId,
|
||||
u.top_organization_id topOrganizationId,
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
a.department_id,
|
||||
a.ding_user_id,
|
||||
a.ding_dept_id,
|
||||
a.validity_period_management
|
||||
a.validity_period_management,a.salesperson_nc_code,a.document_preparer_nc_code
|
||||
FROM "USER" a
|
||||
where a.del_flag = 1
|
||||
</sql>
|
||||
@@ -96,7 +96,7 @@
|
||||
FROM
|
||||
user_shipper s
|
||||
LEFT JOIN
|
||||
"user" u
|
||||
"USER" u
|
||||
ON u.user_id = s.user_id
|
||||
<where>
|
||||
<if test="topOrganizationId != null "> and u.top_organization_id = #{topOrganizationId}</if>
|
||||
@@ -117,7 +117,7 @@
|
||||
FROM
|
||||
user_shipper s
|
||||
LEFT JOIN
|
||||
"user" u
|
||||
"USER" u
|
||||
ON u.user_id = s.user_id and u.del_flag = 1
|
||||
<where>
|
||||
s.del_flag = 1 and s.shipper_fill = 3
|
||||
@@ -217,11 +217,19 @@
|
||||
and a.user_id = #{userId}
|
||||
</if>
|
||||
|
||||
<if test="organizationId !=null">
|
||||
<!-- 数据权限:南光组织(organizationId=2827)查全部,其他组织查自己 -->
|
||||
<if test="organizationId != null">
|
||||
<!-- 如果设置了 organizationId,添加 organization_id 条件 -->
|
||||
and a.organization_id = #{organizationId}
|
||||
and a.organization_name IS NOT NULL
|
||||
</if>
|
||||
<if test="topOrganizationId !=null">
|
||||
<if test="topOrganizationId != null">
|
||||
<!-- 如果设置了 topOrganizationId,添加 top_organization_id 条件 -->
|
||||
and a.top_organization_id = #{topOrganizationId}
|
||||
<if test="organizationId == null">
|
||||
<!-- 如果没有设置 organizationId,添加 organization_name IS NOT NULL 条件 -->
|
||||
and a.organization_name IS NOT NULL
|
||||
</if>
|
||||
</if>
|
||||
/*组织名称*/
|
||||
<if test="organizationName != null and organizationName != ''">
|
||||
@@ -411,7 +419,7 @@
|
||||
a.user_account,
|
||||
a.avatar
|
||||
FROM
|
||||
"user" a
|
||||
"USER" a
|
||||
WHERE
|
||||
a.del_flag = 1
|
||||
<include refid="common_where1"></include>
|
||||
@@ -658,7 +666,7 @@
|
||||
us.shipper_enterprise_name,
|
||||
us.shipper_type
|
||||
FROM
|
||||
"user" u
|
||||
"USER" u
|
||||
LEFT JOIN user_shipper us ON u.user_id = us.user_id
|
||||
WHERE
|
||||
u.del_flag = 1
|
||||
@@ -676,7 +684,7 @@
|
||||
ude.driver_enterprise_name,
|
||||
ude.driver_type
|
||||
FROM
|
||||
"user" u
|
||||
"USER" u
|
||||
LEFT JOIN user_driver_enterprise ude ON u.user_id = ude.user_id
|
||||
WHERE
|
||||
u.del_flag = 1
|
||||
@@ -700,7 +708,7 @@
|
||||
a.user_account,
|
||||
a.avatar
|
||||
FROM
|
||||
"user" a
|
||||
"USER" a
|
||||
WHERE
|
||||
a.del_flag = 1
|
||||
and a.top_organization_id = #{topOrganizationId}
|
||||
@@ -708,7 +716,8 @@
|
||||
</select>
|
||||
|
||||
<select id="findAllShipperInfo" resultType="com.mhd.user.interfaces.vo.QueryAllShipperInfoVo">
|
||||
SELECT u.user_id, u.user_name, u.user_area_address, u.user_area_county_id, u.user_area_name ,u.user_phone,u.has_default_address,b.shipper_id,b.shipper_enterprise_name
|
||||
SELECT u.user_id, u.user_name, u.user_area_address, u.user_area_county_id, u.user_area_name ,u.user_phone,u.has_default_address,b.shipper_id,b.shipper_enterprise_name,u.DOCUMENT_PREPARER_NC_CODE,b.CUSTOMER_NC_CODE,u.organization_id AS organizationId,u.top_organization_id AS topOrganizationId,
|
||||
b.settlement_currency AS settlementCurrency
|
||||
FROM "USER" u
|
||||
LEFT JOIN user_shipper b ON u.user_id = b.user_id
|
||||
left join (select user_id, LISTAGG(r.role_name, '&') WITHIN GROUP(ORDER BY r.role_name) AS roleName
|
||||
@@ -723,11 +732,12 @@
|
||||
<if test="userId !=null">
|
||||
AND u.user_Id = #{userId}
|
||||
</if>
|
||||
/*一级组织ID*/
|
||||
<if test="topOrganizationId !=null">
|
||||
AND u.top_organization_id = #{topOrganizationId}
|
||||
/*组织ID - 数据隔离:南光组织(organizationId=2827)查询全部,其他组织查询自己组织的数据*/
|
||||
<if test="organizationId !=null">
|
||||
AND u.organization_id = #{organizationId}
|
||||
AND u.organization_name IS NOT NULL
|
||||
</if>
|
||||
GROUP BY u.user_id
|
||||
GROUP BY u.user_id, u.user_name, u.user_area_address, u.user_area_county_id, u.user_area_name, u.user_phone, u.has_default_address, b.shipper_id, b.shipper_enterprise_name, u.DOCUMENT_PREPARER_NC_CODE, b.CUSTOMER_NC_CODE, u.organization_id, u.top_organization_id, b.settlement_currency
|
||||
</select>
|
||||
<select id="finShipperEnterpriseNamedByUserId" resultType="string">
|
||||
SELECT
|
||||
@@ -742,4 +752,4 @@
|
||||
AND u.business_type IN (1, 3)
|
||||
AND u.user_Id = #{userId}
|
||||
</select>
|
||||
</mapper>
|
||||
</mapper>
|
||||
@@ -114,7 +114,8 @@
|
||||
b.shipper_enterprisel_auth_id,
|
||||
a.user_phone,
|
||||
a.user_name,
|
||||
a.organization_name,
|
||||
a.organization_id AS organizationId,
|
||||
a.organization_name AS organizationName,
|
||||
a.user_account,
|
||||
a.user_member_code,
|
||||
a.user_idcard_number,
|
||||
@@ -139,7 +140,7 @@
|
||||
b.monthly_settlement_flag,
|
||||
a.user_auth_status,
|
||||
b.original_receipt_flag,
|
||||
b.freight_node,b.customer_nc_code
|
||||
b.freight_node,b.customer_nc_code,b.settlement_currency
|
||||
FROM "USER" a
|
||||
LEFT JOIN user_shipper b ON a.user_id = b.user_id
|
||||
left join (select user_id, LISTAGG(DISTINCT r.role_name, '&') WITHIN GROUP(ORDER BY r.role_name) AS roleName
|
||||
@@ -191,7 +192,7 @@
|
||||
b.shipper_enterprise_fill,
|
||||
a.business_type
|
||||
FROM
|
||||
"user" a
|
||||
"USER" a
|
||||
LEFT JOIN user_shipper b ON b.user_id = a.user_id
|
||||
LEFT JOIN user_role ur ON b.user_id = ur.user_id
|
||||
LEFT JOIN role r ON ur.role_id = r.role_id
|
||||
|
||||
+14
-1
@@ -1,6 +1,7 @@
|
||||
package com.mhd.modules.monitor.config;
|
||||
|
||||
import de.codecentric.boot.admin.server.config.AdminServerProperties;
|
||||
import org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
||||
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
|
||||
@@ -9,7 +10,7 @@ import org.springframework.security.web.authentication.SavedRequestAwareAuthenti
|
||||
|
||||
/**
|
||||
* 监控权限配置
|
||||
*
|
||||
*
|
||||
* @author mhd
|
||||
*/
|
||||
@EnableWebSecurity
|
||||
@@ -32,11 +33,23 @@ public class WebSecurityConfigurer
|
||||
return httpSecurity
|
||||
.headers().frameOptions().disable()
|
||||
.and().authorizeRequests()
|
||||
.antMatchers("/actuator/health", "/actuator/info").permitAll() //扫描漏洞添加
|
||||
.antMatchers("/actuator/**").authenticated() //扫描漏洞添加
|
||||
.antMatchers(adminContextPath + "/assets/**"
|
||||
, adminContextPath + "/login"
|
||||
, adminContextPath + "/actuator/**"
|
||||
, adminContextPath + "/instances/**"
|
||||
).permitAll()
|
||||
// 管理端点需要认证
|
||||
.antMatchers("/actuator/**").hasRole("ADMIN")//扫描漏洞添加
|
||||
.antMatchers("/admin/**").hasRole("ADMIN")//扫描漏洞添加
|
||||
.antMatchers("/actuator/env").hasRole("plat_admin") // 仅允许ADMIN角色访问/env端点 //扫描漏洞添加
|
||||
// 允许公开访问的端点
|
||||
.requestMatchers(EndpointRequest.to("health", "info", "prometheus"))//扫描漏洞添加
|
||||
.permitAll()
|
||||
// 敏感端点需要管理员权限
|
||||
.requestMatchers(EndpointRequest.to("env", "configprops", "beans", "mappings"))//扫描漏洞添加
|
||||
.hasRole("ADMIN")
|
||||
.anyRequest().authenticated()
|
||||
.and()
|
||||
.formLogin().loginPage(adminContextPath + "/login")
|
||||
|
||||
+1
-1
@@ -92,7 +92,7 @@
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.18.4</version>
|
||||
<version>1.18.22</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<!--链路追踪-->
|
||||
|
||||
+9
-1
@@ -7,11 +7,15 @@ import com.linke.finance.domain.approvalDocument.repository.todo.ApprovalDocumen
|
||||
import com.linke.finance.domain.approvalDocument.repository.todo.WorkflowProcessInstancesByIdDO;
|
||||
import com.linke.finance.domain.approvalDocument.service.ApprovalDocumentDomainService;
|
||||
import com.linke.finance.interfaces.vo.ApprovalStatsVO;
|
||||
import com.mhd.common.core.domain.po.UserPo;
|
||||
import com.mhd.common.security.utils.SecurityUtils;
|
||||
import com.mhd.system.api.model.LoginUser;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.catalina.User;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.rmi.ServerException;
|
||||
import java.util.List;
|
||||
/**
|
||||
* 审批单据ApplicationService
|
||||
@@ -30,8 +34,12 @@ public class ApprovalDocumentApplicationService {
|
||||
* 分页查询审批单据列表
|
||||
*/
|
||||
|
||||
public List<ApprovalDocumentPO> queryList(ApprovalDocumentDO approvalDocumentDO) {
|
||||
public List<ApprovalDocumentPO> queryList(ApprovalDocumentDO approvalDocumentDO) throws Exception{
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
UserPo userPo=loginUser.getUserPo();
|
||||
if(!userPo.getRoleCode().equals("plat_admin")){
|
||||
throw new ServerException("您没有权限访问");
|
||||
}
|
||||
if (loginUser != null){
|
||||
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
|
||||
if (topOrganizationId != null && topOrganizationId != 1){
|
||||
|
||||
+182
-6
@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.linke.finance.domain.accountManage.entity.AccountCashWallet;
|
||||
import com.linke.finance.domain.accountManage.service.AccountCashWalletDomainService;
|
||||
import com.linke.finance.domain.auditConfiguration.repository.todo.AuditConfigurationDO;
|
||||
@@ -124,11 +125,51 @@ public class BusinessDocumentApplicationService {
|
||||
|
||||
public List<BusinessDocumentPO> queryList(BusinessDocumentDO businessDocumentDO) {
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (loginUser == null || loginUser.getUserPo() == null) {
|
||||
log.warn("运单管理查询 - 未获取到登录用户信息,跳过数据权限过滤");
|
||||
return businessDocumentDomainService.queryList(businessDocumentDO);
|
||||
}
|
||||
|
||||
UserPo userPo = loginUser.getUserPo();
|
||||
if (userPo.getUserAccountType() == 3){
|
||||
businessDocumentDO.setTopOrganizationId(userPo.getTopOrganizationId());
|
||||
}else {
|
||||
businessDocumentDO.setOrganizationId(userPo.getOrganizationId());
|
||||
Long loginUserOrganizationId = userPo.getOrganizationId();
|
||||
Long topOrganizationId = userPo.getTopOrganizationId();
|
||||
|
||||
// 先保存前端传递的 organizationId(如果存在)
|
||||
Long frontendOrganizationId = businessDocumentDO.getOrganizationId();
|
||||
|
||||
// 数据权限:根据organizationId来设置查询权限
|
||||
// organizationId等于2827时查询全部,其他仅查询各自组织的信息
|
||||
if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
|
||||
// 南光组织(organizationId=2827):可以查询所有组织的数据
|
||||
// 如果前端传递了 organizationId,使用前端传递的值进行过滤
|
||||
// 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
|
||||
if (frontendOrganizationId != null) {
|
||||
businessDocumentDO.setOrganizationId(frontendOrganizationId);
|
||||
businessDocumentDO.setTopOrganizationId(null);
|
||||
} else {
|
||||
businessDocumentDO.setOrganizationId(null);
|
||||
businessDocumentDO.setTopOrganizationId(null);
|
||||
}
|
||||
} else {
|
||||
// 其他组织:根据userAccountType设置组织过滤
|
||||
if (userPo.getUserAccountType() == 3){
|
||||
// 租户管理员:使用topOrganizationId
|
||||
if (topOrganizationId != null) {
|
||||
businessDocumentDO.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
businessDocumentDO.setOrganizationId(null);
|
||||
} else {
|
||||
// 其他用户:使用organizationId
|
||||
if (frontendOrganizationId != null && !frontendOrganizationId.equals(loginUserOrganizationId)) {
|
||||
// 前端传递了其他组织的organizationId,强制使用当前登录用户的组织ID,防止越权查询
|
||||
log.warn("运单管理查询 - 前端传递的组织ID {} 与当前登录用户的组织ID {} 不一致,使用当前登录用户的组织ID进行过滤",
|
||||
frontendOrganizationId, loginUserOrganizationId);
|
||||
businessDocumentDO.setOrganizationId(loginUserOrganizationId);
|
||||
} else if (frontendOrganizationId == null) {
|
||||
businessDocumentDO.setOrganizationId(loginUserOrganizationId);
|
||||
}
|
||||
businessDocumentDO.setTopOrganizationId(null);
|
||||
}
|
||||
}
|
||||
return businessDocumentDomainService.queryList(businessDocumentDO);
|
||||
}
|
||||
@@ -550,6 +591,10 @@ public class BusinessDocumentApplicationService {
|
||||
return businessDocumentDomainService.queryList(businessDocumentDO);
|
||||
}
|
||||
|
||||
public List<Map<String,Object>> getFeeList(String invoiceId) {
|
||||
return businessDocumentDomainService.getFeeList(invoiceId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改业务单据支付状态,同步网货修改支付状态
|
||||
*/
|
||||
@@ -1285,12 +1330,43 @@ public class BusinessDocumentApplicationService {
|
||||
List<BusinessDocumentDetali> businessDocumentDetaliUpdateList = new ArrayList<>();
|
||||
List<BusinessDocumentDetaliDTO> businessDocumentDetailDtoList = new ArrayList<>();
|
||||
List<Verification> verificationList = new ArrayList<>();
|
||||
log.info("批量审核开始,审核状态:{},待审核数据条数:{}", businessDocumentDetaliDO.getAuditStatus(), detailList.size());
|
||||
|
||||
// 先设置审核人的组织信息,确保在生成应付账单时能够正确获取组织信息
|
||||
Long loginUserOrganizationId = null;
|
||||
String loginUserOrganizationName = null;
|
||||
Long loginUserTopOrganizationId = null;
|
||||
if (loginUser.getUserPo() != null) {
|
||||
loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
|
||||
loginUserOrganizationName = loginUser.getUserPo().getOrganizationName();
|
||||
loginUserTopOrganizationId = loginUser.getUserPo().getTopOrganizationId();
|
||||
}
|
||||
|
||||
for (BusinessDocumentDetali detail:detailList) {
|
||||
log.debug("处理业务单据详情:businessDocumentDetaliId={}, 当前审核状态={}, 目标审核状态={}",
|
||||
detail.getBusinessDocumentDetaliId(), detail.getAuditStatus(), businessDocumentDetaliDO.getAuditStatus());
|
||||
|
||||
if(detail.getAuditStatus()==2||detail.getAuditStatus()==3){
|
||||
log.warn("业务单据详情 businessDocumentDetaliId={} 的审核状态已经是 {}(2=已同意,3=已拒绝),跳过处理",
|
||||
detail.getBusinessDocumentDetaliId(), detail.getAuditStatus());
|
||||
continue;
|
||||
}
|
||||
|
||||
// 在生成应付账单之前,先设置审核人的组织信息,确保 packVerication 能够正确获取组织信息
|
||||
if (loginUserOrganizationId != null) {
|
||||
detail.setOrganizationId(loginUserOrganizationId);
|
||||
}
|
||||
if (loginUserOrganizationName != null) {
|
||||
detail.setOrganizationName(loginUserOrganizationName);
|
||||
}
|
||||
if (loginUserTopOrganizationId != null) {
|
||||
detail.setTopOrganizationId(loginUserTopOrganizationId);
|
||||
}
|
||||
|
||||
//只有同意的才生成应付账单
|
||||
if(businessDocumentDetaliDO.getAuditStatus()==ApproveStatusEnum.AGREE.getKey()){
|
||||
log.info("审核通过,开始生成应付账单:businessDocumentDetaliId={}, firstSubject={}",
|
||||
detail.getBusinessDocumentDetaliId(), detail.getFirstSubject());
|
||||
if(SubjectCodeEnum.first_zycl_clhs.getCode().equals(detail.getFirstSubject())){//车辆核算的单独处理
|
||||
//查询要自有车辆费用明细
|
||||
R<List<SecondSubjectPO>> secondSubjectList = wlhyServiceFeign.getZyclClhsSecondSubjectList(detail.getBusinessCocumentId());
|
||||
@@ -1308,6 +1384,14 @@ public class BusinessDocumentApplicationService {
|
||||
verification.setAuditRemark(businessDocumentDetaliDO.getAuditRemark());
|
||||
verification.setCreateBy(loginUser.getUserid());
|
||||
verification.setCreateByName(loginUser.getUsername());
|
||||
verification.setCreateTime(now);
|
||||
verification.setUpdateTime(now);
|
||||
verification.setUpdateBy(loginUser.getUserid());
|
||||
verification.setUpdateByName(loginUser.getUsername());
|
||||
// 确保 delFlag 被设置(1=正常,2=已删除)
|
||||
if (verification.getDelFlag() == null) {
|
||||
verification.setDelFlag(1);
|
||||
}
|
||||
verification.setPayType(secondSubjectPO.getPayType());
|
||||
verification.setBillRemarks(detail.getRemark());
|
||||
verification.setPaymentMethod(detail.getPaymentMethod());
|
||||
@@ -1318,6 +1402,10 @@ public class BusinessDocumentApplicationService {
|
||||
verification.setPayName(secondSubjectPO.getPayName());
|
||||
}
|
||||
verificationList.add(verification);
|
||||
log.debug("车辆核算二级科目应付账单已添加到列表:businessDocumentDetaliId={}, secondSubject={}, verificationMoney={}, innerNumber={}, delFlag={}, organizationId={}, organizationName={}",
|
||||
detail.getBusinessDocumentDetaliId(), secondSubjectPO.getSecondSubject(),
|
||||
secondSubjectPO.getAmount(), innerNumber, verification.getDelFlag(),
|
||||
verification.getOrganizationId(), verification.getOrganizationName());
|
||||
}
|
||||
}else{
|
||||
throw new ServiceException("查询车辆核算二级科目异常!");
|
||||
@@ -1332,12 +1420,27 @@ public class BusinessDocumentApplicationService {
|
||||
verification.setAuditRemark(businessDocumentDetaliDO.getAuditRemark());
|
||||
verification.setCreateBy(loginUser.getUserid());
|
||||
verification.setCreateByName(loginUser.getUsername());
|
||||
verification.setCreateTime(now);
|
||||
verification.setUpdateTime(now);
|
||||
verification.setUpdateBy(loginUser.getUserid());
|
||||
verification.setUpdateByName(loginUser.getUsername());
|
||||
// 确保 delFlag 被设置(1=正常,2=已删除)
|
||||
if (verification.getDelFlag() == null) {
|
||||
verification.setDelFlag(1);
|
||||
}
|
||||
verification.setPayType(detail.getSecondSubjectName());//付款方式:油卡借款/现金借款=>与二级科目保持一致
|
||||
verification.setBillRemarks(detail.getRemark());
|
||||
verification.setPaymentMethod(detail.getPaymentMethod());
|
||||
verification.setFuelCardNumber(detail.getFuelCardNumber());
|
||||
verificationList.add(verification);
|
||||
log.debug("普通科目应付账单已添加到列表:businessDocumentDetaliId={}, firstSubject={}, secondSubject={}, verificationMoney={}, innerNumber={}, delFlag={}, organizationId={}, organizationName={}",
|
||||
detail.getBusinessDocumentDetaliId(), detail.getFirstSubject(), detail.getSecondSubject(),
|
||||
detail.getAmount(), innerNumber, verification.getDelFlag(),
|
||||
verification.getOrganizationId(), verification.getOrganizationName());
|
||||
}
|
||||
} else {
|
||||
log.info("审核状态不是已同意(当前状态:{}),不生成应付账单:businessDocumentDetaliId={}",
|
||||
businessDocumentDetaliDO.getAuditStatus(), detail.getBusinessDocumentDetaliId());
|
||||
}
|
||||
|
||||
detail.setAuditStatus(businessDocumentDetaliDO.getAuditStatus());//审批结果
|
||||
@@ -1347,11 +1450,25 @@ public class BusinessDocumentApplicationService {
|
||||
detail.setUpdateBy(loginUser.getUserid());
|
||||
detail.setUpdateByName(loginUser.getUsername());
|
||||
detail.setUpdateTime(now);
|
||||
// 组织信息已经在生成应付账单之前设置,这里不需要重复设置
|
||||
businessDocumentDetaliUpdateList.add(detail);
|
||||
|
||||
BusinessDocumentDetaliDTO detailDto = new BusinessDocumentDetaliDTO();
|
||||
BeanUtils.copyProperties(detail,detailDto);
|
||||
detailDto.setAuditRemark(businessDocumentDetaliDO.getAuditRemark());
|
||||
|
||||
// 确保关键字段的类型正确,避免 TMS 端类型转换错误
|
||||
// 确保 auditRemark 是字符串类型,不为 null(使用最新的审核备注)
|
||||
String auditRemark = businessDocumentDetaliDO.getAuditRemark();
|
||||
if (auditRemark == null) {
|
||||
auditRemark = "";
|
||||
}
|
||||
// 显式设置为字符串类型,确保类型正确
|
||||
detailDto.setAuditRemark(auditRemark);
|
||||
|
||||
// 确保其他关键字段也是正确的类型(虽然已经通过 copyProperties 复制,但显式设置更安全)
|
||||
detailDto.setAuditStatus(detail.getAuditStatus());
|
||||
detailDto.setAuditType(detail.getAuditType());
|
||||
|
||||
businessDocumentDetailDtoList.add(detailDto);
|
||||
//车辆维修单同步工时费申请状态
|
||||
if(businessDocumentDetaliDO.getAuditStatus()==2||businessDocumentDetaliDO.getAuditStatus()==3){
|
||||
@@ -1380,14 +1497,72 @@ public class BusinessDocumentApplicationService {
|
||||
}
|
||||
}
|
||||
//应付账单
|
||||
log.info("准备保存应付账单,应付账单数量:{}", verificationList.size());
|
||||
if (!verificationList.isEmpty()){
|
||||
// 记录应付账单详细信息,便于排查
|
||||
for (int i = 0; i < Math.min(verificationList.size(), 3); i++) {
|
||||
Verification v = verificationList.get(i);
|
||||
log.info("应付账单示例[{}]:businessDocumentDetaliId={}, innerNumber={}, verificationMoney={}, firstSubject={}, secondSubject={}",
|
||||
i, v.getBusinessDocumentDetaliId(), v.getInnerNumber(), v.getVerificationMoney(),
|
||||
v.getFirstSubject(), v.getSecondSubject());
|
||||
}
|
||||
|
||||
boolean saveFlag = verificationDomainService.batchAddVerification(verificationList);
|
||||
log.info("保存应付账单结果:saveFlag={}, 应付账单数量={}", saveFlag, verificationList.size());
|
||||
if(!saveFlag){
|
||||
log.error("保存应付账单失败!应付账单数量:{}", verificationList.size());
|
||||
throw new ServiceException("保存应付账单失败!");
|
||||
}
|
||||
log.info("应付账单保存成功,共保存 {} 条记录", verificationList.size());
|
||||
} else {
|
||||
log.warn("应付账单列表为空,未生成任何应付账单。审核状态:{},业务单据详情数量:{}",
|
||||
businessDocumentDetaliDO.getAuditStatus(), detailList.size());
|
||||
}
|
||||
//推送数据到tms:审核通过修改单据状态为【待付款】,审核拒绝修改状态为【已拒绝】并处理相关逻辑
|
||||
if(businessDocumentDetailDtoList.size()>0){
|
||||
// 记录传递给 TMS 的数据,便于调试
|
||||
log.info("准备同步TMS业务单据信息,数据条数:{}", businessDocumentDetailDtoList.size());
|
||||
for (int i = 0; i < Math.min(businessDocumentDetailDtoList.size(), 3); i++) {
|
||||
BusinessDocumentDetaliDTO dto = businessDocumentDetailDtoList.get(i);
|
||||
log.info("同步TMS业务单据信息示例[{}]:businessDocumentDetaliId={}, auditStatus={}, auditStatus类型={}, auditRemark={}, auditRemark类型={}, auditRemark值={}",
|
||||
i, dto.getBusinessDocumentDetaliId(), dto.getAuditStatus(),
|
||||
dto.getAuditStatus() != null ? dto.getAuditStatus().getClass().getName() : "null",
|
||||
dto.getAuditRemark(), dto.getAuditRemark() != null ? dto.getAuditRemark().getClass().getName() : "null",
|
||||
dto.getAuditRemark());
|
||||
}
|
||||
|
||||
// 最后一次验证:确保所有 auditRemark 都是字符串类型
|
||||
for (BusinessDocumentDetaliDTO dto : businessDocumentDetailDtoList) {
|
||||
if (dto.getAuditRemark() == null) {
|
||||
dto.setAuditRemark("");
|
||||
} else if (!(dto.getAuditRemark() instanceof String)) {
|
||||
// 如果不是字符串类型,转换为字符串
|
||||
log.warn("发现 auditRemark 不是字符串类型:{},类型:{},将转换为字符串",
|
||||
dto.getAuditRemark(), dto.getAuditRemark().getClass().getName());
|
||||
dto.setAuditRemark(String.valueOf(dto.getAuditRemark()));
|
||||
}
|
||||
}
|
||||
|
||||
// 通过 JSON 序列化和反序列化确保类型正确,避免类型转换问题
|
||||
try {
|
||||
String jsonString = JSON.toJSONString(businessDocumentDetailDtoList);
|
||||
log.debug("同步TMS业务单据信息,JSON序列化结果长度:{}", jsonString.length());
|
||||
List<BusinessDocumentDetaliDTO> deserializedList = JSON.parseArray(jsonString, BusinessDocumentDetaliDTO.class);
|
||||
log.debug("JSON反序列化后,数据条数:{}", deserializedList.size());
|
||||
// 验证反序列化后的 auditRemark 类型
|
||||
for (int i = 0; i < Math.min(deserializedList.size(), 3); i++) {
|
||||
BusinessDocumentDetaliDTO dto = deserializedList.get(i);
|
||||
if (dto.getAuditRemark() != null && !(dto.getAuditRemark() instanceof String)) {
|
||||
log.warn("JSON反序列化后,auditRemark 类型不正确:{},将强制转换为字符串",
|
||||
dto.getAuditRemark().getClass().getName());
|
||||
dto.setAuditRemark(String.valueOf(dto.getAuditRemark()));
|
||||
}
|
||||
}
|
||||
businessDocumentDetailDtoList = deserializedList;
|
||||
} catch (Exception e) {
|
||||
log.warn("JSON序列化/反序列化失败,使用原始数据:{}", e.getMessage());
|
||||
}
|
||||
|
||||
AjaxResult ajaxResult = wlhyServiceFeign.syncBusinessDocumentInfo(businessDocumentDetailDtoList);
|
||||
if (null != ajaxResult && !"200".equals(String.valueOf(ajaxResult.get("code")))) {
|
||||
log.error("同步TMS业务单据信息失败:" + ajaxResult.get("msg"));
|
||||
@@ -1401,6 +1576,7 @@ public class BusinessDocumentApplicationService {
|
||||
Verification verification = new Verification();
|
||||
verification.setOrganizationId(businessDocumentDetaliDTO.getOrganizationId());
|
||||
verification.setTopOrganizationId(businessDocumentDetaliDTO.getTopOrganizationId());
|
||||
verification.setOrganizationName(businessDocumentDetaliDTO.getOrganizationName());
|
||||
verification.setVerificationStatus(1);//未支付
|
||||
verification.setBusinessDocumentDetaliId(businessDocumentDetaliDTO.getBusinessDocumentDetaliId());
|
||||
verification.setBusinessDocumentDetaliNumber(businessDocumentDetaliDTO.getBusinessDocumentDetaliNumber());
|
||||
@@ -1487,4 +1663,4 @@ public class BusinessDocumentApplicationService {
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user