作者 tangxuhui

Merge branch 'dev' into test

# Conflicts:
#	deploy/k8s/test/allied-creation-cooperation.yaml
正在显示 67 个修改的文件 包含 2145 行增加586 行删除

要显示太多修改。

为保证性能只显示 67 of 67+ 个文件。

不能预览此文件类型
@@ -4,7 +4,7 @@ ENV APP_DIR $GOPATH/src/allied-creation-cooperation @@ -4,7 +4,7 @@ ENV APP_DIR $GOPATH/src/allied-creation-cooperation
4 RUN mkdir -p $APP_DIR 4 RUN mkdir -p $APP_DIR
5 WORKDIR $APP_DIR/ 5 WORKDIR $APP_DIR/
6 COPY ./pkg pkg 6 COPY ./pkg pkg
7 -# COPY ./conf conf 7 +COPY ./config config
8 COPY ./go.mod go.mod 8 COPY ./go.mod go.mod
9 COPY ./go.sum go.sum 9 COPY ./go.sum go.sum
10 COPY ./main.go main.go 10 COPY ./main.go main.go
  1 +-----BEGIN RSA PRIVATE KEY-----
  2 +MIIEpQIBAAKCAQEAy0OxRf+NheQG9epxbrudwnrzqVgqK5zCuRAkLUgaSMATVXEA
  3 +iDzJN39om+Q49MmtEk4pXGzKUyzkFJG96PA8tJq0E+bSDtSK3n+2mjZb6pChmgHw
  4 +KEX7T8ZVLqJBSrfrI4Z2BJDNEC+3wvVW3zpog1RlfKgft6NYUzNLUqE5Mxzq7lpD
  5 +eRsq+FhzM1sOeEb2dAmUlDDs+7HcR3Kj0ttKeg+hKqIottQ/H6Tq4c8deEQGnO0+
  6 +RN3CygyETbYmLuWttI/sUltulWJALIuU81Yr6uCOq5MSt2WsU8CTuhRwGXSvcQCO
  7 +FLYppYktoMDOGIBQffmJc/DdT1d35fvdpKbm+QIDAQABAoIBAQC8X7+qX2uI6gqJ
  8 +XPxC4x0RX2DxUAPE50KOv6bHUEsLoPZJ+K/Fko/oHuuTja47Lax3inhKb4gSDUhS
  9 +x754YivgNH8u8ns5wz/vc+yGflowyFj7oVAwAqslA2luDnD0Df6crcAx+wAQQCjN
  10 +RRF9T2QMUeq73BOI3Ji+gosLyN55vms2KadrwpPQwYN7qhdrerE7vPqCZeswzs1/
  11 +A5M9PVGBG+simNea5kv+tVJUdLi6ckGAB5KabyhpG779ckwzV/aZy3wIj4SvUvCd
  12 +bewH0xPHx5TqnMOXtzHgktClmL7hIYxy9sL14Dn0KVHbyolQ7IqmJtjXYqG84Fmx
  13 +AfyDfeABAoGBAPP820tKElrfTuZ+Z19kJBTp6I5iax2Ph10glUHLlLqJ82clI/Gl
  14 +CbMtnGmD72HfnJei82xqoVLsUkN9Sp+TSNJALh4N8rHkAtwq5kWToiAWZydwxVsp
  15 +x5OWEN3+QFIdjVW6fhg6jZSK5HHIqMdZOVvbfKP+Cv9fWWzlS7/WVTlJAoGBANVF
  16 +kol+KojM4DEASrw0s1mfPr0XvUFvKJ2TgVGR3HxAk4r0e0WwJdSfwGiB/ePcc6g5
  17 +D5dxBe8W5g3+V0DaC0f1DDNXg2MjYWoByWrurbm14FRnpMnx/UfZLo7rq8T9YrUT
  18 +Bd/y0/JasndN27bIfd60n233IYMqhV2+wBwqD3AxAoGAE2/wdHYJMk4Z9gjZ6WKL
  19 +8VKVIUq759X4XbXrzhsO1TGKP4xY6bZRKIIYtNs65dwvmHD13Yw9H+MNxqyjlkTg
  20 +h0dvpRtNW1ij1bBhOefCAbZnL2AviMyyRpKs81J/A0uxZ8P8qad4gf3ypxHqSD9W
  21 +b3fz3QivDZsl/6Pgvf6wOWkCgYEA1Cv9x5lj2WrxEu62axyG3P9nHBm055cdsf5g
  22 +JfVVg6t+3TuyM7c1O52efpnsKrdTvKTf1QrVG3INdxh0V4lUtcac16sVhBhbvml+
  23 +p0pCPMIrJe1ibKG5F7SB9B+TaEuo2nnNW2mp367JY5VqoyI8zsWk4nJ8vZAc1BGD
  24 +78EMUNECgYEAtV0pta3GuHKOLX1HMRsUsYuWjLqAbahnciF6MnjNWSonEK3VjMhI
  25 +g+krP/9sWoC3cFOG+4s96ubjDTWImvQvCrPaENdvlNwgp035bn51eFRv00QchM2H
  26 +VCS9Nhoqj5BIHl1G7Q13+tYTzjUWtteG902nWDVhgSlNLJf1rbTn34g=
  27 +-----END RSA PRIVATE KEY-----
  1 +-----BEGIN CERTIFICATE-----
  2 +MIIGazCCBVOgAwIBAgIQZBwijHoFToh2kjGwQ1E6bjANBgkqhkiG9w0BAQsFADBc
  3 +MQswCQYDVQQGEwJDTjEaMBgGA1UEChMRV29UcnVzIENBIExpbWl0ZWQxMTAvBgNV
  4 +BAMMKFdvVHJ1cyBPViBTZXJ2ZXIgQ0EgIFtSdW4gYnkgdGhlIElzc3Vlcl0wHhcN
  5 +MjEwMjA0MDAwMDAwWhcNMjIwMzA2MjM1OTU5WjCB0TELMAkGA1UEBhMCQ04xDzAN
  6 +BgNVBBETBjM1MDAxNTESMBAGA1UEBwwJ56aP5bee5biCMU8wTQYDVQQJDEbpqazl
  7 +sL7ljLrmuZbph4zot68yN+WPtzEj5qW85LqU5qW8NTEw44CBNTEx5a6k77yI6Ieq
  8 +6LS46K+V6aqM5Yy65YaF77yJMTAwLgYDVQQKDCfnpo/lu7rkubDkubDkubDkv6Hm
  9 +ga/np5HmioDmnInpmZDlhazlj7gxGjAYBgNVBAMMESouZmptYWltYWltYWkuY29t
  10 +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0OxRf+NheQG9epxbrud
  11 +wnrzqVgqK5zCuRAkLUgaSMATVXEAiDzJN39om+Q49MmtEk4pXGzKUyzkFJG96PA8
  12 +tJq0E+bSDtSK3n+2mjZb6pChmgHwKEX7T8ZVLqJBSrfrI4Z2BJDNEC+3wvVW3zpo
  13 +g1RlfKgft6NYUzNLUqE5Mxzq7lpDeRsq+FhzM1sOeEb2dAmUlDDs+7HcR3Kj0ttK
  14 +eg+hKqIottQ/H6Tq4c8deEQGnO0+RN3CygyETbYmLuWttI/sUltulWJALIuU81Yr
  15 +6uCOq5MSt2WsU8CTuhRwGXSvcQCOFLYppYktoMDOGIBQffmJc/DdT1d35fvdpKbm
  16 ++QIDAQABo4ICsTCCAq0wHwYDVR0jBBgwFoAUDUmPFTN7wE+2+zo4Cfw0Fdpg3RQw
  17 +HQYDVR0OBBYEFMGZEgzwtp+UhpTAS9nmSxlo9tIlMA4GA1UdDwEB/wQEAwIFoDAM
  18 +BgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBJBgNV
  19 +HSAEQjBAMDQGCysGAQQBsjEBAgIWMCUwIwYIKwYBBQUHAgEWF2h0dHBzOi8vc2Vj
  20 +dGlnby5jb20vQ1BTMAgGBmeBDAECAjA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8v
  21 +Y3JsLmNybG9jc3AuY24vV29UcnVzT1ZTZXJ2ZXJDQV8yLmNybDBsBggrBgEFBQcB
  22 +AQRgMF4wOAYIKwYBBQUHMAKGLGh0dHA6Ly9haWEuY3Jsb2NzcC5jbi9Xb1RydXNP
  23 +VlNlcnZlckNBXzIuY3J0MCIGCCsGAQUFBzABhhZodHRwOi8vb2NzcC5jcmxvY3Nw
  24 +LmNuMIIBBQYKKwYBBAHWeQIEAgSB9gSB8wDxAHcARqVV63X6kSAwtaKJafTzfREs
  25 +QXS+/Um4havy/HD+bUcAAAF3brV9qAAABAMASDBGAiEAjrXS+1JJW9jag/XfW+kY
  26 +oL4sGGDNvcZgV35E0EcGQVACIQCjQh8k5oSFtqo7Qrbx2k3OISjfPSYRXNNsG4Ba
  27 +MyDmRwB2AN+lXqtogk8fbK3uuF9OPlrqzaISpGpejjsSwCBEXCpzAAABd261fdAA
  28 +AAQDAEcwRQIgcPQQJ3rkCFaQPKwT3rtfQkr0taPzw0KW7yqu+MtmBH0CIQChKeMk
  29 +v7Xs0z7J47lM6HTPOU+xXL2riC69LC1KCOS6GTAtBgNVHREEJjAkghEqLmZqbWFp
  30 +bWFpbWFpLmNvbYIPZmptYWltYWltYWkuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQBn
  31 ++jDy7sZS0gZzwMR4hnZHWqFYcJR3wnk77xr+5Yu2ifhlxaLHE3rEY3xTR9LsPwfW
  32 +pdg2McinPCI6vs009NYIpeTiHzVDPzKu2BaUfKj+EHLwZQGfXkNhp3cpqZMiTkr/
  33 +YNqf25GXsBa+spwzyHh9MBXXCfWRfdHX7JlH5zyoLNztTp8unxaRYldjghHDA3Q7
  34 +8Fyz6OncY3I4U4KKBSq2/TTxveDW6NxTTuJTPOg3/qSIkwdOBLuIzuhxmF4D9wpl
  35 +LMHmne2CilVeg73/GAzQt/w7FzmdvaHPAOVYWzdaTNALiXJxbi7EyO8q/uNK0GqY
  36 +hljMsnA1hApG+/2sOP/P
  37 +-----END CERTIFICATE-----
  38 +-----BEGIN CERTIFICATE-----
  39 +MIIF4TCCA8mgAwIBAgIQHQgpVDhMv3SvabmRFpvwLTANBgkqhkiG9w0BAQwFADCB
  40 +iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl
  41 +cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV
  42 +BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMjAw
  43 +MTA4MDAwMDAwWhcNMzAwMTA3MjM1OTU5WjBcMQswCQYDVQQGEwJDTjEaMBgGA1UE
  44 +ChMRV29UcnVzIENBIExpbWl0ZWQxMTAvBgNVBAMMKFdvVHJ1cyBPViBTZXJ2ZXIg
  45 +Q0EgIFtSdW4gYnkgdGhlIElzc3Vlcl0wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
  46 +ggEKAoIBAQCARFLq6kqQRZ4SdFMPdd3XJTcOdVVT5bvZZx0VVDrkw3TmSAloQVFf
  47 +RhqDOSXg4CsIaa64qFSrC3a5sc8LgRhx7AUdvoUdfvdxIY1uoyxRWpoWO8oTUkSn
  48 +EXjEPf+zrcU5cWTOi32xWL9vklYds7iOQwgsKAHDzt4an8MLGvcLxAHciyiKcDEh
  49 +HZOGUHO5bKaCq+kP2rJCfVSlNvdyl1B8q+aGWXoi0gXGVL7WX4pcWj+DGuITbLB2
  50 +MzMytse4MjLJ84zaXh0UD4STlyD8tu/fakdxIwQ7K3/pP3RoGj1R9CvMWXUU+fZm
  51 +KNLW5565hd9Bh3Wkz8b4ApgMD9o3RUjTAgMBAAGjggFwMIIBbDAfBgNVHSMEGDAW
  52 +gBRTeb9aqitKz1SA4dibwJ3ysgNmyzAdBgNVHQ4EFgQUDUmPFTN7wE+2+zo4Cfw0
  53 +Fdpg3RQwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0l
  54 +BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMCIGA1UdIAQbMBkwDQYLKwYBBAGyMQEC
  55 +AhYwCAYGZ4EMAQICMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwudXNlcnRy
  56 +dXN0LmNvbS9VU0VSVHJ1c3RSU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDBx
  57 +BggrBgEFBQcBAQRlMGMwOgYIKwYBBQUHMAKGLmh0dHA6Ly9jcnQudXNlcnRydXN0
  58 +LmNvbS9VU0VSVHJ1c3RSU0FBQUFDQS5jcnQwJQYIKwYBBQUHMAGGGWh0dHA6Ly9v
  59 +Y3NwLnVzZXJ0cnVzdC5jb20wDQYJKoZIhvcNAQEMBQADggIBAA5G7XA+fNKyj7Fy
  60 +uotoII38/32eZ4UrC1vGFPEtDyd0yzOrr7SvQUoO2GLxFzIQ0SsgMNXJ4UAhMkTD
  61 +yz1OA0tx0g0GjOQXBGA/yfRR7SgitRJAdbqkPfppMn+dtKXCHHx35ohTL0PklRdb
  62 +mXacvR7rXUIiJMdsvZZqYwc+DpGJ+Zv0sRJZEL7pm1oZv6EV+UzjAlOnLe6yrnyD
  63 +c99Kk1H/RFPUzduUWjiVR2aMDT1oMiwYeB2Zq60Sb201jqZPNQj5E+TkDD5BPFVc
  64 +kLeRi3LyXBUuBvXPsdLtBNlr+LExtCDd66kjeUe2/YbTHF4ai5PZPraQxgbOJJyc
  65 +gizGl/JOgrIQPUOLSQvXlxpKEqS+0z6KqV52bco2PNrC0f8ILKuw0nsfhgcGy46d
  66 +Su8fmU9+FT6e61i2nteKvt8qkkSkAJKQxRUWYduN24mG/OOIkoeOPdYHi+qEfbyI
  67 +qxiiqcH9cZgLK9AVuJoKtt7vg21OyrWi7S5T/WbTfTz9XL7QGe8ZODZZx6d50uo/
  68 +lDOmXm3p/kdGApvUF1UrL+og22jBLi0Ns6xzCfzrI3SpC9abvU8E9EnxQABuu/gM
  69 +/B63dbaZzSsMVFxeECD9nMWv7IH+/rqyGmjqEJzgKdPGvXhqpebQ1HhWrV+j+ipc
  70 +jplXB1j3GCozDFsninXG102N6wC8
  71 +-----END CERTIFICATE-----
  72 +-----BEGIN CERTIFICATE-----
  73 +MIIFgTCCBGmgAwIBAgIQOXJEOvkit1HX02wQ3TE1lTANBgkqhkiG9w0BAQwFADB7
  74 +MQswCQYDVQQGEwJHQjEbMBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYD
  75 +VQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UE
  76 +AwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTE5MDMxMjAwMDAwMFoXDTI4
  77 +MTIzMTIzNTk1OVowgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5
  78 +MRQwEgYDVQQHEwtKZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBO
  79 +ZXR3b3JrMS4wLAYDVQQDEyVVU0VSVHJ1c3QgUlNBIENlcnRpZmljYXRpb24gQXV0
  80 +aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAgBJlFzYOw9sI
  81 +s9CsVw127c0n00ytUINh4qogTQktZAnczomfzD2p7PbPwdzx07HWezcoEStH2jnG
  82 +vDoZtF+mvX2do2NCtnbyqTsrkfjib9DsFiCQCT7i6HTJGLSR1GJk23+jBvGIGGqQ
  83 +Ijy8/hPwhxR79uQfjtTkUcYRZ0YIUcuGFFQ/vDP+fmyc/xadGL1RjjWmp2bIcmfb
  84 +IWax1Jt4A8BQOujM8Ny8nkz+rwWWNR9XWrf/zvk9tyy29lTdyOcSOk2uTIq3XJq0
  85 +tyA9yn8iNK5+O2hmAUTnAU5GU5szYPeUvlM3kHND8zLDU+/bqv50TmnHa4xgk97E
  86 +xwzf4TKuzJM7UXiVZ4vuPVb+DNBpDxsP8yUmazNt925H+nND5X4OpWaxKXwyhGNV
  87 +icQNwZNUMBkTrNN9N6frXTpsNVzbQdcS2qlJC9/YgIoJk2KOtWbPJYjNhLixP6Q5
  88 +D9kCnusSTJV882sFqV4Wg8y4Z+LoE53MW4LTTLPtW//e5XOsIzstAL81VXQJSdhJ
  89 +WBp/kjbmUZIO8yZ9HE0XvMnsQybQv0FfQKlERPSZ51eHnlAfV1SoPv10Yy+xUGUJ
  90 +5lhCLkMaTLTwJUdZ+gQek9QmRkpQgbLevni3/GcV4clXhB4PY9bpYrrWX1Uu6lzG
  91 +KAgEJTm4Diup8kyXHAc/DVL17e8vgg8CAwEAAaOB8jCB7zAfBgNVHSMEGDAWgBSg
  92 +EQojPpbxB+zirynvgqV/0DCktDAdBgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rID
  93 +ZsswDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0gBAowCDAG
  94 +BgRVHSAAMEMGA1UdHwQ8MDowOKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvY2EuY29t
  95 +L0FBQUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDQGCCsGAQUFBwEBBCgwJjAkBggr
  96 +BgEFBQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29tMA0GCSqGSIb3DQEBDAUA
  97 +A4IBAQAYh1HcdCE9nIrgJ7cz0C7M7PDmy14R3iJvm3WOnnL+5Nb+qh+cli3vA0p+
  98 +rvSNb3I8QzvAP+u431yqqcau8vzY7qN7Q/aGNnwU4M309z/+3ri0ivCRlv79Q2R+
  99 +/czSAaF9ffgZGclCKxO/WIu6pKJmBHaIkU4MiRTOok3JMrO66BQavHHxW/BBC5gA
  100 +CiIDEOUMsfnNkjcZ7Tvx5Dq2+UUTJnWvu6rvP3t3O9LEApE9GQDTF1w52z97GA1F
  101 +zZOFli9d31kWTz9RvdVFGD/tSo7oBmF0Ixa1DVBzJ0RHfxBdiSprhTEUxOipakyA
  102 +vGp4z7h/jnZymQyd/teRCBaho1+V
  103 +-----END CERTIFICATE-----
@@ -54,10 +54,16 @@ spec: @@ -54,10 +54,16 @@ spec:
54 env: 54 env:
55 - name: LOG_LEVEL 55 - name: LOG_LEVEL
56 value: "debug" 56 value: "debug"
  57 + - name: LOG_FRAMEWORK
  58 + value: "beego"
  59 + - name: LOG_TYPE
  60 + value: "file"
57 - name: ERROR_BASE_CODE 61 - name: ERROR_BASE_CODE
58 value: "1" 62 value: "1"
59 - name: ERROR_BASE_CODE_MULTIPLE 63 - name: ERROR_BASE_CODE_MULTIPLE
60 value: "1000" 64 value: "1000"
  65 + - name: ENABLE_KAFKA_LOG
  66 + value: "false"
61 - name: USER_MODULE_HOST 67 - name: USER_MODULE_HOST
62 value: "http://allied-creation-user-dev.fjmaimaimai.com" 68 value: "http://allied-creation-user-dev.fjmaimaimai.com"
63 - name: REDIS_HOST 69 - name: REDIS_HOST
@@ -61,8 +61,7 @@ spec: @@ -61,8 +61,7 @@ spec:
61 - name: LOG_FRAMEWORK 61 - name: LOG_FRAMEWORK
62 value: "beego" 62 value: "beego"
63 - name: LOG_TYPE 63 - name: LOG_TYPE
64 - value: "file"  
65 - - name: ERROR_BASE_CODE 64 + value: "file" - name: ERROR_BASE_CODE
66 value: "1" 65 value: "1"
67 - name: ERROR_BASE_CODE_MULTIPLE 66 - name: ERROR_BASE_CODE_MULTIPLE
68 value: "1000" 67 value: "1000"
@@ -13,15 +13,15 @@ require ( @@ -13,15 +13,15 @@ require (
13 github.com/google/go-querystring v1.1.0 // indirect 13 github.com/google/go-querystring v1.1.0 // indirect
14 github.com/gorilla/websocket v1.4.2 // indirect 14 github.com/gorilla/websocket v1.4.2 // indirect
15 github.com/imkira/go-interpol v1.1.0 // indirect 15 github.com/imkira/go-interpol v1.1.0 // indirect
16 - github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88 // indirect  
17 github.com/linmadan/egglib-go v0.0.0-20210527091316-06b0732fb5f6 16 github.com/linmadan/egglib-go v0.0.0-20210527091316-06b0732fb5f6
18 github.com/mattn/go-colorable v0.1.8 // indirect 17 github.com/mattn/go-colorable v0.1.8 // indirect
19 github.com/moul/http2curl v1.0.0 // indirect 18 github.com/moul/http2curl v1.0.0 // indirect
  19 + github.com/olivere/elastic/v7 v7.0.28
20 github.com/onsi/ginkgo v1.14.2 20 github.com/onsi/ginkgo v1.14.2
21 github.com/onsi/gomega v1.10.3 21 github.com/onsi/gomega v1.10.3
22 github.com/sergi/go-diff v1.2.0 // indirect 22 github.com/sergi/go-diff v1.2.0 // indirect
23 github.com/shopspring/decimal v1.2.0 23 github.com/shopspring/decimal v1.2.0
24 - github.com/sirupsen/logrus v1.8.1 // indirect 24 + github.com/sirupsen/logrus v1.8.1
25 github.com/smartystreets/goconvey v1.6.4 // indirect 25 github.com/smartystreets/goconvey v1.6.4 // indirect
26 github.com/valyala/fasthttp v1.28.0 // indirect 26 github.com/valyala/fasthttp v1.28.0 // indirect
27 github.com/xeipuuv/gojsonschema v1.2.0 // indirect 27 github.com/xeipuuv/gojsonschema v1.2.0 // indirect
@@ -29,4 +29,5 @@ require ( @@ -29,4 +29,5 @@ require (
29 github.com/yudai/gojsondiff v1.0.0 // indirect 29 github.com/yudai/gojsondiff v1.0.0 // indirect
30 github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 // indirect 30 github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 // indirect
31 github.com/yudai/pp v2.0.1+incompatible // indirect 31 github.com/yudai/pp v2.0.1+incompatible // indirect
  32 + gopkg.in/sohlich/elogrus.v7 v7.0.0
32 ) 33 )
1 cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= 1 cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
  2 +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
2 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= 3 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
3 github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= 4 github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
  5 +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
4 github.com/Shopify/sarama v1.25.0 h1:ch1ywjRLjfJtU+EaiJ+l0rWffQ6TRpyYmW4DX7Cb2SU= 6 github.com/Shopify/sarama v1.25.0 h1:ch1ywjRLjfJtU+EaiJ+l0rWffQ6TRpyYmW4DX7Cb2SU=
5 github.com/Shopify/sarama v1.25.0/go.mod h1:y/CFFTO9eaMTNriwu/Q+W4eioLqiDMGkA1W+gmdfj8w= 7 github.com/Shopify/sarama v1.25.0/go.mod h1:y/CFFTO9eaMTNriwu/Q+W4eioLqiDMGkA1W+gmdfj8w=
6 github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= 8 github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc=
@@ -15,6 +17,9 @@ github.com/alicebob/gopher-json v0.0.0-20180125190556-5a6b3ba71ee6/go.mod h1:SGn @@ -15,6 +17,9 @@ github.com/alicebob/gopher-json v0.0.0-20180125190556-5a6b3ba71ee6/go.mod h1:SGn
15 github.com/alicebob/miniredis v2.5.0+incompatible/go.mod h1:8HZjEj4yU0dwhYHky+DxYx+6BMjkBbe5ONFIF1MXffk= 17 github.com/alicebob/miniredis v2.5.0+incompatible/go.mod h1:8HZjEj4yU0dwhYHky+DxYx+6BMjkBbe5ONFIF1MXffk=
16 github.com/andybalholm/brotli v1.0.2 h1:JKnhI/XQ75uFBTiuzXpzFrUriDPiZjlOSzh6wXogP0E= 18 github.com/andybalholm/brotli v1.0.2 h1:JKnhI/XQ75uFBTiuzXpzFrUriDPiZjlOSzh6wXogP0E=
17 github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= 19 github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
  20 +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
  21 +github.com/aws/aws-sdk-go v1.19.6/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
  22 +github.com/aws/aws-sdk-go v1.40.32/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
18 github.com/beego/beego/v2 v2.0.1 h1:07a7Z0Ok5vbqyqh+q53sDPl9LdhKh0ZDy3gbyGrhFnE= 23 github.com/beego/beego/v2 v2.0.1 h1:07a7Z0Ok5vbqyqh+q53sDPl9LdhKh0ZDy3gbyGrhFnE=
19 github.com/beego/beego/v2 v2.0.1/go.mod h1:8zyHi1FnWO1mZLwTn62aKRIZF/aIKvkCBB2JYs+eqQI= 24 github.com/beego/beego/v2 v2.0.1/go.mod h1:8zyHi1FnWO1mZLwTn62aKRIZF/aIKvkCBB2JYs+eqQI=
20 github.com/beego/goyaml2 v0.0.0-20130207012346-5545475820dd/go.mod h1:1b+Y/CofkYwXMUU0OhQqGvsY2Bvgr4j6jfT699wyZKQ= 25 github.com/beego/goyaml2 v0.0.0-20130207012346-5545475820dd/go.mod h1:1b+Y/CofkYwXMUU0OhQqGvsY2Bvgr4j6jfT699wyZKQ=
@@ -30,6 +35,7 @@ github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+ @@ -30,6 +35,7 @@ github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+
30 github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= 35 github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
31 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= 36 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
32 github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80= 37 github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80=
  38 +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
33 github.com/coreos/etcd v3.3.25+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= 39 github.com/coreos/etcd v3.3.25+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
34 github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= 40 github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
35 github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= 41 github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
@@ -49,10 +55,13 @@ github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1 @@ -49,10 +55,13 @@ github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1
49 github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= 55 github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc=
50 github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= 56 github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
51 github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= 57 github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
  58 +github.com/elastic/go-elasticsearch/v6 v6.8.5 h1:U2HtkBseC1FNBmDr0TR2tKltL6FxoY+niDAlj5M8TK8=
52 github.com/elastic/go-elasticsearch/v6 v6.8.5/go.mod h1:UwaDJsD3rWLM5rKNFzv9hgox93HoX8utj1kxD9aFUcI= 59 github.com/elastic/go-elasticsearch/v6 v6.8.5/go.mod h1:UwaDJsD3rWLM5rKNFzv9hgox93HoX8utj1kxD9aFUcI=
53 github.com/elazarl/go-bindata-assetfs v1.0.0 h1:G/bYguwHIzWq9ZoyUQqrjTmJbbYn3j3CKKpKinvZLFk= 60 github.com/elazarl/go-bindata-assetfs v1.0.0 h1:G/bYguwHIzWq9ZoyUQqrjTmJbbYn3j3CKKpKinvZLFk=
54 github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4= 61 github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
  62 +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
55 github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= 63 github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
  64 +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
56 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= 65 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
57 github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072 h1:DddqAaWDpywytcG8w/qoQ5sAN8X12d3Z3koB0C3Rxsc= 66 github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072 h1:DddqAaWDpywytcG8w/qoQ5sAN8X12d3Z3koB0C3Rxsc=
58 github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= 67 github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8=
@@ -82,9 +91,12 @@ github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gG @@ -82,9 +91,12 @@ github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gG
82 github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= 91 github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
83 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= 92 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
84 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= 93 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
  94 +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
85 github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= 95 github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
86 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= 96 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
  97 +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
87 github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= 98 github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
  99 +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
88 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 100 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
89 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 101 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
90 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 102 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -109,21 +121,27 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw @@ -109,21 +121,27 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
109 github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 121 github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
110 github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 122 github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
111 github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 123 github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
112 -github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M= 124 +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
113 github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 125 github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
  126 +github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
  127 +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
114 github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= 128 github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
115 github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= 129 github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
116 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= 130 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
117 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= 131 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
118 -github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=  
119 github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 132 github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
  133 +github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
  134 +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
120 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= 135 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
121 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= 136 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
  137 +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
  138 +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
122 github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= 139 github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
123 github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= 140 github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
124 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= 141 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
125 github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= 142 github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE=
126 github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= 143 github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
  144 +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
127 github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= 145 github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
128 github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= 146 github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
129 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= 147 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
@@ -133,13 +151,16 @@ github.com/jcmturner/gofork v0.0.0-20190328161633-dc7c13fece03 h1:FUwcHNlEqkqLjL @@ -133,13 +151,16 @@ github.com/jcmturner/gofork v0.0.0-20190328161633-dc7c13fece03 h1:FUwcHNlEqkqLjL
133 github.com/jcmturner/gofork v0.0.0-20190328161633-dc7c13fece03/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= 151 github.com/jcmturner/gofork v0.0.0-20190328161633-dc7c13fece03/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o=
134 github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= 152 github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
135 github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= 153 github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
  154 +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
  155 +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
  156 +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
  157 +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
  158 +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
136 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= 159 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
137 github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= 160 github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
138 github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= 161 github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
139 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= 162 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
140 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= 163 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
141 -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88 h1:uC1QfSlInpQF+M0ao65imhwqKnz3Q2z/d8PWZRMQvDM=  
142 -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k=  
143 github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= 164 github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
144 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= 165 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
145 github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= 166 github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
@@ -158,6 +179,10 @@ github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= @@ -158,6 +179,10 @@ github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
158 github.com/linmadan/egglib-go v0.0.0-20210527091316-06b0732fb5f6 h1:nyhVnOIXsESuhZ95Ak6VRSF+0fHeKlYWq0EvHByt5RU= 179 github.com/linmadan/egglib-go v0.0.0-20210527091316-06b0732fb5f6 h1:nyhVnOIXsESuhZ95Ak6VRSF+0fHeKlYWq0EvHByt5RU=
159 github.com/linmadan/egglib-go v0.0.0-20210527091316-06b0732fb5f6/go.mod h1:ZZuSWicGxpgN0OulARhuKwFJuJ9we0otaPVAJtz10yk= 180 github.com/linmadan/egglib-go v0.0.0-20210527091316-06b0732fb5f6/go.mod h1:ZZuSWicGxpgN0OulARhuKwFJuJ9we0otaPVAJtz10yk=
160 github.com/magefile/mage v1.10.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= 181 github.com/magefile/mage v1.10.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A=
  182 +github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
  183 +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
  184 +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
  185 +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
161 github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= 186 github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=
162 github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= 187 github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
163 github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= 188 github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
@@ -179,21 +204,29 @@ github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWb @@ -179,21 +204,29 @@ github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWb
179 github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= 204 github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
180 github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= 205 github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
181 github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= 206 github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
  207 +github.com/olivere/elastic/v7 v7.0.4/go.mod h1:l4YWa59iTCcOJQXI5ZtxVjcd3p5U8GCxVgvzHZqGn3o=
  208 +github.com/olivere/elastic/v7 v7.0.28 h1:KAP4EuaEcvPJknRNkAAso1xeu0C1+/CeDQsxj9Cw9Fg=
  209 +github.com/olivere/elastic/v7 v7.0.28/go.mod h1:DzHQoqd6YqSuvF1lk/fR4cW4FNUNzSD5/F5MBm3GRMo=
182 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= 210 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
  211 +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
183 github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= 212 github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
184 github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= 213 github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg=
185 github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= 214 github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
186 github.com/onsi/ginkgo v1.14.2 h1:8mVmC9kjFFmA8H4pKMUhcblgifdkOIXPvbhN1T36q1M= 215 github.com/onsi/ginkgo v1.14.2 h1:8mVmC9kjFFmA8H4pKMUhcblgifdkOIXPvbhN1T36q1M=
187 github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= 216 github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
  217 +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
188 github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= 218 github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
189 github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= 219 github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
190 github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= 220 github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
191 github.com/onsi/gomega v1.10.3 h1:gph6h/qe9GSUw1NhH1gp+qb+h8rXD8Cy60Z32Qw3ELA= 221 github.com/onsi/gomega v1.10.3 h1:gph6h/qe9GSUw1NhH1gp+qb+h8rXD8Cy60Z32Qw3ELA=
192 github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= 222 github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc=
  223 +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
193 github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= 224 github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
  225 +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
194 github.com/pelletier/go-toml v1.0.1/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= 226 github.com/pelletier/go-toml v1.0.1/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
195 github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= 227 github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc=
196 github.com/peterh/liner v1.0.1-0.20171122030339-3681c2a91233/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= 228 github.com/peterh/liner v1.0.1-0.20171122030339-3681c2a91233/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc=
  229 +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
197 github.com/pierrec/lz4 v2.2.6+incompatible h1:6aCX4/YZ9v8q69hTyiR7dNLnTA3fgtKHVVW5BCd5Znw= 230 github.com/pierrec/lz4 v2.2.6+incompatible h1:6aCX4/YZ9v8q69hTyiR7dNLnTA3fgtKHVVW5BCd5Znw=
198 github.com/pierrec/lz4 v2.2.6+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= 231 github.com/pierrec/lz4 v2.2.6+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
199 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 232 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -203,18 +236,22 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE @@ -203,18 +236,22 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
203 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 236 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
204 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 237 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
205 github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= 238 github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
  239 +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
206 github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= 240 github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
207 github.com/prometheus/client_golang v1.7.0 h1:wCi7urQOGBsYcQROHqpUUX4ct84xp40t9R9JX0FuA/U= 241 github.com/prometheus/client_golang v1.7.0 h1:wCi7urQOGBsYcQROHqpUUX4ct84xp40t9R9JX0FuA/U=
208 github.com/prometheus/client_golang v1.7.0/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= 242 github.com/prometheus/client_golang v1.7.0/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
209 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= 243 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
  244 +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
210 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= 245 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
211 github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= 246 github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
212 github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= 247 github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
213 github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= 248 github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
  249 +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
214 github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= 250 github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
215 github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc= 251 github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc=
216 github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= 252 github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
217 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= 253 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
  254 +github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
218 github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= 255 github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
219 github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8= 256 github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8=
220 github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= 257 github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
@@ -235,10 +272,13 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd @@ -235,10 +272,13 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd
235 github.com/sirupsen/logrus v1.8.0/go.mod h1:4GuYW9TZmE769R5STWrRakJc4UqQ3+QQ95fyz7ENv1A= 272 github.com/sirupsen/logrus v1.8.0/go.mod h1:4GuYW9TZmE769R5STWrRakJc4UqQ3+QQ95fyz7ENv1A=
236 github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= 273 github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
237 github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= 274 github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
238 -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=  
239 github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= 275 github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
  276 +github.com/smartystreets/assertions v1.1.1 h1:T/YLemO5Yp7KPzS+lVtu+WsHn8yoSwTfItdAd1r3cck=
  277 +github.com/smartystreets/assertions v1.1.1/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
  278 +github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM=
240 github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= 279 github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
241 github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= 280 github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
  281 +github.com/smartystreets/gunit v1.4.2/go.mod h1:ZjM1ozSIMJlAz/ay4SG8PeKF00ckUp+zMHZXV9/bvak=
242 github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE= 282 github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE=
243 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 283 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
244 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 284 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -287,6 +327,8 @@ github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZ @@ -287,6 +327,8 @@ github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZ
287 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 327 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
288 github.com/yuin/gopher-lua v0.0.0-20171031051903-609c9cd26973/go.mod h1:aEV29XrmTYFr3CiRxZeGHpkvbwq+prZduBqMaascyCU= 328 github.com/yuin/gopher-lua v0.0.0-20171031051903-609c9cd26973/go.mod h1:aEV29XrmTYFr3CiRxZeGHpkvbwq+prZduBqMaascyCU=
289 go.etcd.io/etcd v3.3.25+incompatible/go.mod h1:yaeTdrJi5lOmYerz05bd8+V7KubZs8YSFZfzsF9A6aI= 329 go.etcd.io/etcd v3.3.25+incompatible/go.mod h1:yaeTdrJi5lOmYerz05bd8+V7KubZs8YSFZfzsF9A6aI=
  330 +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
  331 +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
290 go.opentelemetry.io/otel v0.17.0 h1:6MKOu8WY4hmfpQ4oQn34u6rYhnf2sWf1LXYO/UFm71U= 332 go.opentelemetry.io/otel v0.17.0 h1:6MKOu8WY4hmfpQ4oQn34u6rYhnf2sWf1LXYO/UFm71U=
291 go.opentelemetry.io/otel v0.17.0/go.mod h1:Oqtdxmf7UtEvL037ohlgnaYa1h7GtMh0NcSd9eqkC9s= 333 go.opentelemetry.io/otel v0.17.0/go.mod h1:Oqtdxmf7UtEvL037ohlgnaYa1h7GtMh0NcSd9eqkC9s=
292 go.opentelemetry.io/otel/metric v0.17.0 h1:t+5EioN8YFXQ2EH+1j6FHCKMUj+57zIDSnSGr/mWuug= 334 go.opentelemetry.io/otel/metric v0.17.0 h1:t+5EioN8YFXQ2EH+1j6FHCKMUj+57zIDSnSGr/mWuug=
@@ -312,6 +354,7 @@ golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5 @@ -312,6 +354,7 @@ golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5
312 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= 354 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
313 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 355 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
314 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= 356 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
  357 +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
315 golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= 358 golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
316 golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= 359 golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
317 golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= 360 golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
@@ -323,6 +366,8 @@ golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73r @@ -323,6 +366,8 @@ golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73r
323 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 366 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
324 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 367 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
325 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 368 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
  369 +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
  370 +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
326 golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 371 golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
327 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 372 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
328 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 373 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
@@ -334,12 +379,15 @@ golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwY @@ -334,12 +379,15 @@ golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwY
334 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 379 golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
335 golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 380 golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
336 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 381 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
337 -golang.org/x/net v0.0.0-20210510120150-4163338589ed h1:p9UgmWI9wKpfYmgaV/IZKGdXc5qEK45tDwwwDyjS26I=  
338 golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 382 golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
  383 +golang.org/x/net v0.0.0-20210614182718-04defd469f4e h1:XpT3nA5TvE525Ne3hInMh6+GETgn27Zfm9dxsThnX2Q=
  384 +golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
339 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= 385 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
  386 +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
340 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 387 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
341 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 388 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
342 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 389 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
  390 +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
343 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 391 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
344 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 392 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
345 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 393 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -347,6 +395,7 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h @@ -347,6 +395,7 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h
347 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 395 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
348 golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 396 golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
349 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 397 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
  398 +golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
350 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 399 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
351 golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 400 golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
352 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 401 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -375,11 +424,13 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -375,11 +424,13 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
375 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 424 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
376 golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= 425 golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M=
377 golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 426 golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
  427 +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
378 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 428 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
379 golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 429 golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
380 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 430 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
381 golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= 431 golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
382 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= 432 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
  433 +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
383 golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= 434 golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
384 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= 435 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
385 golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 436 golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
@@ -395,15 +446,20 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T @@ -395,15 +446,20 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T
395 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 446 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
396 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= 447 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
397 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 448 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
  449 +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
398 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= 450 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
399 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= 451 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
400 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= 452 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
  453 +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
401 google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= 454 google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
402 google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= 455 google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
  456 +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
403 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= 457 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
404 google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= 458 google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
  459 +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
405 google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= 460 google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
406 google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= 461 google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
  462 +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
407 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= 463 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
408 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= 464 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
409 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= 465 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -433,6 +489,8 @@ gopkg.in/jcmturner/gokrb5.v7 v7.2.3/go.mod h1:l8VISx+WGYp+Fp7KRbsiUuXTTOnxIc3Tuv @@ -433,6 +489,8 @@ gopkg.in/jcmturner/gokrb5.v7 v7.2.3/go.mod h1:l8VISx+WGYp+Fp7KRbsiUuXTTOnxIc3Tuv
433 gopkg.in/jcmturner/rpc.v1 v1.1.0 h1:QHIUxTX1ISuAv9dD2wJ9HWQVuWDX/Zc0PfeC2tjc4rU= 489 gopkg.in/jcmturner/rpc.v1 v1.1.0 h1:QHIUxTX1ISuAv9dD2wJ9HWQVuWDX/Zc0PfeC2tjc4rU=
434 gopkg.in/jcmturner/rpc.v1 v1.1.0/go.mod h1:YIdkC4XfD6GXbzje11McwsDuOlZQSb9W4vfLvuNnlv8= 490 gopkg.in/jcmturner/rpc.v1 v1.1.0/go.mod h1:YIdkC4XfD6GXbzje11McwsDuOlZQSb9W4vfLvuNnlv8=
435 gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= 491 gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
  492 +gopkg.in/sohlich/elogrus.v7 v7.0.0 h1:w4pw1DTXK/bqliKbcJk7hSXKrMM/jPdvpaROC9WSK+8=
  493 +gopkg.in/sohlich/elogrus.v7 v7.0.0/go.mod h1:nGmb0kLyAPGwIHLpHNlMlz0l0OfSaFatKgfpuO/+fnY=
436 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= 494 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
437 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= 495 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
438 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 496 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
@@ -444,6 +502,7 @@ gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= @@ -444,6 +502,7 @@ gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
444 gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 502 gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
445 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= 503 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
446 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 504 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
  505 +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
447 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 506 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
448 honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 507 honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
449 honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= 508 honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
1 package main 1 package main
2 2
3 import ( 3 import (
  4 + "fmt"
4 "github.com/beego/beego/v2/server/web" 5 "github.com/beego/beego/v2/server/web"
  6 + "github.com/linmadan/egglib-go/log/logrus"
  7 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/constant"
  8 + _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/constant"
5 _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/pg" 9 _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/pg"
  10 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/log"
  11 + _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/log"
6 _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/port/beego" 12 _ "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/port/beego"
7 ) 13 )
8 14
9 func main() { 15 func main() {
10 // web主服务 16 // web主服务
  17 + if constant.ENABLE_KAFKA_LOG {
  18 + w, err := logrus.NewKafkaWriter(constant.KAFKA_HOSTS, constant.TOPIC_LOG_STASH, false)
  19 + if err != nil {
  20 + log.Logger.Error(err.Error())
  21 + }
  22 + log.Logger.AddHook(w)
  23 + }
  24 +
  25 + fmt.Printf("Server running at:%d\n", web.BConfig.Listen.HTTPPort)
  26 +
11 web.Run() 27 web.Run()
12 } 28 }
不能预览此文件类型
@@ -10,15 +10,15 @@ import ( @@ -10,15 +10,15 @@ import (
10 10
11 type ApplyForCooperationCommand struct { 11 type ApplyForCooperationCommand struct {
12 // 共创申请描述附件 12 // 共创申请描述附件
13 - CooperationApplicationAttachment []*domain.Attachment `cname:"共创申请描述附件" json:"cooperationApplicationAttachment" valid:"Required"` 13 + CooperationApplicationAttachment []*domain.Attachment `cname:"共创申请描述附件" json:"cooperationApplicationAttachment"`
14 // 共创申请描述 14 // 共创申请描述
15 CooperationApplicationDescription string `cname:"共创申请描述" json:"cooperationApplicationDescription,omitempty"` 15 CooperationApplicationDescription string `cname:"共创申请描述" json:"cooperationApplicationDescription,omitempty"`
16 // 申请人ID 16 // 申请人ID
17 - UserId int64 `cname:"申请人ID" json:"userId" valid:"Required"` 17 + UserId int64 `cname:"申请人ID" json:"userId"`
18 // 用户基本id 18 // 用户基本id
19 - UserBaseId int64 `cname:"用户基本数据ID" json:"userBaseId" valid:"Required"` 19 + UserBaseId int64 `cname:"用户基本数据ID" json:"userBaseId"`
20 // 组织机构ID 20 // 组织机构ID
21 - OrgId int64 `cname:"组织机构ID" json:"orgId" valid:"Required"` 21 + OrgId int64 `cname:"组织机构ID" json:"orgId"`
22 // 公司ID,通过集成REST上下文获取 22 // 公司ID,通过集成REST上下文获取
23 CompanyId int64 `cname:"公司ID" json:"companyId"` 23 CompanyId int64 `cname:"公司ID" json:"companyId"`
24 // 共创项目ID 24 // 共创项目ID
@@ -26,7 +26,6 @@ type ApplyForCooperationCommand struct { @@ -26,7 +26,6 @@ type ApplyForCooperationCommand struct {
26 } 26 }
27 27
28 func (applyForCooperationCommand *ApplyForCooperationCommand) Valid(validation *validation.Validation) { 28 func (applyForCooperationCommand *ApplyForCooperationCommand) Valid(validation *validation.Validation) {
29 - //validation.SetError("CustomValid", "未实现的自定义认证")  
30 } 29 }
31 30
32 func (applyForCooperationCommand *ApplyForCooperationCommand) ValidateCommand() error { 31 func (applyForCooperationCommand *ApplyForCooperationCommand) ValidateCommand() error {
@@ -98,7 +98,11 @@ func (data *CooperationApplicationDto) LoadDto(a *domain.CooperationApplication) @@ -98,7 +98,11 @@ func (data *CooperationApplicationDto) LoadDto(a *domain.CooperationApplication)
98 data.CooperationApplyTime = a.CooperationApplyTime.Unix() * 1000 98 data.CooperationApplyTime = a.CooperationApplyTime.Unix() * 1000
99 data.CooperationProject = data.LoadCooperationProject(a.CooperationProject) 99 data.CooperationProject = data.LoadCooperationProject(a.CooperationProject)
100 data.Org = data.LoadOrg(a.Org) 100 data.Org = data.LoadOrg(a.Org)
101 - data.IsCanceled = a.IsCanceled 101 + if a.IsCanceled == 1 {
  102 + data.IsCanceled = false
  103 + } else {
  104 + data.IsCanceled = true
  105 + }
102 data.Company = data.LoadCompany(a.Company) 106 data.Company = data.LoadCompany(a.Company)
103 } 107 }
104 108
@@ -17,6 +17,8 @@ type SearchCooperationApplicationQuery struct { @@ -17,6 +17,8 @@ type SearchCooperationApplicationQuery struct {
17 ApplicantName string `cname:"申请人姓名" json:"applicantName,omitempty"` 17 ApplicantName string `cname:"申请人姓名" json:"applicantName,omitempty"`
18 // 共创申请审核状态,1待审核,2已同意,3已拒绝 18 // 共创申请审核状态,1待审核,2已同意,3已拒绝
19 CooperationApplicationStatus int32 `cname:"共创申请审核状态" json:"cooperationApplicationStatus,omitempty"` 19 CooperationApplicationStatus int32 `cname:"共创申请审核状态" json:"cooperationApplicationStatus,omitempty"`
  20 + // 是否被取消标记 1正常,2取消,3所有
  21 + IsCanceled int32 `cname:"取消状态" json:"isCanceled,omitempty"`
20 // 页面大小 22 // 页面大小
21 PageSize int64 `cname:"页面大小" json:"pageSize,omitempty"` 23 PageSize int64 `cname:"页面大小" json:"pageSize,omitempty"`
22 // 页面大小 24 // 页面大小
@@ -10,6 +10,7 @@ import ( @@ -10,6 +10,7 @@ import (
10 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/application/factory" 10 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/application/factory"
11 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain" 11 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain"
12 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain/service" 12 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain/service"
  13 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/dao"
13 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/utils" 14 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/utils"
14 "strconv" 15 "strconv"
15 "time" 16 "time"
@@ -45,15 +46,6 @@ func (cooperationApplicationService *CooperationApplicationService) ApplyForCoop @@ -45,15 +46,6 @@ func (cooperationApplicationService *CooperationApplicationService) ApplyForCoop
45 cooperationProjectRepository = value 46 cooperationProjectRepository = value
46 } 47 }
47 48
48 - // 获取共创项目  
49 - cooperationProject, err := cooperationProjectRepository.FindOne(map[string]interface{}{"cooperationProjectId": applyForCooperationCommand.CooperationProjectId})  
50 - if err != nil {  
51 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "共创项目不存在")  
52 - }  
53 - if cooperationProject == nil {  
54 - return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", strconv.FormatInt(applyForCooperationCommand.CooperationProjectId, 10)))  
55 - }  
56 -  
57 // 用户REST服务初始化 49 // 用户REST服务初始化
58 var userService service.UserService 50 var userService service.UserService
59 if value, err := factory.CreateUserService(map[string]interface{}{}); err != nil { 51 if value, err := factory.CreateUserService(map[string]interface{}{}); err != nil {
@@ -62,14 +54,6 @@ func (cooperationApplicationService *CooperationApplicationService) ApplyForCoop @@ -62,14 +54,6 @@ func (cooperationApplicationService *CooperationApplicationService) ApplyForCoop
62 userService = value 54 userService = value
63 } 55 }
64 56
65 - // 获取申请人  
66 - var applicant *domain.User  
67 - if data, err := userService.UserFrom(applyForCooperationCommand.CompanyId, applyForCooperationCommand.OrgId, applyForCooperationCommand.UserId); err != nil {  
68 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取申请人失败")  
69 - } else {  
70 - applicant = data  
71 - }  
72 -  
73 // 公司REST服务初始化 57 // 公司REST服务初始化
74 var companyService service.CompanyService 58 var companyService service.CompanyService
75 if value, err := factory.CreateCompanyService(map[string]interface{}{}); err != nil { 59 if value, err := factory.CreateCompanyService(map[string]interface{}{}); err != nil {
@@ -78,14 +62,6 @@ func (cooperationApplicationService *CooperationApplicationService) ApplyForCoop @@ -78,14 +62,6 @@ func (cooperationApplicationService *CooperationApplicationService) ApplyForCoop
78 companyService = value 62 companyService = value
79 } 63 }
80 64
81 - // 获取公司信息  
82 - var company *domain.Company  
83 - if data, err := companyService.CompanyFrom(applyForCooperationCommand.CompanyId); err != nil {  
84 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取公司信息失败")  
85 - } else {  
86 - company = data  
87 - }  
88 -  
89 // 组织机构REST服务初始化 65 // 组织机构REST服务初始化
90 var organizationService service.OrgService 66 var organizationService service.OrgService
91 if value, err := factory.CreateOrganizationService(map[string]interface{}{}); err != nil { 67 if value, err := factory.CreateOrganizationService(map[string]interface{}{}); err != nil {
@@ -94,32 +70,7 @@ func (cooperationApplicationService *CooperationApplicationService) ApplyForCoop @@ -94,32 +70,7 @@ func (cooperationApplicationService *CooperationApplicationService) ApplyForCoop
94 organizationService = value 70 organizationService = value
95 } 71 }
96 72
97 - // 获取组织机构信息  
98 - var organization *domain.Org  
99 - if data, err := organizationService.OrgFrom(applyForCooperationCommand.CompanyId, applyForCooperationCommand.OrgId); err != nil {  
100 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取组织机构数据失败")  
101 - } else {  
102 - organization = data  
103 - }  
104 -  
105 - newCooperationApplication := &domain.CooperationApplication{  
106 - CooperationApplicationApplicant: applicant,  
107 - CooperationApplicationAttachment: applyForCooperationCommand.CooperationApplicationAttachment,  
108 - CooperationApplicationDescription: applyForCooperationCommand.CooperationApplicationDescription,  
109 - CooperationApplicationStatus: 1,  
110 - CooperationApplicationVerifier: nil,  
111 - CooperationApplicationVerifyDescription: "",  
112 - CooperationApplicationVerifyTime: time.Time{},  
113 - CooperationApplyTime: time.Now(),  
114 - CooperationProject: cooperationProject,  
115 - Org: organization,  
116 - IsCanceled: false,  
117 - Company: company,  
118 - CreatedAt: time.Now(),  
119 - DeletedAt: time.Time{},  
120 - UpdatedAt: time.Time{},  
121 - }  
122 - 73 + // 共创申请仓储初始化
123 var cooperationApplicationRepository domain.CooperationApplicationRepository 74 var cooperationApplicationRepository domain.CooperationApplicationRepository
124 if value, err := factory.CreateCooperationApplicationRepository(map[string]interface{}{ 75 if value, err := factory.CreateCooperationApplicationRepository(map[string]interface{}{
125 "transactionContext": transactionContext, 76 "transactionContext": transactionContext,
@@ -128,9 +79,141 @@ func (cooperationApplicationService *CooperationApplicationService) ApplyForCoop @@ -128,9 +79,141 @@ func (cooperationApplicationService *CooperationApplicationService) ApplyForCoop
128 } else { 79 } else {
129 cooperationApplicationRepository = value 80 cooperationApplicationRepository = value
130 } 81 }
  82 +
  83 + // 共创申请DAO初始化
  84 + var cooperationApplicationDao *dao.CooperationApplicationDao
  85 + if value, err := factory.CreateCooperationApplicationDao(map[string]interface{}{
  86 + "transactionContext": transactionContext,
  87 + }); err != nil {
  88 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  89 + } else {
  90 + cooperationApplicationDao = value
  91 + }
  92 +
  93 + // 获取共创项目
  94 + cooperationProject, err := cooperationProjectRepository.FindOne(map[string]interface{}{"cooperationProjectId": applyForCooperationCommand.CooperationProjectId})
  95 + if err != nil {
  96 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "共创项目不存在")
  97 + }
  98 + if cooperationProject == nil {
  99 + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", strconv.FormatInt(applyForCooperationCommand.CooperationProjectId, 10)))
  100 + }
  101 +
  102 + var newCooperationApplication *domain.CooperationApplication
  103 +
  104 + if applyForCooperationCommand.CompanyId == 0 && applyForCooperationCommand.OrgId == 0 && applyForCooperationCommand.UserId == 0 && applyForCooperationCommand.UserBaseId != 0 { // 游客操作
  105 + // 获取申请人信息
  106 + var applicant *domain.User
  107 + if data, err := userService.VisitorFrom(applyForCooperationCommand.CompanyId, applyForCooperationCommand.OrgId, applyForCooperationCommand.UserBaseId); err != nil {
  108 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取申请人失败")
  109 + } else {
  110 + applicant = data
  111 + }
  112 +
  113 + // 校验:同一个用户,不能多次申请同一个项目
  114 + applicationExist, _ := cooperationApplicationDao.CheckApplicationExist(map[string]interface{}{
  115 + "visitorUserBaseId": applicant.UserBaseId,
  116 + "companyId": cooperationProject.Company.CompanyId,
  117 + "orgId": cooperationProject.Org.OrgId,
  118 + "cooperationProjectNumber": cooperationProject.CooperationProjectNumber,
  119 + })
  120 + if applicationExist {
  121 + return nil, application.ThrowError(application.TRANSACTION_ERROR, "抱歉,您已经申请过该项目")
  122 + }
  123 +
  124 + // 校验:判断用户类型是否属于承接对象
  125 + if !utils.IsContain(cooperationProject.CooperationProjectUndertakerTypes, 4) { // 非公开类型校验
  126 + if !utils.IsContain(cooperationProject.CooperationProjectUndertakerTypes, applicant.UserType) {
  127 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "抱歉,您不属于当前项目的承接对象")
  128 + }
  129 + }
  130 +
  131 + newCooperationApplication = &domain.CooperationApplication{
  132 + CooperationApplicationApplicant: applicant,
  133 + CooperationApplicationAttachment: applyForCooperationCommand.CooperationApplicationAttachment,
  134 + CooperationApplicationDescription: applyForCooperationCommand.CooperationApplicationDescription,
  135 + CooperationApplicationStatus: 1,
  136 + CooperationApplicationVerifier: nil,
  137 + CooperationApplicationVerifyDescription: "",
  138 + CooperationApplicationVerifyTime: time.Time{},
  139 + CooperationApplyTime: time.Now(),
  140 + CooperationProject: cooperationProject,
  141 + Org: cooperationProject.Org,
  142 + IsCanceled: 1,
  143 + Company: cooperationProject.Company,
  144 + CreatedAt: time.Now(),
  145 + DeletedAt: time.Time{},
  146 + UpdatedAt: time.Time{},
  147 + }
  148 + } else {
  149 + // 获取申请人
  150 + var applicant *domain.User
  151 + if data, err := userService.UserFrom(applyForCooperationCommand.CompanyId, applyForCooperationCommand.OrgId, applyForCooperationCommand.UserId); err != nil {
  152 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取申请人失败")
  153 + } else {
  154 + applicant = data
  155 + }
  156 +
  157 + // 获取公司信息
  158 + var company *domain.Company
  159 + if data, err := companyService.CompanyFrom(applyForCooperationCommand.CompanyId); err != nil {
  160 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取公司信息失败")
  161 + } else {
  162 + company = data
  163 + }
  164 +
  165 + // 获取组织机构信息
  166 + var organization *domain.Org
  167 + if data, err := organizationService.OrgFrom(applyForCooperationCommand.CompanyId, applyForCooperationCommand.OrgId); err != nil {
  168 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取组织机构数据失败")
  169 + } else {
  170 + organization = data
  171 + }
  172 +
  173 + // 校验:同一个用户,不能多次申请同一个项目
  174 + applicationExist, _ := cooperationApplicationDao.CheckApplicationExist(map[string]interface{}{
  175 + "companyId": applyForCooperationCommand.CompanyId,
  176 + "orgId": applyForCooperationCommand.OrgId,
  177 + "applicantId": applicant.UserId,
  178 + "cooperationProjectNumber": cooperationProject.CooperationProjectNumber,
  179 + })
  180 + if applicationExist {
  181 + return nil, application.ThrowError(application.TRANSACTION_ERROR, "抱歉,您已经申请过该项目")
  182 + }
  183 +
  184 + // 校验:判断用户类型是否属于承接对象
  185 + if !utils.IsContain(cooperationProject.CooperationProjectUndertakerTypes, applicant.UserType) {
  186 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "抱歉,您不属于当前项目的承接对象")
  187 + }
  188 +
  189 + newCooperationApplication = &domain.CooperationApplication{
  190 + CooperationApplicationApplicant: applicant,
  191 + CooperationApplicationAttachment: applyForCooperationCommand.CooperationApplicationAttachment,
  192 + CooperationApplicationDescription: applyForCooperationCommand.CooperationApplicationDescription,
  193 + CooperationApplicationStatus: 1,
  194 + CooperationApplicationVerifier: nil,
  195 + CooperationApplicationVerifyDescription: "",
  196 + CooperationApplicationVerifyTime: time.Time{},
  197 + CooperationApplyTime: time.Now(),
  198 + CooperationProject: cooperationProject,
  199 + Org: organization,
  200 + IsCanceled: 1,
  201 + Company: company,
  202 + CreatedAt: time.Now(),
  203 + DeletedAt: time.Time{},
  204 + UpdatedAt: time.Time{},
  205 + }
  206 + }
  207 +
  208 + // 保存共创申请
131 if cooperationApplication, err := cooperationApplicationRepository.Save(newCooperationApplication); err != nil { 209 if cooperationApplication, err := cooperationApplicationRepository.Save(newCooperationApplication); err != nil {
132 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 210 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
133 } else { 211 } else {
  212 + // 更新共创项目申请人计数
  213 + cooperationProject.ApplicantCount = cooperationProject.ApplicantCount + 1
  214 + if _, err := cooperationProjectRepository.Save(cooperationProject); err != nil {
  215 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  216 + }
134 if err := transactionContext.CommitTransaction(); err != nil { 217 if err := transactionContext.CommitTransaction(); err != nil {
135 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 218 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
136 } 219 }
@@ -195,6 +278,11 @@ func (cooperationApplicationService *CooperationApplicationService) ApprovalCoop @@ -195,6 +278,11 @@ func (cooperationApplicationService *CooperationApplicationService) ApprovalCoop
195 return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", strconv.FormatInt(cooperationApplicationId, 10))) 278 return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", strconv.FormatInt(cooperationApplicationId, 10)))
196 } 279 }
197 280
  281 + // 校验共创申请是否已经审核过
  282 + if cooperationApplication.CooperationApplicationStatus != 1 {
  283 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "改申请已经审核过")
  284 + }
  285 +
198 if approvalCooperationApplicationCommand.Action == 1 { 286 if approvalCooperationApplicationCommand.Action == 1 {
199 cooperationApplication.CooperationApplicationStatus = 2 287 cooperationApplication.CooperationApplicationStatus = 2
200 } else if approvalCooperationApplicationCommand.Action == 2 { 288 } else if approvalCooperationApplicationCommand.Action == 2 {
@@ -272,7 +360,12 @@ func (cooperationApplicationService *CooperationApplicationService) BatchApprova @@ -272,7 +360,12 @@ func (cooperationApplicationService *CooperationApplicationService) BatchApprova
272 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 360 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
273 } else { 361 } else {
274 if count > 0 { 362 if count > 0 {
275 - for i, _ := range cooperationApplications { 363 + for i, cooperationApplication := range cooperationApplications {
  364 + // 校验共创申请是否已经审核过
  365 + if cooperationApplication.CooperationApplicationStatus != 1 {
  366 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "改申请已经审核过")
  367 + }
  368 + // 更新共创申请数据
276 cooperationApplications[i].CooperationApplicationVerifyDescription = batchApprovalCooperationApplicationCommand.CooperationApplicationVerifyDescription 369 cooperationApplications[i].CooperationApplicationVerifyDescription = batchApprovalCooperationApplicationCommand.CooperationApplicationVerifyDescription
277 if batchApprovalCooperationApplicationCommand.Action == 1 { // 同意 370 if batchApprovalCooperationApplicationCommand.Action == 1 { // 同意
278 cooperationApplications[i].CooperationApplicationStatus = 2 371 cooperationApplications[i].CooperationApplicationStatus = 2
@@ -281,6 +374,7 @@ func (cooperationApplicationService *CooperationApplicationService) BatchApprova @@ -281,6 +374,7 @@ func (cooperationApplicationService *CooperationApplicationService) BatchApprova
281 } 374 }
282 cooperationApplications[i].CooperationApplicationVerifier = verifier 375 cooperationApplications[i].CooperationApplicationVerifier = verifier
283 cooperationApplications[i].CooperationApplicationVerifyTime = time.Now() 376 cooperationApplications[i].CooperationApplicationVerifyTime = time.Now()
  377 + cooperationApplications[i].IsCanceled = 1
284 } 378 }
285 cooperationApplicationsApproved, err := cooperationApplicationRepository.UpdateMany(cooperationApplications) 379 cooperationApplicationsApproved, err := cooperationApplicationRepository.UpdateMany(cooperationApplications)
286 if err != nil { 380 if err != nil {
@@ -346,7 +440,12 @@ func (cooperationApplicationService *CooperationApplicationService) OneClickAppr @@ -346,7 +440,12 @@ func (cooperationApplicationService *CooperationApplicationService) OneClickAppr
346 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 440 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
347 } else { 441 } else {
348 if count > 0 { 442 if count > 0 {
349 - for i, _ := range cooperationApplications { 443 + for i, cooperationApplication := range cooperationApplications {
  444 + // 校验共创申请是否已经审核过
  445 + if cooperationApplication.CooperationApplicationStatus != 1 {
  446 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "改申请已经审核过")
  447 + }
  448 + // 更新共创申请
350 if oneClickApprovalCooperationApplicationCommand.Action == 1 { 449 if oneClickApprovalCooperationApplicationCommand.Action == 1 {
351 cooperationApplications[i].CooperationApplicationStatus = 2 450 cooperationApplications[i].CooperationApplicationStatus = 2
352 } else if oneClickApprovalCooperationApplicationCommand.Action == 2 { 451 } else if oneClickApprovalCooperationApplicationCommand.Action == 2 {
@@ -463,7 +562,7 @@ func (cooperationApplicationService *CooperationApplicationService) CreateCooper @@ -463,7 +562,7 @@ func (cooperationApplicationService *CooperationApplicationService) CreateCooper
463 CooperationApplyTime: time.Now(), 562 CooperationApplyTime: time.Now(),
464 CooperationProject: cooperationProject, 563 CooperationProject: cooperationProject,
465 Org: organization, 564 Org: organization,
466 - IsCanceled: false, 565 + IsCanceled: 1,
467 Company: company, 566 Company: company,
468 CreatedAt: time.Now(), 567 CreatedAt: time.Now(),
469 DeletedAt: time.Time{}, 568 DeletedAt: time.Time{},
@@ -551,6 +650,7 @@ func (cooperationApplicationService *CooperationApplicationService) ListCooperat @@ -551,6 +650,7 @@ func (cooperationApplicationService *CooperationApplicationService) ListCooperat
551 } else { 650 } else {
552 cooperationApplicationRepository = value 651 cooperationApplicationRepository = value
553 } 652 }
  653 + // 获取共创申请
554 if count, cooperationApplications, err := cooperationApplicationRepository.Find(tool_funs.SimpleStructToMap(listCooperationApplicationQuery)); err != nil { 654 if count, cooperationApplications, err := cooperationApplicationRepository.Find(tool_funs.SimpleStructToMap(listCooperationApplicationQuery)); err != nil {
555 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 655 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
556 } else { 656 } else {
@@ -709,8 +809,19 @@ func (cooperationApplicationService *CooperationApplicationService) CancelCooper @@ -709,8 +809,19 @@ func (cooperationApplicationService *CooperationApplicationService) CancelCooper
709 defer func() { 809 defer func() {
710 _ = transactionContext.RollbackTransaction() 810 _ = transactionContext.RollbackTransaction()
711 }() 811 }()
  812 +
712 //TODO 校验用户菜单模块权限 813 //TODO 校验用户菜单模块权限
713 814
  815 + // 共创项目仓储初始化
  816 + var cooperationProjectRepository domain.CooperationProjectRepository
  817 + if value, err := factory.CreateCooperationProjectRepository(map[string]interface{}{
  818 + "transactionContext": transactionContext,
  819 + }); err != nil {
  820 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  821 + } else {
  822 + cooperationProjectRepository = value
  823 + }
  824 +
714 // 共创申请仓储初始化 825 // 共创申请仓储初始化
715 var cooperationApplicationRepository domain.CooperationApplicationRepository 826 var cooperationApplicationRepository domain.CooperationApplicationRepository
716 if value, err := factory.CreateCooperationApplicationRepository(map[string]interface{}{ 827 if value, err := factory.CreateCooperationApplicationRepository(map[string]interface{}{
@@ -732,17 +843,30 @@ func (cooperationApplicationService *CooperationApplicationService) CancelCooper @@ -732,17 +843,30 @@ func (cooperationApplicationService *CooperationApplicationService) CancelCooper
732 return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", strconv.FormatInt(cooperationApplicationId, 10))) 843 return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", strconv.FormatInt(cooperationApplicationId, 10)))
733 } 844 }
734 if err := cooperationApplication.Update(map[string]interface{}{ 845 if err := cooperationApplication.Update(map[string]interface{}{
735 - "isCanceled": true, 846 + "isCanceled": int32(2),
736 }); err != nil { 847 }); err != nil {
737 return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error()) 848 return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
738 } 849 }
739 - if cooperationApplication, err := cooperationApplicationRepository.Save(cooperationApplication); err != nil { 850 + if cooperationApplicationSaved, err := cooperationApplicationRepository.Save(cooperationApplication); err != nil {
740 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 851 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
741 } else { 852 } else {
  853 + // 获取共创项目
  854 + cooperationProject, err := cooperationProjectRepository.FindOne(map[string]interface{}{"cooperationProjectId": cooperationApplicationSaved.CooperationProject.CooperationProjectId})
  855 + if err != nil {
  856 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "共创项目不存在")
  857 + }
  858 + if cooperationProject == nil {
  859 + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("共创项目%s不存在", strconv.FormatInt(cooperationApplicationSaved.CooperationProject.CooperationProjectId, 10)))
  860 + }
  861 + // 更新共创项目申请统计
  862 + cooperationProject.ApplicantCount = cooperationProject.ApplicantCount - 1
  863 + if _, err := cooperationProjectRepository.Save(cooperationProject); err != nil {
  864 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  865 + }
742 if err := transactionContext.CommitTransaction(); err != nil { 866 if err := transactionContext.CommitTransaction(); err != nil {
743 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 867 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
744 } 868 }
745 - return cooperationApplication, nil 869 + return cooperationApplicationSaved, nil
746 } 870 }
747 } 871 }
748 872
@@ -18,6 +18,10 @@ type CooperationContractByUndertakerDto struct { @@ -18,6 +18,10 @@ type CooperationContractByUndertakerDto struct {
18 CooperationContractNumber string `json:"cooperationContractNumber"` 18 CooperationContractNumber string `json:"cooperationContractNumber"`
19 // 项目合约名称 19 // 项目合约名称
20 CooperationContractName string `json:"cooperationContractName"` 20 CooperationContractName string `json:"cooperationContractName"`
  21 + // 项目合约状态
  22 + CooperationContractStatus int32 `json:"cooperationContractStatus"`
  23 + // 共创描述
  24 + CooperationContractDescription string `json:"cooperationContractDescription"`
21 // 合同附件 25 // 合同附件
22 Attachment []*domain.Attachment `json:"attachment"` 26 Attachment []*domain.Attachment `json:"attachment"`
23 // 发起人姓名 27 // 发起人姓名
@@ -37,6 +41,8 @@ func (dto *CooperationContractByUndertakerDto) LoadDto(contractByUndertaker *mod @@ -37,6 +41,8 @@ func (dto *CooperationContractByUndertakerDto) LoadDto(contractByUndertaker *mod
37 dto.UndertakerPhone = contractByUndertaker.UndertakerPhone 41 dto.UndertakerPhone = contractByUndertaker.UndertakerPhone
38 dto.CooperationContractNumber = contractByUndertaker.CooperationContractNumber 42 dto.CooperationContractNumber = contractByUndertaker.CooperationContractNumber
39 dto.CooperationContractName = contractByUndertaker.CooperationContractName 43 dto.CooperationContractName = contractByUndertaker.CooperationContractName
  44 + dto.CooperationContractStatus = contractByUndertaker.ContractStatus
  45 + dto.CooperationContractDescription = contractByUndertaker.CooperationContractDescription
40 dto.Attachment = contractByUndertaker.ContractAttachment 46 dto.Attachment = contractByUndertaker.ContractAttachment
41 dto.SponsorName = contractByUndertaker.CooperationContractSponsor.UserName 47 dto.SponsorName = contractByUndertaker.CooperationContractSponsor.UserName
42 if contractByUndertaker.Department != nil { 48 if contractByUndertaker.Department != nil {
@@ -17,6 +17,8 @@ type SearchCooperationContractQuery struct { @@ -17,6 +17,8 @@ type SearchCooperationContractQuery struct {
17 CooperationContractNumber string `cname:"共创合约编号" json:"cooperationContractNumber,omitempty"` 17 CooperationContractNumber string `cname:"共创合约编号" json:"cooperationContractNumber,omitempty"`
18 // 发起人姓名 18 // 发起人姓名
19 SponsorName string `cname:"发起人姓名" json:"sponsorName,omitempty"` 19 SponsorName string `cname:"发起人姓名" json:"sponsorName,omitempty"`
  20 + // 激励类型
  21 + IncentivesType int32 `cname:"激励类型" json:"incentivesType,omitempty"`
20 // 公司ID,通过集成REST上下文获取 22 // 公司ID,通过集成REST上下文获取
21 CompanyId int64 `cname:"公司ID" json:"companyId"` 23 CompanyId int64 `cname:"公司ID" json:"companyId"`
22 // 组织机构ID 24 // 组织机构ID
@@ -30,7 +32,6 @@ type SearchCooperationContractQuery struct { @@ -30,7 +32,6 @@ type SearchCooperationContractQuery struct {
30 } 32 }
31 33
32 func (searchCooperationContractQuery *SearchCooperationContractQuery) Valid(validation *validation.Validation) { 34 func (searchCooperationContractQuery *SearchCooperationContractQuery) Valid(validation *validation.Validation) {
33 - //validation.SetError("CustomValid", "未实现的自定义认证")  
34 } 35 }
35 36
36 func (searchCooperationContractQuery *SearchCooperationContractQuery) ValidateQuery() error { 37 func (searchCooperationContractQuery *SearchCooperationContractQuery) ValidateQuery() error {
@@ -2,6 +2,9 @@ package service @@ -2,6 +2,9 @@ package service
2 2
3 import ( 3 import (
4 "fmt" 4 "fmt"
  5 + "strconv"
  6 + "time"
  7 +
5 "github.com/linmadan/egglib-go/core/application" 8 "github.com/linmadan/egglib-go/core/application"
6 "github.com/linmadan/egglib-go/utils/tool_funs" 9 "github.com/linmadan/egglib-go/utils/tool_funs"
7 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/application/cooperationContract/command" 10 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/application/cooperationContract/command"
@@ -13,8 +16,6 @@ import ( @@ -13,8 +16,6 @@ import (
13 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/dao" 16 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/dao"
14 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/utils" 17 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/utils"
15 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/log" 18 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/log"
16 - "strconv"  
17 - "time"  
18 ) 19 )
19 20
20 // CooperationContractService 共创合约服务 21 // CooperationContractService 共创合约服务
@@ -125,7 +126,9 @@ func (cooperationContractService *CooperationContractService) CreateCooperationC @@ -125,7 +126,9 @@ func (cooperationContractService *CooperationContractService) CreateCooperationC
125 } 126 }
126 127
127 // 生成共创合约编号 128 // 生成共创合约编号
128 - contractNumber, err2 := cooperationContractDao.GenerateContractNumber() 129 + contractNumber, err2 := cooperationContractDao.GenerateContractNumber(map[string]interface{}{
  130 + "companyId": createCooperationContractCommand.CompanyId,
  131 + })
129 if err2 != nil { 132 if err2 != nil {
130 return nil, application.ThrowError(application.TRANSACTION_ERROR, err2.Error()) 133 return nil, application.ThrowError(application.TRANSACTION_ERROR, err2.Error())
131 } 134 }
@@ -133,16 +136,16 @@ func (cooperationContractService *CooperationContractService) CreateCooperationC @@ -133,16 +136,16 @@ func (cooperationContractService *CooperationContractService) CreateCooperationC
133 // 校验共创合约编号是否唯一 136 // 校验共创合约编号是否唯一
134 numberAvailable, _ := cooperationContractDao.CheckContractNumberAvailable(map[string]interface{}{ 137 numberAvailable, _ := cooperationContractDao.CheckContractNumberAvailable(map[string]interface{}{
135 "companyId": createCooperationContractCommand.CompanyId, 138 "companyId": createCooperationContractCommand.CompanyId,
136 - "orgId": createCooperationContractCommand.OrgId,  
137 "cooperationContractNumber": contractNumber, 139 "cooperationContractNumber": contractNumber,
138 }) 140 })
139 if !numberAvailable { 141 if !numberAvailable {
140 return nil, application.ThrowError(application.TRANSACTION_ERROR, "新增共创合约异常") 142 return nil, application.ThrowError(application.TRANSACTION_ERROR, "新增共创合约异常")
141 } 143 }
142 144
143 - // 获取承接人 145 + // 承接人
144 var undertakers []*domain.Undertaker 146 var undertakers []*domain.Undertaker
145 for _, undertaker := range createCooperationContractCommand.Undertakers { 147 for _, undertaker := range createCooperationContractCommand.Undertakers {
  148 + // 获取承接人
146 var undertakerDomain *domain.Undertaker 149 var undertakerDomain *domain.Undertaker
147 undertakerUid, err := strconv.ParseInt(undertaker.UserId, 10, 64) 150 undertakerUid, err := strconv.ParseInt(undertaker.UserId, 10, 64)
148 if err != nil { 151 if err != nil {
@@ -155,6 +158,13 @@ func (cooperationContractService *CooperationContractService) CreateCooperationC @@ -155,6 +158,13 @@ func (cooperationContractService *CooperationContractService) CreateCooperationC
155 undertakerDomain = data 158 undertakerDomain = data
156 } 159 }
157 160
  161 + // 校验承接人是否属于承接对象,1员工,2共创用户,4公开
  162 + if !utils.IsContain(createCooperationContractCommand.CooperationContractUndertakerTypes, 4) {
  163 + if !utils.IsContain(createCooperationContractCommand.CooperationContractUndertakerTypes, undertakerDomain.UserType) {
  164 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "承接人"+undertakerDomain.UserName+"不属于承接对象")
  165 + }
  166 + }
  167 +
158 // 获取推荐人 168 // 获取推荐人
159 var referrerDomain *domain.Referrer 169 var referrerDomain *domain.Referrer
160 referrerUid, _ := strconv.ParseInt(undertaker.ReferrerId, 10, 64) 170 referrerUid, _ := strconv.ParseInt(undertaker.ReferrerId, 10, 64)
@@ -195,11 +205,13 @@ func (cooperationContractService *CooperationContractService) CreateCooperationC @@ -195,11 +205,13 @@ func (cooperationContractService *CooperationContractService) CreateCooperationC
195 UserId: undertakerDomain.UserId, 205 UserId: undertakerDomain.UserId,
196 CooperationContractNumber: contractNumber, 206 CooperationContractNumber: contractNumber,
197 UserBaseId: undertakerDomain.UserBaseId, 207 UserBaseId: undertakerDomain.UserBaseId,
198 - Org: undertakerDomain.Org, 208 + Org: organization,
199 Orgs: undertakerDomain.Orgs, 209 Orgs: undertakerDomain.Orgs,
200 Department: undertakerDomain.Department, 210 Department: undertakerDomain.Department,
201 Roles: undertakerDomain.Roles, 211 Roles: undertakerDomain.Roles,
202 UserInfo: undertakerDomain.UserInfo, 212 UserInfo: undertakerDomain.UserInfo,
  213 + UserName: undertakerDomain.UserName,
  214 + UserPhone: undertakerDomain.UserPhone,
203 UserType: undertakerDomain.UserType, 215 UserType: undertakerDomain.UserType,
204 Referrer: referrerDomain, 216 Referrer: referrerDomain,
205 Salesman: salesmanDomain, 217 Salesman: salesmanDomain,
@@ -225,14 +237,14 @@ func (cooperationContractService *CooperationContractService) CreateCooperationC @@ -225,14 +237,14 @@ func (cooperationContractService *CooperationContractService) CreateCooperationC
225 CooperationContractNumber: contractNumber, 237 CooperationContractNumber: contractNumber,
226 UserId: relevantDomain.UserId, 238 UserId: relevantDomain.UserId,
227 UserBaseId: relevantDomain.UserBaseId, 239 UserBaseId: relevantDomain.UserBaseId,
228 - Org: relevantDomain.Org, 240 + Org: organization,
229 Orgs: relevantDomain.Orgs, 241 Orgs: relevantDomain.Orgs,
230 Department: relevantDomain.Department, 242 Department: relevantDomain.Department,
231 Roles: relevantDomain.Roles, 243 Roles: relevantDomain.Roles,
232 UserInfo: relevantDomain.UserInfo, 244 UserInfo: relevantDomain.UserInfo,
233 UserType: relevantDomain.UserType, 245 UserType: relevantDomain.UserType,
234 Status: relevantDomain.Status, 246 Status: relevantDomain.Status,
235 - Company: relevantDomain.Company, 247 + Company: company,
236 }) 248 })
237 } 249 }
238 250
@@ -267,7 +279,7 @@ func (cooperationContractService *CooperationContractService) CreateCooperationC @@ -267,7 +279,7 @@ func (cooperationContractService *CooperationContractService) CreateCooperationC
267 MoneyIncentivesStage: moneyIncentivesRule.MoneyIncentivesStage, 279 MoneyIncentivesStage: moneyIncentivesRule.MoneyIncentivesStage,
268 MoneyIncentivesStageEnd: moneyIncentivesRule.MoneyIncentivesStageEnd, 280 MoneyIncentivesStageEnd: moneyIncentivesRule.MoneyIncentivesStageEnd,
269 MoneyIncentivesStageStart: moneyIncentivesRule.MoneyIncentivesStageStart, 281 MoneyIncentivesStageStart: moneyIncentivesRule.MoneyIncentivesStageStart,
270 - MoneyIncentivesTime: time.Now(), 282 + MoneyIncentivesTime: moneyIncentivesRule.MoneyIncentivesTime,
271 ReferrerPercentage: moneyIncentivesRule.ReferrerPercentage, 283 ReferrerPercentage: moneyIncentivesRule.ReferrerPercentage,
272 SalesmanPercentage: moneyIncentivesRule.SalesmanPercentage, 284 SalesmanPercentage: moneyIncentivesRule.SalesmanPercentage,
273 Org: organization, 285 Org: organization,
@@ -444,6 +456,7 @@ func (cooperationContractService *CooperationContractService) ListCooperationCon @@ -444,6 +456,7 @@ func (cooperationContractService *CooperationContractService) ListCooperationCon
444 defer func() { 456 defer func() {
445 _ = transactionContext.RollbackTransaction() 457 _ = transactionContext.RollbackTransaction()
446 }() 458 }()
  459 + // 合约仓储初始化
447 var cooperationContractRepository domain.CooperationContractRepository 460 var cooperationContractRepository domain.CooperationContractRepository
448 if value, err := factory.CreateCooperationContractRepository(map[string]interface{}{ 461 if value, err := factory.CreateCooperationContractRepository(map[string]interface{}{
449 "transactionContext": transactionContext, 462 "transactionContext": transactionContext,
@@ -452,6 +465,7 @@ func (cooperationContractService *CooperationContractService) ListCooperationCon @@ -452,6 +465,7 @@ func (cooperationContractService *CooperationContractService) ListCooperationCon
452 } else { 465 } else {
453 cooperationContractRepository = value 466 cooperationContractRepository = value
454 } 467 }
  468 + // 查找合约
455 if count, cooperationContracts, err := cooperationContractRepository.Find(tool_funs.SimpleStructToMap(listCooperationContractQuery)); err != nil { 469 if count, cooperationContracts, err := cooperationContractRepository.Find(tool_funs.SimpleStructToMap(listCooperationContractQuery)); err != nil {
456 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 470 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
457 } else { 471 } else {
@@ -824,7 +838,7 @@ func (cooperationContractService *CooperationContractService) SearchCooperationC @@ -824,7 +838,7 @@ func (cooperationContractService *CooperationContractService) SearchCooperationC
824 if count, cooperationContractByUndertakers, err := cooperationContractDao.SearchCooperationContractByUndertaker(tool_funs.SimpleStructToMap(searchCooperationContractByUndertakerQuery)); err != nil { 838 if count, cooperationContractByUndertakers, err := cooperationContractDao.SearchCooperationContractByUndertaker(tool_funs.SimpleStructToMap(searchCooperationContractByUndertakerQuery)); err != nil {
825 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 839 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
826 } else { 840 } else {
827 - var cooperationContractByUndertakerDtos []*dto.CooperationContractByUndertakerDto 841 + cooperationContractByUndertakerDtos := make([]*dto.CooperationContractByUndertakerDto, 0)
828 for _, cooperationContractByUndertaker := range cooperationContractByUndertakers { 842 for _, cooperationContractByUndertaker := range cooperationContractByUndertakers {
829 cooperationContractByUndertakerDto := &dto.CooperationContractByUndertakerDto{} 843 cooperationContractByUndertakerDto := &dto.CooperationContractByUndertakerDto{}
830 if err := cooperationContractByUndertakerDto.LoadDto(cooperationContractByUndertaker); err != nil { 844 if err := cooperationContractByUndertakerDto.LoadDto(cooperationContractByUndertaker); err != nil {
@@ -1005,6 +1019,13 @@ func (cooperationContractService *CooperationContractService) UpdateCooperationC @@ -1005,6 +1019,13 @@ func (cooperationContractService *CooperationContractService) UpdateCooperationC
1005 undertakerDomain = data 1019 undertakerDomain = data
1006 } 1020 }
1007 1021
  1022 + // 校验:判断用户类型是否属于承接对象
  1023 + if !utils.IsContain(cooperationContract.CooperationContractUndertakerTypes, 4) { // 非公开类型校验
  1024 + if !utils.IsContain(cooperationContract.CooperationContractUndertakerTypes, undertakerDomain.UserType) {
  1025 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "抱歉,您不属于当前项目的承接对象")
  1026 + }
  1027 + }
  1028 +
1008 // 获取推荐人 1029 // 获取推荐人
1009 var referrerDomain *domain.Referrer 1030 var referrerDomain *domain.Referrer
1010 if undertaker.ReferrerId != "" { 1031 if undertaker.ReferrerId != "" {
@@ -1043,6 +1064,16 @@ func (cooperationContractService *CooperationContractService) UpdateCooperationC @@ -1043,6 +1064,16 @@ func (cooperationContractService *CooperationContractService) UpdateCooperationC
1043 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err16.Error()) 1064 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err16.Error())
1044 } 1065 }
1045 1066
  1067 + var contractAttachments []*domain.Attachment
  1068 + for _, attachment := range undertaker.ContractAttachment {
  1069 + contractAttachments = append(contractAttachments, &domain.Attachment{
  1070 + FileType: attachment.FileType,
  1071 + Name: attachment.Name,
  1072 + Url: attachment.Url,
  1073 + FileSize: attachment.FileSize,
  1074 + })
  1075 + }
  1076 +
1046 undertakers = append(undertakers, &domain.Undertaker{ 1077 undertakers = append(undertakers, &domain.Undertaker{
1047 UndertakerId: undertakerId, 1078 UndertakerId: undertakerId,
1048 UserId: undertakerDomain.UserId, 1079 UserId: undertakerDomain.UserId,
@@ -1058,7 +1089,7 @@ func (cooperationContractService *CooperationContractService) UpdateCooperationC @@ -1058,7 +1089,7 @@ func (cooperationContractService *CooperationContractService) UpdateCooperationC
1058 Salesman: salesmanDomain, 1089 Salesman: salesmanDomain,
1059 Status: undertakerDomain.Status, 1090 Status: undertakerDomain.Status,
1060 Company: undertakerDomain.Company, 1091 Company: undertakerDomain.Company,
1061 - ContractAttachment: nil, 1092 + ContractAttachment: contractAttachments,
1062 }) 1093 })
1063 } 1094 }
1064 // 更新承接人 1095 // 更新承接人
@@ -1106,7 +1137,7 @@ func (cooperationContractService *CooperationContractService) UpdateCooperationC @@ -1106,7 +1137,7 @@ func (cooperationContractService *CooperationContractService) UpdateCooperationC
1106 MoneyIncentivesStage: moneyIncentivesRule.MoneyIncentivesStage, 1137 MoneyIncentivesStage: moneyIncentivesRule.MoneyIncentivesStage,
1107 MoneyIncentivesStageEnd: moneyIncentivesRule.MoneyIncentivesStageEnd, 1138 MoneyIncentivesStageEnd: moneyIncentivesRule.MoneyIncentivesStageEnd,
1108 MoneyIncentivesStageStart: moneyIncentivesRule.MoneyIncentivesStageStart, 1139 MoneyIncentivesStageStart: moneyIncentivesRule.MoneyIncentivesStageStart,
1109 - MoneyIncentivesTime: time.Now(), 1140 + MoneyIncentivesTime: moneyIncentivesRule.MoneyIncentivesTime,
1110 ReferrerPercentage: moneyIncentivesRule.ReferrerPercentage, 1141 ReferrerPercentage: moneyIncentivesRule.ReferrerPercentage,
1111 SalesmanPercentage: moneyIncentivesRule.SalesmanPercentage, 1142 SalesmanPercentage: moneyIncentivesRule.SalesmanPercentage,
1112 Org: organization, 1143 Org: organization,
@@ -1301,7 +1332,7 @@ func (cooperationContractService *CooperationContractService) UpdateCooperationC @@ -1301,7 +1332,7 @@ func (cooperationContractService *CooperationContractService) UpdateCooperationC
1301 UserPhone: "", 1332 UserPhone: "",
1302 } 1333 }
1303 } 1334 }
1304 - undertakersOriginal = undertakersOriginal + strconv.FormatInt(int64(i), 10) + "(" + undertaker.UserName + "," + undertaker.Referrer.UserName + "," + undertaker.Salesman.UserName + ")" 1335 + undertakersOriginal = undertakersOriginal + strconv.FormatInt(int64(i+1), 10) + "(" + undertaker.UserName + "," + undertaker.Referrer.UserName + "," + undertaker.Salesman.UserName + ")"
1305 } 1336 }
1306 undertakerChangeTmp1 := "【" + undertakersOriginal + "】" 1337 undertakerChangeTmp1 := "【" + undertakersOriginal + "】"
1307 1338
@@ -1338,7 +1369,7 @@ func (cooperationContractService *CooperationContractService) UpdateCooperationC @@ -1338,7 +1369,7 @@ func (cooperationContractService *CooperationContractService) UpdateCooperationC
1338 UserPhone: "", 1369 UserPhone: "",
1339 } 1370 }
1340 } 1371 }
1341 - undertakersChanged = undertakersChanged + strconv.FormatInt(int64(i), 10) + "(" + undertaker.UserName + "," + undertaker.Referrer.UserName + "," + undertaker.Salesman.UserName + ")" 1372 + undertakersChanged = undertakersChanged + strconv.FormatInt(int64(i+1), 10) + "(" + undertaker.UserName + "," + undertaker.Referrer.UserName + "," + undertaker.Salesman.UserName + ")"
1342 } 1373 }
1343 undertakerChangeTemp2 := "【" + undertakersChanged + "】" 1374 undertakerChangeTemp2 := "【" + undertakersChanged + "】"
1344 // 拼接承接人变更记录 1375 // 拼接承接人变更记录
@@ -29,6 +29,8 @@ type SearchCooperationModeQuery struct { @@ -29,6 +29,8 @@ type SearchCooperationModeQuery struct {
29 UserId int64 `cname:"用户ID" json:"userId"` 29 UserId int64 `cname:"用户ID" json:"userId"`
30 // 用户基础数据id 30 // 用户基础数据id
31 UserBaseId int64 `cname:"用户基础数据ID" json:"userBaseId"` 31 UserBaseId int64 `cname:"用户基础数据ID" json:"userBaseId"`
  32 + // 共创模式状态,1启用,2禁用
  33 + Status int32 `json:"status"`
32 } 34 }
33 35
34 func (searchCooperationModeQuery *SearchCooperationModeQuery) Valid(validation *validation.Validation) { 36 func (searchCooperationModeQuery *SearchCooperationModeQuery) Valid(validation *validation.Validation) {
@@ -17,6 +17,8 @@ type SearchCooperationProjectQuery struct { @@ -17,6 +17,8 @@ type SearchCooperationProjectQuery struct {
17 CooperationProjectName string `cname:"共创项目名称" json:"cooperationProjectName,omitempty"` 17 CooperationProjectName string `cname:"共创项目名称" json:"cooperationProjectName,omitempty"`
18 // 共创项目编号 18 // 共创项目编号
19 CooperationProjectNumber string `cname:"共创项目编号" json:"cooperationProjectNumber,omitempty"` 19 CooperationProjectNumber string `cname:"共创项目编号" json:"cooperationProjectNumber,omitempty"`
  20 + // 共创项目承接对象,1员工,2共创用户,4公开,可以多选
  21 + CooperationProjectUndertakerType int32 `json:"cooperationProjectUndertakerType"`
20 // 部门名称 22 // 部门名称
21 DepartmentName string `cname:"部门名称" json:"departmentName,omitempty"` 23 DepartmentName string `cname:"部门名称" json:"departmentName,omitempty"`
22 // 关键字搜索 24 // 关键字搜索
@@ -163,9 +163,11 @@ func (cooperationProjectService *CooperationProjectService) CreateCooperationPro @@ -163,9 +163,11 @@ func (cooperationProjectService *CooperationProjectService) CreateCooperationPro
163 cooperationProjectDao = value 163 cooperationProjectDao = value
164 } 164 }
165 // 生成共创项目编号 165 // 生成共创项目编号
166 - projectNumber, err2 := cooperationProjectDao.GenerateProjectNumber() 166 + projectNumber, err2 := cooperationProjectDao.GenerateProjectNumber(map[string]interface{}{
  167 + "companyId": createCooperationProjectCommand.CompanyId,
  168 + })
167 if err2 != nil { 169 if err2 != nil {
168 - return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 170 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err2.Error())
169 } 171 }
170 // 校验共创项目编号是否唯一 172 // 校验共创项目编号是否唯一
171 numberAvailable, _ := cooperationProjectDao.CheckProjectNumberAvailable(map[string]interface{}{ 173 numberAvailable, _ := cooperationProjectDao.CheckProjectNumberAvailable(map[string]interface{}{
@@ -457,29 +459,123 @@ func (cooperationProjectService *CooperationProjectService) UpdateCooperationPro @@ -457,29 +459,123 @@ func (cooperationProjectService *CooperationProjectService) UpdateCooperationPro
457 cooperationProjectRepository = value 459 cooperationProjectRepository = value
458 } 460 }
459 461
  462 + // 共创申请仓储初始化
  463 + var cooperationApplicationRepository domain.CooperationApplicationRepository
  464 + if value, err := factory.CreateCooperationApplicationRepository(map[string]interface{}{
  465 + "transactionContext": transactionContext,
  466 + }); err != nil {
  467 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  468 + } else {
  469 + cooperationApplicationRepository = value
  470 + }
  471 +
  472 + // 用户REST服务初始化
  473 + var userService service.UserService
  474 + if value, err := factory.CreateUserService(map[string]interface{}{}); err != nil {
  475 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  476 + } else {
  477 + userService = value
  478 + }
  479 +
  480 + // 获取操作人
  481 + var operator *domain.User
  482 + if data, err := userService.OperatorFrom(updateCooperationProjectCommand.CompanyId, updateCooperationProjectCommand.OrgId, updateCooperationProjectCommand.UserId); err != nil {
  483 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取操作人失败")
  484 + } else {
  485 + operator = data
  486 + }
  487 +
  488 + // 获取发起人
  489 + var sponsor *domain.User
  490 + // sponsorUid类型转换
  491 + sponsorUid, err := strconv.ParseInt(updateCooperationProjectCommand.SponsorUid, 10, 64)
  492 + if err != nil {
  493 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  494 + }
  495 +
  496 + if data, err := userService.UserFrom(updateCooperationProjectCommand.CompanyId, updateCooperationProjectCommand.OrgId, sponsorUid); err != nil {
  497 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取发起人失败")
  498 + } else {
  499 + sponsor = data
  500 + }
  501 +
  502 + // 共创项目ID类型转换
460 cooperationProjectId, err := strconv.ParseInt(updateCooperationProjectCommand.CooperationProjectId, 10, 64) 503 cooperationProjectId, err := strconv.ParseInt(updateCooperationProjectCommand.CooperationProjectId, 10, 64)
461 if err != nil { 504 if err != nil {
462 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "共创项目编号类型错误") 505 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "共创项目编号类型错误")
463 } 506 }
464 507
465 // 查找共创项目 508 // 查找共创项目
466 - cooperationProject, err := cooperationProjectRepository.FindOne(map[string]interface{}{"cooperationProjectId": cooperationProjectId}) 509 + cooperationProject, err := cooperationProjectRepository.FindOne(map[string]interface{}{
  510 + "cooperationProjectId": cooperationProjectId,
  511 + })
467 if err != nil { 512 if err != nil {
468 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 513 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
469 } 514 }
470 if cooperationProject == nil { 515 if cooperationProject == nil {
471 return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(updateCooperationProjectCommand.CooperationProjectId))) 516 return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(updateCooperationProjectCommand.CooperationProjectId)))
472 } 517 }
  518 +
  519 + applicantTypes := make(map[int32]interface{})
  520 +
  521 + // 获取所有申请人
  522 + if count, cooperationApplications, err := cooperationApplicationRepository.Find(map[string]interface{}{
  523 + "cooperationProjectNumber": cooperationProject.CooperationProjectNumber,
  524 + "offsetLimit": false,
  525 + "companyId": updateCooperationProjectCommand.CompanyId,
  526 + "cooperationApplicationStatus": int32(2), // 共创申请审核状态,1待审核,2已同意,3已拒绝
  527 + }); err != nil {
  528 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  529 + } else {
  530 + if count > 0 {
  531 + for _, cooperationApplication := range cooperationApplications {
  532 + applicantTypes[cooperationApplication.CooperationApplicationApplicant.UserType] = cooperationApplication.CooperationApplicationApplicant.UserType
  533 + }
  534 + }
  535 + }
  536 + var undertakerTypes []int32
  537 + var k1, k2 int32
  538 + if len(applicantTypes) > 0 {
  539 + for k, _ := range applicantTypes {
  540 + if k == 1 {
  541 + k1 = k
  542 + } else if k == 2 {
  543 + k2 = k
  544 + }
  545 + undertakerTypes = append(undertakerTypes, k)
  546 + }
  547 + }
  548 + if k1 != 0 && k2 != 0 {
  549 + undertakerTypes = append(undertakerTypes, 4)
  550 + }
  551 +
  552 + // 校验可以修改的承接人(申请人)类型
  553 + for _, t := range undertakerTypes {
  554 + if !utils.IsContain(updateCooperationProjectCommand.CooperationProjectUndertakerTypes, t) {
  555 + switch t {
  556 + case 1:
  557 + return nil, application.ThrowError(application.BUSINESS_ERROR, "承接对象'员工'存在业务数据,不可取消勾选")
  558 + case 2:
  559 + return nil, application.ThrowError(application.BUSINESS_ERROR, "承接对象'共创用户'存在业务数据,不可取消勾选")
  560 + case 4:
  561 + return nil, application.ThrowError(application.BUSINESS_ERROR, "承接对象'公开'存在业务数据,不可取消勾选")
  562 + }
  563 + }
  564 + }
  565 +
  566 + // 更新共创项目
  567 + cooperationProject.Operator = operator
  568 + cooperationProject.CooperationProjectSponsor = sponsor
473 if err := cooperationProject.Update(tool_funs.SimpleStructToMap(updateCooperationProjectCommand)); err != nil { 569 if err := cooperationProject.Update(tool_funs.SimpleStructToMap(updateCooperationProjectCommand)); err != nil {
474 return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error()) 570 return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
475 } 571 }
476 - if cooperationProject, err := cooperationProjectRepository.Save(cooperationProject); err != nil { 572 + if cooperationProjectSaved, err := cooperationProjectRepository.Save(cooperationProject); err != nil {
477 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 573 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
478 } else { 574 } else {
479 if err := transactionContext.CommitTransaction(); err != nil { 575 if err := transactionContext.CommitTransaction(); err != nil {
480 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 576 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
481 } 577 }
482 - return cooperationProject, nil 578 + return cooperationProjectSaved, nil
483 } 579 }
484 } 580 }
485 581
@@ -63,6 +63,8 @@ func (svr *CooperationStatisticsService) CooperationContractStatistics(contractS @@ -63,6 +63,8 @@ func (svr *CooperationStatisticsService) CooperationContractStatistics(contractS
63 res, err = statisticsService.PersonCompanyPaymentHistoryStatistics(contractStatisticsQuery.QueryOptions) 63 res, err = statisticsService.PersonCompanyPaymentHistoryStatistics(contractStatisticsQuery.QueryOptions)
64 case domain_service.CreditAccountStatistics: 64 case domain_service.CreditAccountStatistics:
65 res, err = statisticsService.CreditAccountStatistics(contractStatisticsQuery.QueryOptions) 65 res, err = statisticsService.CreditAccountStatistics(contractStatisticsQuery.QueryOptions)
  66 + case domain_service.RelevantCooperationContractNumbers:
  67 + res, err = statisticsService.RelevantCooperationContractNumbers(contractStatisticsQuery.QueryOptions)
66 } 68 }
67 if err != nil { 69 if err != nil {
68 return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error()) 70 return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
@@ -16,9 +16,9 @@ type PayCreditAccountCommand struct { @@ -16,9 +16,9 @@ type PayCreditAccountCommand struct {
16 // 账期结算实付金额 16 // 账期结算实付金额
17 ActuallyPaidAmount float64 `cname:"账期结算实付金额" json:"actuallyPaidAmount" valid:"Required"` 17 ActuallyPaidAmount float64 `cname:"账期结算实付金额" json:"actuallyPaidAmount" valid:"Required"`
18 // 备注 18 // 备注
19 - Remarks string `cname:"备注" json:"remarks" valid:"Required"` 19 + Remarks string `cname:"备注" json:"remarks"`
20 // 支付凭证附件 20 // 支付凭证附件
21 - PaymentDocumentAttachments []*domain.Attachment `cname:"支付凭证附件" json:"paymentDocumentAttachment" valid:"Required"` 21 + PaymentDocumentAttachments []*domain.Attachment `cname:"支付凭证附件" json:"paymentDocumentAttachment"`
22 // 公司ID,通过集成REST上下文获取 22 // 公司ID,通过集成REST上下文获取
23 CompanyId int64 `cname:"公司ID" json:"companyId" valid:"Required"` 23 CompanyId int64 `cname:"公司ID" json:"companyId" valid:"Required"`
24 // 组织机构ID 24 // 组织机构ID
@@ -30,7 +30,6 @@ type PayCreditAccountCommand struct { @@ -30,7 +30,6 @@ type PayCreditAccountCommand struct {
30 } 30 }
31 31
32 func (payCreditAccountCommand *PayCreditAccountCommand) Valid(validation *validation.Validation) { 32 func (payCreditAccountCommand *PayCreditAccountCommand) Valid(validation *validation.Validation) {
33 - //validation.SetError("CustomValid", "未实现的自定义认证")  
34 } 33 }
35 34
36 func (payCreditAccountCommand *PayCreditAccountCommand) ValidateCommand() error { 35 func (payCreditAccountCommand *PayCreditAccountCommand) ValidateCommand() error {
@@ -32,6 +32,12 @@ type SearchCreditAccountQuery struct { @@ -32,6 +32,12 @@ type SearchCreditAccountQuery struct {
32 UserId int64 `cname:"用户ID" json:"userId"` 32 UserId int64 `cname:"用户ID" json:"userId"`
33 // 用户基础数据id 33 // 用户基础数据id
34 UserBaseId int64 `cname:"用户基础数据ID" json:"userBaseId"` 34 UserBaseId int64 `cname:"用户基础数据ID" json:"userBaseId"`
  35 + // 账期创建-开始时间
  36 + BeginTime time.Time `json:"beginTime"`
  37 + // 账期创建-结束时间
  38 + EndTime time.Time `json:"endTime"`
  39 + // 合约编号列表
  40 + CooperationContractNumbers []string `json:"cooperationContractNumbers"`
35 } 41 }
36 42
37 func (searchCreditAccountQuery *SearchCreditAccountQuery) Valid(validation *validation.Validation) { 43 func (searchCreditAccountQuery *SearchCreditAccountQuery) Valid(validation *validation.Validation) {
@@ -145,7 +145,6 @@ func (creditAccountService *CreditAccountService) CreateCreditAccount(createCred @@ -145,7 +145,6 @@ func (creditAccountService *CreditAccountService) CreateCreditAccount(createCred
145 } 145 }
146 146
147 // 预算明细 147 // 预算明细
148 - var creditAccounts []*domain.CreditAccount  
149 var accountDetail []*domain.AccountDetail 148 var accountDetail []*domain.AccountDetail
150 var settlementAmount float64 149 var settlementAmount float64
151 for _, dividendsEstimate := range dividendsEstimates { 150 for _, dividendsEstimate := range dividendsEstimates {
@@ -158,7 +157,9 @@ func (creditAccountService *CreditAccountService) CreateCreditAccount(createCred @@ -158,7 +157,9 @@ func (creditAccountService *CreditAccountService) CreateCreditAccount(createCred
158 } 157 }
159 158
160 // 生成账期结算单号 159 // 生成账期结算单号
161 - creditAccountNumber, err12 := creditAccountDao.GenerateCreditAccountNumber() 160 + creditAccountNumber, err12 := creditAccountDao.GenerateCreditAccountNumber(map[string]interface{}{
  161 + "companyId": createCreditAccountCommand.CompanyId,
  162 + })
162 if err12 != nil { 163 if err12 != nil {
163 return nil, application.ThrowError(application.TRANSACTION_ERROR, "生成账期结算单号错误") 164 return nil, application.ThrowError(application.TRANSACTION_ERROR, "生成账期结算单号错误")
164 } 165 }
@@ -179,7 +180,7 @@ func (creditAccountService *CreditAccountService) CreateCreditAccount(createCred @@ -179,7 +180,7 @@ func (creditAccountService *CreditAccountService) CreateCreditAccount(createCred
179 Department: dividendsEstimates[0].DividendsUser.Department, 180 Department: dividendsEstimates[0].DividendsUser.Department,
180 Roles: dividendsEstimates[0].DividendsUser.Roles, 181 Roles: dividendsEstimates[0].DividendsUser.Roles,
181 UserInfo: dividendsEstimates[0].DividendsUser.UserInfo, 182 UserInfo: dividendsEstimates[0].DividendsUser.UserInfo,
182 - UserName: dividendsEstimates[0].DividendsUser.UserName, 183 + UserName: dividendsEstimates[0].DividendsUser.UserInfo.UserName,
183 UserPhone: dividendsEstimates[0].DividendsUser.UserPhone, 184 UserPhone: dividendsEstimates[0].DividendsUser.UserPhone,
184 UserType: dividendsEstimates[0].DividendsUser.UserType, 185 UserType: dividendsEstimates[0].DividendsUser.UserType,
185 Status: dividendsEstimates[0].DividendsUser.Status, 186 Status: dividendsEstimates[0].DividendsUser.Status,
@@ -199,13 +200,19 @@ func (creditAccountService *CreditAccountService) CreateCreditAccount(createCred @@ -199,13 +200,19 @@ func (creditAccountService *CreditAccountService) CreateCreditAccount(createCred
199 if creditAccount, err13 := creditAccountRepository.Save(newCreditAccount); err13 != nil { 200 if creditAccount, err13 := creditAccountRepository.Save(newCreditAccount); err13 != nil {
200 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err13.Error()) 201 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err13.Error())
201 } else { 202 } else {
202 - creditAccounts = append(creditAccounts, creditAccount)  
203 - }  
204 -  
205 - if err14 := transactionContext.CommitTransaction(); err14 != nil {  
206 - return nil, application.ThrowError(application.TRANSACTION_ERROR, err14.Error()) 203 + // 变更分红预算单结算状态
  204 + for i, _ := range dividendsEstimates {
  205 + dividendsEstimates[i].DividendsAccountStatus = 2
  206 + }
  207 + _, err3 := dividendsEstimateRepository.UpdateMany(dividendsEstimates)
  208 + if err3 != nil {
  209 + return nil, err3
  210 + }
  211 + if err14 := transactionContext.CommitTransaction(); err14 != nil {
  212 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err14.Error())
  213 + }
  214 + return creditAccount, nil
207 } 215 }
208 - return creditAccounts, nil  
209 } 216 }
210 } 217 }
211 218
@@ -353,6 +360,7 @@ func (creditAccountService *CreditAccountService) PayCreditAccount(payCreditAcco @@ -353,6 +360,7 @@ func (creditAccountService *CreditAccountService) PayCreditAccount(payCreditAcco
353 if creditAccountSaved, err4 := creditAccountRepository.Save(creditAccount); err4 != nil { 360 if creditAccountSaved, err4 := creditAccountRepository.Save(creditAccount); err4 != nil {
354 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err4.Error()) 361 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err4.Error())
355 } else { 362 } else {
  363 + // TODO 更新分红预算单结算状态(已支付)
356 if err3 := transactionContext.CommitTransaction(); err3 != nil { 364 if err3 := transactionContext.CommitTransaction(); err3 != nil {
357 return nil, application.ThrowError(application.TRANSACTION_ERROR, err3.Error()) 365 return nil, application.ThrowError(application.TRANSACTION_ERROR, err3.Error())
358 } 366 }
@@ -28,10 +28,11 @@ type MoneyIncentivesEstimateDto struct { @@ -28,10 +28,11 @@ type MoneyIncentivesEstimateDto struct {
28 // 创建合约时间 28 // 创建合约时间
29 CreatedAt time.Time `json:"createdAt"` 29 CreatedAt time.Time `json:"createdAt"`
30 // 阶段和承接人 30 // 阶段和承接人
31 - StageAndUndertaker *StageAndUndertaker `json:"stageAndUndertaker"` 31 + StageAndUndertaker []*StageAndUndertaker `json:"stageAndUndertaker"`
32 } 32 }
33 33
34 func (dto *MoneyIncentivesEstimateDto) LoadDto(contract *domain.CooperationContract) error { 34 func (dto *MoneyIncentivesEstimateDto) LoadDto(contract *domain.CooperationContract) error {
  35 + // TODO 阶段承接人数据聚合
35 dto.CooperationContractId = contract.CooperationContractId 36 dto.CooperationContractId = contract.CooperationContractId
36 dto.CooperationContractNumber = contract.CooperationContractNumber 37 dto.CooperationContractNumber = contract.CooperationContractNumber
37 dto.CooperationContractName = contract.CooperationContractName 38 dto.CooperationContractName = contract.CooperationContractName
@@ -39,9 +40,9 @@ func (dto *MoneyIncentivesEstimateDto) LoadDto(contract *domain.CooperationContr @@ -39,9 +40,9 @@ func (dto *MoneyIncentivesEstimateDto) LoadDto(contract *domain.CooperationContr
39 dto.Department = contract.Department 40 dto.Department = contract.Department
40 dto.CooperationContractSponsorName = contract.CooperationContractSponsor.UserName 41 dto.CooperationContractSponsorName = contract.CooperationContractSponsor.UserName
41 dto.CreatedAt = contract.CreatedAt 42 dto.CreatedAt = contract.CreatedAt
42 - dto.StageAndUndertaker = &StageAndUndertaker{ 43 + dto.StageAndUndertaker = append(dto.StageAndUndertaker, &StageAndUndertaker{
43 Stage: 0, 44 Stage: 0,
44 - Undertakers: []*domain.Undertaker{},  
45 - } 45 + Undertakers: nil,
  46 + })
46 return nil 47 return nil
47 } 48 }
@@ -27,7 +27,6 @@ type ListDividendsIncentivesEstimateQuery struct { @@ -27,7 +27,6 @@ type ListDividendsIncentivesEstimateQuery struct {
27 } 27 }
28 28
29 func (listDividendsIncentivesEstimateQuery *ListDividendsIncentivesEstimateQuery) Valid(validation *validation.Validation) { 29 func (listDividendsIncentivesEstimateQuery *ListDividendsIncentivesEstimateQuery) Valid(validation *validation.Validation) {
30 - //validation.SetError("CustomValid", "未实现的自定义认证")  
31 } 30 }
32 31
33 func (listDividendsIncentivesEstimateQuery *ListDividendsIncentivesEstimateQuery) ValidateQuery() error { 32 func (listDividendsIncentivesEstimateQuery *ListDividendsIncentivesEstimateQuery) ValidateQuery() error {
@@ -75,24 +75,32 @@ func (dividendsEstimateService *DividendsEstimateService) ListDividendsIncentive @@ -75,24 +75,32 @@ func (dividendsEstimateService *DividendsEstimateService) ListDividendsIncentive
75 for _, orderGood := range orderGoods { 75 for _, orderGood := range orderGoods {
76 dividendsIncentivesEstimateDto := &dto.DividendsIncentivesEstimateDto{} 76 dividendsIncentivesEstimateDto := &dto.DividendsIncentivesEstimateDto{}
77 if orderGood.DividendsOrderNumber != "" { // 查询分红订单 77 if orderGood.DividendsOrderNumber != "" { // 查询分红订单
78 - dividendsOrder, err := dividendsOrderRepository.FindOne(map[string]interface{}{"dividendsOrderNumber": orderGood.DividendsOrderNumber}) 78 + dividendsOrder, err := dividendsOrderRepository.FindOne(map[string]interface{}{
  79 + "dividendsOrderNumber": orderGood.DividendsOrderNumber,
  80 + "companyId": orderGood.CompanyId,
  81 + "orgId": orderGood.OrgId,
  82 + })
79 if err != nil { 83 if err != nil {
80 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 84 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
81 } 85 }
82 if dividendsOrder == nil { 86 if dividendsOrder == nil {
83 - return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", orderGood.DividendsOrderNumber)) 87 + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("分红订单%s不存在", orderGood.DividendsOrderNumber))
84 } 88 }
85 if err := dividendsIncentivesEstimateDto.LoadDto(orderGood, dividendsOrder.DividendsOrderNumber, dividendsOrder.DividendsOriginalOrderNum, dividendsOrder.CustomerName, dividendsOrder.Region.RegionName, dividendsOrder.OrderTime); err != nil { 89 if err := dividendsIncentivesEstimateDto.LoadDto(orderGood, dividendsOrder.DividendsOrderNumber, dividendsOrder.DividendsOriginalOrderNum, dividendsOrder.CustomerName, dividendsOrder.Region.RegionName, dividendsOrder.OrderTime); err != nil {
86 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 90 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
87 } 91 }
88 dividendsIncentivesEstimateDtos = append(dividendsIncentivesEstimateDtos, dividendsIncentivesEstimateDto) 92 dividendsIncentivesEstimateDtos = append(dividendsIncentivesEstimateDtos, dividendsIncentivesEstimateDto)
89 } else if orderGood.DividendsReturnedOrderNumber != "" { // 查询分红退货单 93 } else if orderGood.DividendsReturnedOrderNumber != "" { // 查询分红退货单
90 - dividendsReturnedOrder, err := dividendsReturnedOrderRepository.FindOne(map[string]interface{}{"dividendsReturnedOrderNumber": orderGood.DividendsReturnedOrderNumber}) 94 + dividendsReturnedOrder, err := dividendsReturnedOrderRepository.FindOne(map[string]interface{}{
  95 + "companyId": orderGood.CompanyId,
  96 + "orgId": orderGood.OrgId,
  97 + "dividendsReturnedOrderNumber": orderGood.DividendsReturnedOrderNumber,
  98 + })
91 if err != nil { 99 if err != nil {
92 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 100 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
93 } 101 }
94 if dividendsReturnedOrder == nil { 102 if dividendsReturnedOrder == nil {
95 - return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", orderGood.DividendsReturnedOrderNumber)) 103 + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("分红退货单%s不存在", orderGood.DividendsReturnedOrderNumber))
96 } 104 }
97 if err := dividendsIncentivesEstimateDto.LoadDto(orderGood, dividendsReturnedOrder.DividendsReturnedOrderNumber, dividendsReturnedOrder.OriginalOrderNum, dividendsReturnedOrder.DividendsReturnedCustomerName, dividendsReturnedOrder.Region.RegionName, dividendsReturnedOrder.OrderTime); err != nil { 105 if err := dividendsIncentivesEstimateDto.LoadDto(orderGood, dividendsReturnedOrder.DividendsReturnedOrderNumber, dividendsReturnedOrder.OriginalOrderNum, dividendsReturnedOrder.DividendsReturnedCustomerName, dividendsReturnedOrder.Region.RegionName, dividendsReturnedOrder.OrderTime); err != nil {
98 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 106 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
@@ -223,6 +231,11 @@ func (dividendsEstimateService *DividendsEstimateService) CancelDividendsEstimat @@ -223,6 +231,11 @@ func (dividendsEstimateService *DividendsEstimateService) CancelDividendsEstimat
223 return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", strconv.FormatInt(cancelDividendsEstimateCommand.DividendsEstimateId, 10))) 231 return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", strconv.FormatInt(cancelDividendsEstimateCommand.DividendsEstimateId, 10)))
224 } 232 }
225 233
  234 + // 校验重复取消
  235 + if dividendsEstimate.IsCanceled {
  236 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "已取消的分红单不能重复取消")
  237 + }
  238 +
226 // 校验是否能够取消 239 // 校验是否能够取消
227 if dividendsEstimate.DividendsType == domain.ORDER_DIVIDENDS || dividendsEstimate.DividendsType == domain.RETURN_WRITE_OFF { // 订单分红、退货冲销 240 if dividendsEstimate.DividendsType == domain.ORDER_DIVIDENDS || dividendsEstimate.DividendsType == domain.RETURN_WRITE_OFF { // 订单分红、退货冲销
228 if count, dividendsEstimatesRelative, err2 := dividendsEstimateRepository.Find(map[string]interface{}{"orderOrReturnedOrderNum": dividendsEstimate.OrderOrReturnedOrderNum}); err2 != nil { 241 if count, dividendsEstimatesRelative, err2 := dividendsEstimateRepository.Find(map[string]interface{}{"orderOrReturnedOrderNum": dividendsEstimate.OrderOrReturnedOrderNum}); err2 != nil {
@@ -328,6 +341,11 @@ func (dividendsEstimateService *DividendsEstimateService) BatchCancelDividendsEs @@ -328,6 +341,11 @@ func (dividendsEstimateService *DividendsEstimateService) BatchCancelDividendsEs
328 if count > 0 { 341 if count > 0 {
329 // 校验分红预算是否可以取消,已有相关分红预算单已结算,无法取消 342 // 校验分红预算是否可以取消,已有相关分红预算单已结算,无法取消
330 for _, dividendsEstimate := range dividendsEstimates { 343 for _, dividendsEstimate := range dividendsEstimates {
  344 + // 校验重复取消
  345 + if dividendsEstimate.IsCanceled {
  346 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "已取消的分红单不能重复取消")
  347 + }
  348 +
331 // 校验是否能够取消 349 // 校验是否能够取消
332 if dividendsEstimate.DividendsType == domain.ORDER_DIVIDENDS || dividendsEstimate.DividendsType == domain.RETURN_WRITE_OFF { // 订单分红、退货冲销 350 if dividendsEstimate.DividendsType == domain.ORDER_DIVIDENDS || dividendsEstimate.DividendsType == domain.RETURN_WRITE_OFF { // 订单分红、退货冲销
333 if count, dividendsEstimatesRelative, err2 := dividendsEstimateRepository.Find(map[string]interface{}{"orderOrReturnedOrderNum": dividendsEstimate.OrderOrReturnedOrderNum}); err2 != nil { 351 if count, dividendsEstimatesRelative, err2 := dividendsEstimateRepository.Find(map[string]interface{}{"orderOrReturnedOrderNum": dividendsEstimate.OrderOrReturnedOrderNum}); err2 != nil {
@@ -542,25 +560,25 @@ func (dividendsEstimateService *DividendsEstimateService) ConfirmDividendsIncent @@ -542,25 +560,25 @@ func (dividendsEstimateService *DividendsEstimateService) ConfirmDividendsIncent
542 operator = data 560 operator = data
543 } 561 }
544 562
545 - // 分红订单仓储初始化  
546 - var dividendsOrderRepository domain.DividendsOrderRepository  
547 - if value, err := factory.CreateDividendsOrderRepository(map[string]interface{}{  
548 - "transactionContext": transactionContext,  
549 - }); err != nil {  
550 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())  
551 - } else {  
552 - dividendsOrderRepository = value  
553 - } 563 + //// 分红订单仓储初始化
  564 + //var dividendsOrderRepository domain.DividendsOrderRepository
  565 + //if value, err := factory.CreateDividendsOrderRepository(map[string]interface{}{
  566 + // "transactionContext": transactionContext,
  567 + //}); err != nil {
  568 + // return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  569 + //} else {
  570 + // dividendsOrderRepository = value
  571 + //}
554 572
555 // 分红退货单仓储初始化 573 // 分红退货单仓储初始化
556 - var dividendsReturnedOrderRepository domain.DividendsReturnedOrderRepository  
557 - if value, err := factory.CreateDividendsReturnedOrderRepository(map[string]interface{}{  
558 - "transactionContext": transactionContext,  
559 - }); err != nil {  
560 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())  
561 - } else {  
562 - dividendsReturnedOrderRepository = value  
563 - } 574 + //var dividendsReturnedOrderRepository domain.DividendsReturnedOrderRepository
  575 + //if value, err := factory.CreateDividendsReturnedOrderRepository(map[string]interface{}{
  576 + // "transactionContext": transactionContext,
  577 + //}); err != nil {
  578 + // return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  579 + //} else {
  580 + // dividendsReturnedOrderRepository = value
  581 + //}
564 582
565 // 订单产品仓储初始化 583 // 订单产品仓储初始化
566 var orderGoodRepository domain.OrderGoodRepository 584 var orderGoodRepository domain.OrderGoodRepository
@@ -605,103 +623,140 @@ func (dividendsEstimateService *DividendsEstimateService) ConfirmDividendsIncent @@ -605,103 +623,140 @@ func (dividendsEstimateService *DividendsEstimateService) ConfirmDividendsIncent
605 }) 623 })
606 } 624 }
607 625
  626 + // 统计成功预算的分红订单
  627 + estimateSuccessfullyDividendsOrders := make(map[string]string)
  628 +
  629 + // 统计预算失败的分红订单
  630 + estimateFailedDividendsOrders := make(map[string]string)
  631 +
608 // 获取订单产品 632 // 获取订单产品
609 if _, orderGoods, err := orderGoodRepository.Find(map[string]interface{}{ 633 if _, orderGoods, err := orderGoodRepository.Find(map[string]interface{}{
610 "orderGoodIds": orderGoodIds, 634 "orderGoodIds": orderGoodIds,
611 }); err != nil { 635 }); err != nil {
612 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 636 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
613 } else { 637 } else {
614 - var dividendsEstimates []*domain.DividendsEstimate 638 + dividendsEstimates := make([]*domain.DividendsEstimate, 0)
  639 + // 统计当前分红预算单数
  640 + count, err := dividendsEstimateDao.CountDividendsEstimate(map[string]interface{}{
  641 + "companyId": confirmDividendsIncentivesEstimateCommand.CompanyId,
  642 + })
  643 + if err != nil {
  644 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  645 + }
  646 + var countDividendsEstimate int64
615 for _, orderGood := range orderGoods { 647 for _, orderGood := range orderGoods {
616 dividendsEstimate := &domain.DividendsEstimate{} 648 dividendsEstimate := &domain.DividendsEstimate{}
617 if orderGood.DividendsOrderNumber != "" { // 查询分红订单 649 if orderGood.DividendsOrderNumber != "" { // 查询分红订单
618 - dividendsOrder, err3 := dividendsOrderRepository.FindOne(map[string]interface{}{"dividendsOrderNumber": orderGood.DividendsOrderNumber})  
619 - if err3 != nil {  
620 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "分红订单不存在")  
621 - }  
622 - if dividendsOrder == nil {  
623 - return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", orderGood.DividendsOrderNumber))  
624 - } 650 + //dividendsOrder, err3 := dividendsOrderRepository.FindOne(map[string]interface{}{
  651 + // "dividendsOrderNumber": orderGood.DividendsOrderNumber,
  652 + // "companyId": orderGood.CompanyId,
  653 + // "orgId": orderGood.OrgId,
  654 + //})
  655 + //if err3 != nil {
  656 + // return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "分红订单不存在")
  657 + //}
  658 + //if dividendsOrder == nil {
  659 + // return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("分红订单%s不存在", orderGood.DividendsOrderNumber))
  660 + //}
625 // 分红订单产品预算 661 // 分红订单产品预算
626 if dividendsEstimateDetails, err := confirmDividendsIncentivesEstimateService.Confirm(orderGoods); err != nil { 662 if dividendsEstimateDetails, err := confirmDividendsIncentivesEstimateService.Confirm(orderGoods); err != nil {
627 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 663 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
628 } else { 664 } else {
629 for _, dividendsEstimateDetail := range dividendsEstimateDetails { 665 for _, dividendsEstimateDetail := range dividendsEstimateDetails {
630 - // 生成分红预算单号  
631 - dividendsEstimateOrderNumber, err := dividendsEstimateDao.GenerateDividendsEstimateNumber()  
632 - if err != nil {  
633 - return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())  
634 - }  
635 - dividendsEstimate = &domain.DividendsEstimate{  
636 - DividendsEstimateId: 0,  
637 - DividendsAccountStatus: domain.TO_BE_ACCOUNT,  
638 - DividendsAmount: dividendsEstimateDetail.DividendsAmount,  
639 - DividendsEstimateOrderNumber: dividendsEstimateOrderNumber,  
640 - DividendsEstimateTime: time.Now(),  
641 - DividendsParticipateType: dividendsEstimateDetail.DividendsParticipateType,  
642 - DividendsType: domain.ORDER_DIVIDENDS,  
643 - DividendsTypeName: "订单分红",  
644 - OrderOrReturnedOrderNum: orderGood.DividendsOrderNumber,  
645 - CooperationContractNumber: orderGood.CooperationContractNumber,  
646 - DividendsUser: dividendsEstimateDetail.DividendsUser,  
647 - DividendsStage: dividendsEstimateDetail.DividendsStage,  
648 - Org: organization,  
649 - Company: company,  
650 - Operator: operator,  
651 - OperateTime: time.Time{},  
652 - IsCanceled: false,  
653 - CreatedAt: time.Now(),  
654 - DeletedAt: time.Time{},  
655 - UpdatedAt: time.Time{},  
656 - OrderGoodId: orderGood.OrderGoodId,  
657 - OrderGoodAmount: orderGood.OrderGoodAmount, 666 + if dividendsEstimateDetail.IsSuccessfully {
  667 + // 生成分红预算单号
  668 + dividendsEstimateOrderNumber, err := dividendsEstimateDetail.GenerateSpecificDividendsEstimateNumber(int64(count), countDividendsEstimate)
  669 + if err != nil {
  670 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  671 + }
  672 +
  673 + // 记录成功的订单号
  674 + estimateSuccessfullyDividendsOrders[dividendsEstimateDetail.OrderOrReturnedOrderNumber] = dividendsEstimateDetail.OrderOrReturnedOrderNumber
  675 +
  676 + // 统计分红预算单数目
  677 + countDividendsEstimate = countDividendsEstimate + 1
  678 +
  679 + dividendsEstimate = &domain.DividendsEstimate{
  680 + DividendsEstimateId: 0,
  681 + DividendsAccountStatus: domain.TO_BE_ACCOUNT,
  682 + DividendsAmount: dividendsEstimateDetail.DividendsAmount,
  683 + DividendsEstimateOrderNumber: dividendsEstimateOrderNumber,
  684 + DividendsEstimateTime: time.Now(),
  685 + DividendsParticipateType: dividendsEstimateDetail.DividendsParticipateType,
  686 + DividendsType: domain.ORDER_DIVIDENDS,
  687 + DividendsTypeName: "订单分红",
  688 + OrderOrReturnedOrderNum: orderGood.DividendsOrderNumber,
  689 + CooperationContractNumber: orderGood.CooperationContractNumber,
  690 + DividendsUser: dividendsEstimateDetail.DividendsUser,
  691 + DividendsStage: dividendsEstimateDetail.DividendsStage,
  692 + Org: organization,
  693 + Company: company,
  694 + Operator: operator,
  695 + OperateTime: time.Time{},
  696 + IsCanceled: false,
  697 + CreatedAt: time.Now(),
  698 + DeletedAt: time.Time{},
  699 + UpdatedAt: time.Time{},
  700 + OrderGoodId: orderGood.OrderGoodId,
  701 + OrderGoodAmount: orderGood.OrderGoodAmount,
  702 + }
  703 +
  704 + dividendsEstimates = append(dividendsEstimates, dividendsEstimate)
  705 + } else {
  706 + // 记录失败的订单号和原因s
  707 + estimateFailedDividendsOrders[dividendsEstimateDetail.OrderOrReturnedOrderNumber] = dividendsEstimateDetail.Reason
658 } 708 }
659 - dividendsEstimates = append(dividendsEstimates, dividendsEstimate)  
660 } 709 }
661 } 710 }
662 } else if orderGood.DividendsReturnedOrderNumber != "" { // 查询分红退货单 711 } else if orderGood.DividendsReturnedOrderNumber != "" { // 查询分红退货单
663 - dividendsReturnedOrder, err := dividendsReturnedOrderRepository.FindOne(map[string]interface{}{"dividendsReturnedOrderNumber": orderGood.DividendsReturnedOrderNumber})  
664 - if err != nil {  
665 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())  
666 - }  
667 - if dividendsReturnedOrder == nil {  
668 - return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", orderGood.DividendsReturnedOrderNumber))  
669 - }  
670 // 分红退货单产品预算 712 // 分红退货单产品预算
671 if dividendsReturnedEstimateDetails, err := confirmDividendsIncentivesEstimateService.Confirm(orderGoods); err != nil { 713 if dividendsReturnedEstimateDetails, err := confirmDividendsIncentivesEstimateService.Confirm(orderGoods); err != nil {
672 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 714 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
673 } else { 715 } else {
674 for _, dividendsReturnedEstimateDetail := range dividendsReturnedEstimateDetails { 716 for _, dividendsReturnedEstimateDetail := range dividendsReturnedEstimateDetails {
675 - // 生成分红预算单号  
676 - dividendsEstimateOrderNumber, err := dividendsEstimateDao.GenerateDividendsEstimateNumber()  
677 - if err != nil {  
678 - return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())  
679 - }  
680 - dividendsEstimate = &domain.DividendsEstimate{  
681 - DividendsEstimateId: 0,  
682 - DividendsAccountStatus: domain.TO_BE_ACCOUNT,  
683 - DividendsAmount: dividendsReturnedEstimateDetail.DividendsAmount,  
684 - DividendsEstimateOrderNumber: dividendsEstimateOrderNumber,  
685 - DividendsEstimateTime: time.Now(),  
686 - DividendsParticipateType: dividendsReturnedEstimateDetail.DividendsParticipateType,  
687 - DividendsType: domain.RETURN_WRITE_OFF,  
688 - DividendsTypeName: "退货冲销",  
689 - OrderOrReturnedOrderNum: orderGood.DividendsReturnedOrderNumber,  
690 - CooperationContractNumber: orderGood.CooperationContractNumber,  
691 - DividendsUser: dividendsReturnedEstimateDetail.DividendsUser,  
692 - DividendsStage: dividendsReturnedEstimateDetail.DividendsStage,  
693 - Org: organization,  
694 - Company: company,  
695 - Operator: operator,  
696 - OperateTime: time.Time{},  
697 - IsCanceled: false,  
698 - CreatedAt: time.Now(),  
699 - DeletedAt: time.Time{},  
700 - UpdatedAt: time.Time{},  
701 - OrderGoodId: orderGood.OrderGoodId,  
702 - OrderGoodAmount: orderGood.OrderGoodAmount, 717 + if dividendsReturnedEstimateDetail.IsSuccessfully {
  718 + // 生成分红预算单号
  719 + dividendsEstimateOrderNumber, err := dividendsReturnedEstimateDetail.GenerateSpecificDividendsEstimateNumber(int64(count), countDividendsEstimate)
  720 + if err != nil {
  721 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  722 + }
  723 +
  724 + // 记录成功的退货单号
  725 + estimateSuccessfullyDividendsOrders[dividendsReturnedEstimateDetail.OrderOrReturnedOrderNumber] = dividendsReturnedEstimateDetail.OrderOrReturnedOrderNumber
  726 +
  727 + // 统计生成的预算单数量
  728 + countDividendsEstimate = countDividendsEstimate + 1
  729 +
  730 + dividendsEstimate = &domain.DividendsEstimate{
  731 + DividendsEstimateId: 0,
  732 + DividendsAccountStatus: domain.TO_BE_ACCOUNT,
  733 + DividendsAmount: dividendsReturnedEstimateDetail.DividendsAmount,
  734 + DividendsEstimateOrderNumber: dividendsEstimateOrderNumber,
  735 + DividendsEstimateTime: time.Now(),
  736 + DividendsParticipateType: dividendsReturnedEstimateDetail.DividendsParticipateType,
  737 + DividendsType: domain.RETURN_WRITE_OFF,
  738 + DividendsTypeName: "退货冲销",
  739 + OrderOrReturnedOrderNum: orderGood.DividendsReturnedOrderNumber,
  740 + CooperationContractNumber: orderGood.CooperationContractNumber,
  741 + DividendsUser: dividendsReturnedEstimateDetail.DividendsUser,
  742 + DividendsStage: dividendsReturnedEstimateDetail.DividendsStage,
  743 + Org: organization,
  744 + Company: company,
  745 + Operator: operator,
  746 + OperateTime: time.Time{},
  747 + IsCanceled: false,
  748 + CreatedAt: time.Now(),
  749 + DeletedAt: time.Time{},
  750 + UpdatedAt: time.Time{},
  751 + OrderGoodId: orderGood.OrderGoodId,
  752 + OrderGoodAmount: orderGood.OrderGoodAmount,
  753 + }
  754 +
  755 + dividendsEstimates = append(dividendsEstimates, dividendsEstimate)
  756 + } else {
  757 + // 记录失败的退货单号和原因
  758 + estimateFailedDividendsOrders[dividendsReturnedEstimateDetail.OrderOrReturnedOrderNumber] = dividendsReturnedEstimateDetail.Reason
703 } 759 }
704 - dividendsEstimates = append(dividendsEstimates, dividendsEstimate)  
705 } 760 }
706 } 761 }
707 } 762 }
@@ -709,26 +764,29 @@ func (dividendsEstimateService *DividendsEstimateService) ConfirmDividendsIncent @@ -709,26 +764,29 @@ func (dividendsEstimateService *DividendsEstimateService) ConfirmDividendsIncent
709 log.Logger.Info("新增的分红预算单", map[string]interface{}{ 764 log.Logger.Info("新增的分红预算单", map[string]interface{}{
710 "dividendsEstimates": dividendsEstimates, 765 "dividendsEstimates": dividendsEstimates,
711 }) 766 })
712 -  
713 - // 创建成功的分红预算单  
714 - var dividendsEstimatesSavedSuccessfully []*domain.DividendsEstimate  
715 - // 创建失败的分红预算单  
716 - var dividendsEstimateSaveFailed []*domain.DividendsEstimate  
717 - for _, dividendsEstimate := range dividendsEstimates {  
718 - if dividendsEstimateSaved, err := dividendsEstimateRepository.Save(dividendsEstimate); err != nil {  
719 - dividendsEstimateSaveFailed = append(dividendsEstimateSaveFailed, dividendsEstimate)  
720 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())  
721 - } else if dividendsEstimateSaved != nil {  
722 - dividendsEstimatesSavedSuccessfully = append(dividendsEstimatesSavedSuccessfully, dividendsEstimate) 767 + if dividendsEstimatesSaved, err := dividendsEstimateRepository.SaveMany(dividendsEstimates); err != nil {
  768 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  769 + } else {
  770 + if err := transactionContext.CommitTransaction(); err != nil {
  771 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
723 } 772 }
  773 + // 分析成功和失败原因
  774 + successfullyCount := len(dividendsEstimatesSaved)
  775 + // 错误原因收集,返回第一个可能的原因
  776 + failedReason := make([]string, 0)
  777 + for _, v := range estimateFailedDividendsOrders {
  778 + failedReason = append(failedReason, v)
  779 + }
  780 + var failedReasonStr string
  781 + if len(failedReason) > 0 {
  782 + failedReasonStr = failedReason[0]
  783 + } else {
  784 + failedReasonStr = "无"
  785 + }
  786 + return map[string]interface{}{
  787 + "report": fmt.Sprintf("已完成%d笔单订单分红预算,生成%d笔单分红预算,%d笔订单分红预算失败,失败原因:%s", len(estimateSuccessfullyDividendsOrders), successfullyCount, len(estimateFailedDividendsOrders), failedReasonStr),
  788 + }, nil
724 } 789 }
725 -  
726 - if err := transactionContext.CommitTransaction(); err != nil {  
727 - return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())  
728 - }  
729 - // TODO 分析成功和失败原因  
730 -  
731 - return dividendsEstimatesSavedSuccessfully, nil  
732 } 790 }
733 } 791 }
734 792
@@ -823,11 +881,20 @@ func (dividendsEstimateService *DividendsEstimateService) ConfirmMoneyIncentives @@ -823,11 +881,20 @@ func (dividendsEstimateService *DividendsEstimateService) ConfirmMoneyIncentives
823 dividendsEstimateRepository = value 881 dividendsEstimateRepository = value
824 } 882 }
825 883
826 - cooperationContractId, _ := strconv.ParseInt(confirmMoneyIncentivesEstimateCommand.CooperationContractId, 10, 64)  
827 - undertakerUIDs, _ := utils.SliceAtoi(confirmMoneyIncentivesEstimateCommand.UndertakerUids) 884 + cooperationContractId, err := strconv.ParseInt(confirmMoneyIncentivesEstimateCommand.CooperationContractId, 10, 64)
  885 + if err != nil {
  886 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "合约编号类型错误:"+err.Error())
  887 + }
  888 +
  889 + undertakerUIDs, err := utils.SliceAtoi(confirmMoneyIncentivesEstimateCommand.UndertakerUids)
  890 + if err != nil {
  891 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "承接人UID类型错误:"+err.Error())
  892 + }
828 893
829 // 获取共创合约 894 // 获取共创合约
830 - cooperationContract, err := cooperationContractRepository.FindOne(map[string]interface{}{"cooperationContractId": cooperationContractId}) 895 + cooperationContract, err := cooperationContractRepository.FindOne(map[string]interface{}{
  896 + "cooperationContractId": cooperationContractId,
  897 + })
831 if err != nil { 898 if err != nil {
832 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 899 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
833 } 900 }
@@ -837,16 +904,28 @@ func (dividendsEstimateService *DividendsEstimateService) ConfirmMoneyIncentives @@ -837,16 +904,28 @@ func (dividendsEstimateService *DividendsEstimateService) ConfirmMoneyIncentives
837 904
838 var dividendsEstimates []*domain.DividendsEstimate 905 var dividendsEstimates []*domain.DividendsEstimate
839 906
  907 + // 统计当前分红预算单数
  908 + count, err := dividendsEstimateDao.CountDividendsEstimate(map[string]interface{}{
  909 + "companyId": confirmMoneyIncentivesEstimateCommand.CompanyId,
  910 + })
  911 +
  912 + // 分红预算单统计
  913 + var countDividendsEstimate int64
  914 +
840 // 共创合约预算 915 // 共创合约预算
841 if dividendsEstimateDetails, err2 := confirmMoneyIncentivesEstimateService.Confirm(cooperationContract, confirmMoneyIncentivesEstimateCommand.DividendsIncentivesStage, undertakerUIDs); err2 != nil { 916 if dividendsEstimateDetails, err2 := confirmMoneyIncentivesEstimateService.Confirm(cooperationContract, confirmMoneyIncentivesEstimateCommand.DividendsIncentivesStage, undertakerUIDs); err2 != nil {
842 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err2.Error()) 917 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err2.Error())
843 } else { 918 } else {
844 for _, dividendsEstimateDetail := range dividendsEstimateDetails { 919 for _, dividendsEstimateDetail := range dividendsEstimateDetails {
845 // 生成分红预算单号 920 // 生成分红预算单号
846 - dividendsEstimateOrderNumber, err := dividendsEstimateDao.GenerateDividendsEstimateNumber() 921 + dividendsEstimateOrderNumber, err := dividendsEstimateDetail.GenerateSpecificDividendsEstimateNumber(int64(count), countDividendsEstimate)
847 if err != nil { 922 if err != nil {
848 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 923 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
849 } 924 }
  925 +
  926 + // 统计生成的预算单数目
  927 + countDividendsEstimate = countDividendsEstimate + 1
  928 +
850 dividendsEstimate := &domain.DividendsEstimate{ 929 dividendsEstimate := &domain.DividendsEstimate{
851 DividendsEstimateId: 0, 930 DividendsEstimateId: 0,
852 DividendsAccountStatus: domain.TO_BE_ACCOUNT, 931 DividendsAccountStatus: domain.TO_BE_ACCOUNT,
@@ -869,15 +948,13 @@ func (dividendsEstimateService *DividendsEstimateService) ConfirmMoneyIncentives @@ -869,15 +948,13 @@ func (dividendsEstimateService *DividendsEstimateService) ConfirmMoneyIncentives
869 DeletedAt: time.Time{}, 948 DeletedAt: time.Time{},
870 UpdatedAt: time.Time{}, 949 UpdatedAt: time.Time{},
871 } 950 }
  951 +
872 dividendsEstimates = append(dividendsEstimates, dividendsEstimate) 952 dividendsEstimates = append(dividendsEstimates, dividendsEstimate)
873 } 953 }
874 dividendsEstimatesSaved, err := dividendsEstimateRepository.SaveMany(dividendsEstimates) 954 dividendsEstimatesSaved, err := dividendsEstimateRepository.SaveMany(dividendsEstimates)
875 if err != nil { 955 if err != nil {
876 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 956 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
877 } 957 }
878 - if err := transactionContext.CommitTransaction(); err != nil {  
879 - return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())  
880 - }  
881 if confirmMoneyIncentivesEstimateCommand.Action == 1 { // 只预算,不入库 958 if confirmMoneyIncentivesEstimateCommand.Action == 1 { // 只预算,不入库
882 return dividendsEstimatesSaved, nil 959 return dividendsEstimatesSaved, nil
883 } else if confirmMoneyIncentivesEstimateCommand.Action == 2 { // 确定预算 960 } else if confirmMoneyIncentivesEstimateCommand.Action == 2 { // 确定预算
@@ -1098,7 +1175,11 @@ func (dividendsEstimateService *DividendsEstimateService) SearchDividendsIncenti @@ -1098,7 +1175,11 @@ func (dividendsEstimateService *DividendsEstimateService) SearchDividendsIncenti
1098 for _, orderGood := range orderGoods { 1175 for _, orderGood := range orderGoods {
1099 dividendsIncentivesEstimateDto := &dto.DividendsIncentivesEstimateDto{} 1176 dividendsIncentivesEstimateDto := &dto.DividendsIncentivesEstimateDto{}
1100 if orderGood.DividendsOrderNumber != "" { // 查询分红订单 1177 if orderGood.DividendsOrderNumber != "" { // 查询分红订单
1101 - dividendsOrder, err := dividendsOrderRepository.FindOne(map[string]interface{}{"dividendsOrderNumber": orderGood.DividendsOrderNumber}) 1178 + dividendsOrder, err := dividendsOrderRepository.FindOne(map[string]interface{}{
  1179 + "dividendsOrderNumber": orderGood.DividendsOrderNumber,
  1180 + "companyId": orderGood.CompanyId,
  1181 + "orgId": orderGood.OrgId,
  1182 + })
1102 if err != nil { 1183 if err != nil {
1103 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 1184 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
1104 } 1185 }
@@ -1110,7 +1191,11 @@ func (dividendsEstimateService *DividendsEstimateService) SearchDividendsIncenti @@ -1110,7 +1191,11 @@ func (dividendsEstimateService *DividendsEstimateService) SearchDividendsIncenti
1110 } 1191 }
1111 dividendsIncentivesEstimateDtos = append(dividendsIncentivesEstimateDtos, dividendsIncentivesEstimateDto) 1192 dividendsIncentivesEstimateDtos = append(dividendsIncentivesEstimateDtos, dividendsIncentivesEstimateDto)
1112 } else if orderGood.DividendsReturnedOrderNumber != "" { // 查询分红退货单 1193 } else if orderGood.DividendsReturnedOrderNumber != "" { // 查询分红退货单
1113 - dividendsReturnedOrder, err := dividendsReturnedOrderRepository.FindOne(map[string]interface{}{"dividendsReturnedOrderNumber": orderGood.DividendsReturnedOrderNumber}) 1194 + dividendsReturnedOrder, err := dividendsReturnedOrderRepository.FindOne(map[string]interface{}{
  1195 + "dividendsReturnedOrderNumber": orderGood.DividendsReturnedOrderNumber,
  1196 + "companyId": orderGood.CompanyId,
  1197 + "orgId": orderGood.OrgId,
  1198 + })
1114 if err != nil { 1199 if err != nil {
1115 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 1200 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
1116 } 1201 }
@@ -5,6 +5,7 @@ import ( @@ -5,6 +5,7 @@ import (
5 "github.com/beego/beego/v2/core/validation" 5 "github.com/beego/beego/v2/core/validation"
6 "reflect" 6 "reflect"
7 "strings" 7 "strings"
  8 + "time"
8 ) 9 )
9 10
10 type OrderGoods struct { 11 type OrderGoods struct {
@@ -17,7 +18,7 @@ type OrderGoods struct { @@ -17,7 +18,7 @@ type OrderGoods struct {
17 // 订单产品单价 18 // 订单产品单价
18 OrderGoodPrice float64 `json:"orderGoodPrice"` 19 OrderGoodPrice float64 `json:"orderGoodPrice"`
19 // 订单产品数量 20 // 订单产品数量
20 - OrderGoodQuantity int64 `json:"orderGoodQuantity"` 21 + OrderGoodQuantity float64 `json:"orderGoodQuantity"`
21 // 关联分红订单号 22 // 关联分红订单号
22 DividendsOrderNumber string `json:"dividendsOrderNumber"` 23 DividendsOrderNumber string `json:"dividendsOrderNumber"`
23 // 关联的共创合约编号 24 // 关联的共创合约编号
@@ -55,6 +56,28 @@ type CreateDividendsOrderCommand struct { @@ -55,6 +56,28 @@ type CreateDividendsOrderCommand struct {
55 LineNumbers []int `cname:"记录行号" json:"lineNumbers"` 56 LineNumbers []int `cname:"记录行号" json:"lineNumbers"`
56 } 57 }
57 58
  59 +// GenerateSpecificDividendsOrderNumber 生成自定义分红订单
  60 +func (createDividendsOrderCommand *CreateDividendsOrderCommand) GenerateSpecificDividendsOrderNumber(count int64, orderTime time.Time, index int64) (string, error) {
  61 + currentTime := time.Now()
  62 + if count+index < 1000 {
  63 + countStr := fmt.Sprintf("%03d", count+index+1)
  64 + timestamp := currentTime.Unix()
  65 + timeNow := time.Unix(timestamp, 0)
  66 + timeString := timeNow.Format("20060102")
  67 + timeString = timeString[2:len(timeString)]
  68 + dividendsOrderNumber := "SL" + timeString + "#" + countStr
  69 + return dividendsOrderNumber, nil
  70 + } else {
  71 + countStr := fmt.Sprintf("%d", count+index+1)
  72 + timestamp := currentTime.Unix()
  73 + timeNow := time.Unix(timestamp, 0)
  74 + timeString := timeNow.Format("20060102")
  75 + timeString = timeString[2:len(timeString)]
  76 + dividendsOrderNumber := "SL" + timeString + "#" + countStr
  77 + return dividendsOrderNumber, nil
  78 + }
  79 +}
  80 +
58 func (createDividendsOrderCommand *CreateDividendsOrderCommand) Valid(validation *validation.Validation) { 81 func (createDividendsOrderCommand *CreateDividendsOrderCommand) Valid(validation *validation.Validation) {
59 } 82 }
60 83
@@ -10,7 +10,7 @@ import ( @@ -10,7 +10,7 @@ import (
10 10
11 type RemoveDividendsOrderCommand struct { 11 type RemoveDividendsOrderCommand struct {
12 // 分红订单ID 12 // 分红订单ID
13 - DividendsOrderId string `cname:"分红订单ID" json:"dividendsOrderId" valid:"Required"` 13 + DividendsOrderId int64 `cname:"分红订单ID" json:"dividendsOrderId" valid:"Required"`
14 // 公司ID,通过集成REST上下文获取 14 // 公司ID,通过集成REST上下文获取
15 CompanyId int64 `cname:"公司ID" json:"companyId" valid:"Required"` 15 CompanyId int64 `cname:"公司ID" json:"companyId" valid:"Required"`
16 // 组织机构ID 16 // 组织机构ID
@@ -40,7 +40,7 @@ type UpdateDividendsOrderCommand struct { @@ -40,7 +40,7 @@ type UpdateDividendsOrderCommand struct {
40 40
41 func (updateDividendsOrderCommand *UpdateDividendsOrderCommand) Valid(validation *validation.Validation) { 41 func (updateDividendsOrderCommand *UpdateDividendsOrderCommand) Valid(validation *validation.Validation) {
42 if len(updateDividendsOrderCommand.OrderGoods) <= 0 { 42 if len(updateDividendsOrderCommand.OrderGoods) <= 0 {
43 - validation.Error("激励规则不能为空") 43 + validation.Error("订单产品不能为空")
44 } else { 44 } else {
45 for i, _ := range updateDividendsOrderCommand.OrderGoods { 45 for i, _ := range updateDividendsOrderCommand.OrderGoods {
46 if updateDividendsOrderCommand.OrderGoods[i].OrderGoodId == "" { 46 if updateDividendsOrderCommand.OrderGoods[i].OrderGoodId == "" {
@@ -10,7 +10,7 @@ import ( @@ -10,7 +10,7 @@ import (
10 10
11 type GetDividendsOrderQuery struct { 11 type GetDividendsOrderQuery struct {
12 // 分红订单ID 12 // 分红订单ID
13 - DividendsOrderId int64 `cname:"分红订单ID" json:"dividendsOrderId" valid:"Required"` 13 + DividendsOrderId int64 `cname:"分红订单ID" json:"dividendsOrderId,omitempty"`
14 // 分红订单编号 14 // 分红订单编号
15 DividendsOrderNumber string `cname:"分红订单编号" json:"dividendsOrderNumber,omitempty"` 15 DividendsOrderNumber string `cname:"分红订单编号" json:"dividendsOrderNumber,omitempty"`
16 // 公司ID,通过集成REST上下文获取 16 // 公司ID,通过集成REST上下文获取
@@ -20,7 +20,7 @@ type GetDividendsOrderQuery struct { @@ -20,7 +20,7 @@ type GetDividendsOrderQuery struct {
20 // 用户ID,通过集成REST上下文获取,可翻译成发起人、承接人、推荐人、业务员 20 // 用户ID,通过集成REST上下文获取,可翻译成发起人、承接人、推荐人、业务员
21 UserId int64 `cname:"用户ID" json:"userId" valid:"Required"` 21 UserId int64 `cname:"用户ID" json:"userId" valid:"Required"`
22 // 用户基础数据id 22 // 用户基础数据id
23 - UserBaseId int64 `canme:"用户基础数据ID" json:"userBaseId" valid:"Required"` 23 + UserBaseId int64 `cname:"用户基础数据ID" json:"userBaseId" valid:"Required"`
24 } 24 }
25 25
26 func (getDividendsOrderQuery *GetDividendsOrderQuery) Valid(validation *validation.Validation) { 26 func (getDividendsOrderQuery *GetDividendsOrderQuery) Valid(validation *validation.Validation) {
@@ -6,6 +6,7 @@ import ( @@ -6,6 +6,7 @@ import (
6 "fmt" 6 "fmt"
7 "github.com/linmadan/egglib-go/core/application" 7 "github.com/linmadan/egglib-go/core/application"
8 "github.com/linmadan/egglib-go/utils/tool_funs" 8 "github.com/linmadan/egglib-go/utils/tool_funs"
  9 + "github.com/shopspring/decimal"
9 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/application/dividendsOrder/command" 10 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/application/dividendsOrder/command"
10 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/application/dividendsOrder/query" 11 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/application/dividendsOrder/query"
11 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/application/factory" 12 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/application/factory"
@@ -99,7 +100,9 @@ func (dividendsOrderService *DividendsOrderService) CreateDividendsOrder(createD @@ -99,7 +100,9 @@ func (dividendsOrderService *DividendsOrderService) CreateDividendsOrder(createD
99 } 100 }
100 101
101 // 生成分红订单号 102 // 生成分红订单号
102 - dividendsOrderNumber, err := dividendsOrderDao.GenerateDividendsOrderNumber() 103 + dividendsOrderNumber, err := dividendsOrderDao.GenerateDividendsOrderNumber(map[string]interface{}{
  104 + "companyId": createDividendsOrderCommand.CompanyId,
  105 + })
103 if err != nil { 106 if err != nil {
104 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 107 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
105 } 108 }
@@ -107,7 +110,6 @@ func (dividendsOrderService *DividendsOrderService) CreateDividendsOrder(createD @@ -107,7 +110,6 @@ func (dividendsOrderService *DividendsOrderService) CreateDividendsOrder(createD
107 // 校验分红订单编号是否唯一 110 // 校验分红订单编号是否唯一
108 numberAvailable, err := dividendsOrderDao.CheckDividendsOrderNumberAvailable(map[string]interface{}{ 111 numberAvailable, err := dividendsOrderDao.CheckDividendsOrderNumberAvailable(map[string]interface{}{
109 "companyId": createDividendsOrderCommand.CompanyId, 112 "companyId": createDividendsOrderCommand.CompanyId,
110 - "orgId": createDividendsOrderCommand.OrgId,  
111 "dividendsOrderNumber": dividendsOrderNumber, 113 "dividendsOrderNumber": dividendsOrderNumber,
112 }) 114 })
113 if err != nil { 115 if err != nil {
@@ -117,13 +119,70 @@ func (dividendsOrderService *DividendsOrderService) CreateDividendsOrder(createD @@ -117,13 +119,70 @@ func (dividendsOrderService *DividendsOrderService) CreateDividendsOrder(createD
117 return nil, application.ThrowError(application.TRANSACTION_ERROR, "新增分红订单异常") 119 return nil, application.ThrowError(application.TRANSACTION_ERROR, "新增分红订单异常")
118 } 120 }
119 121
  122 + // 合约仓储初始化
  123 + var cooperationContractRepository domain.CooperationContractRepository
  124 + if value, err := factory.CreateCooperationContractRepository(map[string]interface{}{
  125 + "transactionContext": transactionContext,
  126 + }); err != nil {
  127 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  128 + } else {
  129 + cooperationContractRepository = value
  130 + }
  131 +
  132 + // 查找合约
  133 + cooperationContractsMap := make(map[string]*domain.CooperationContract)
  134 + if count, cooperationContracts, err := cooperationContractRepository.Find(map[string]interface{}{
  135 + "offsetLimit": false,
  136 + "companyId": createDividendsOrderCommand.CompanyId,
  137 + "orgId": createDividendsOrderCommand.OrgId,
  138 + }); err != nil {
  139 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  140 + } else {
  141 + if count > 0 {
  142 + for _, cooperationContract := range cooperationContracts {
  143 + cooperationContractsMap[cooperationContract.CooperationContractNumber] = cooperationContract
  144 + }
  145 + }
  146 + }
  147 +
  148 + // 订单时间转换
  149 + orderTimeInt, err := strconv.ParseInt(createDividendsOrderCommand.OrderTime, 10, 64)
  150 + if err != nil {
  151 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "订单时间错误")
  152 + }
  153 + orderTime := utils.TransformTimestampToTime(orderTimeInt)
  154 +
120 // 新增订单产品 155 // 新增订单产品
121 var orderGoods []*domain.OrderGood 156 var orderGoods []*domain.OrderGood
122 var dividendsOrderAmount float64 157 var dividendsOrderAmount float64
123 for _, orderGood := range createDividendsOrderCommand.OrderGoods { 158 for _, orderGood := range createDividendsOrderCommand.OrderGoods {
  159 + // 计算订单产品金额
  160 + orderGoodAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(orderGood.OrderGoodQuantity)).Sub(decimal.NewFromFloat(orderGood.OrderGoodExpense)).Float64()
  161 +
  162 + // 校验合约
  163 + ruleMatchedFlag := false
  164 + if orderGood.CooperationContractNumber != "" {
  165 + // 校验共创合约激励类型是否正确
  166 + if cooperationContractsMap[orderGood.CooperationContractNumber] != nil && cooperationContractsMap[orderGood.CooperationContractNumber].IncentivesType != 1 {
  167 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "分红订单产品不能关联金额激励规则")
  168 + }
  169 + // 校验产品关联合约的激励规则是否匹配订单时间
  170 + if cooperationContractsMap[orderGood.CooperationContractNumber] != nil {
  171 + for _, incentivesRule := range cooperationContractsMap[orderGood.CooperationContractNumber].DividendsIncentivesRules {
  172 + if (orderTime.After(incentivesRule.DividendsIncentivesStageStart) || orderTime.Equal(incentivesRule.DividendsIncentivesStageStart)) && (orderTime.Before(incentivesRule.DividendsIncentivesStageEnd) || orderTime.Equal(incentivesRule.DividendsIncentivesStageEnd)) {
  173 + ruleMatchedFlag = true
  174 + break
  175 + }
  176 + }
  177 + }
  178 + if !ruleMatchedFlag {
  179 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "订单时间无法匹配分红激励规则,请重新选择")
  180 + }
  181 + }
  182 +
124 orderGoods = append(orderGoods, &domain.OrderGood{ 183 orderGoods = append(orderGoods, &domain.OrderGood{
125 OrderGoodId: 0, 184 OrderGoodId: 0,
126 - OrderGoodAmount: orderGood.OrderGoodAmount, 185 + OrderGoodAmount: orderGoodAmount,
127 OrderGoodName: orderGood.OrderGoodName, 186 OrderGoodName: orderGood.OrderGoodName,
128 OrderGoodPrice: orderGood.OrderGoodPrice, 187 OrderGoodPrice: orderGood.OrderGoodPrice,
129 OrderGoodQuantity: orderGood.OrderGoodQuantity, 188 OrderGoodQuantity: orderGood.OrderGoodQuantity,
@@ -139,19 +198,11 @@ func (dividendsOrderService *DividendsOrderService) CreateDividendsOrder(createD @@ -139,19 +198,11 @@ func (dividendsOrderService *DividendsOrderService) CreateDividendsOrder(createD
139 UpdatedAt: time.Time{}, 198 UpdatedAt: time.Time{},
140 }) 199 })
141 // 计算分红订单金额 200 // 计算分红订单金额
142 - dividendsOrderAmount = dividendsOrderAmount + orderGood.OrderGoodAmount  
143 - }  
144 -  
145 - // 订单时间转换  
146 - orderTimeInt, err := strconv.ParseInt(createDividendsOrderCommand.OrderTime, 10, 64)  
147 - if err != nil {  
148 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "订单时间错误") 201 + dividendsOrderAmount, _ = decimal.NewFromFloat(dividendsOrderAmount).Add(decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(orderGood.OrderGoodQuantity)).Sub(decimal.NewFromFloat(orderGood.OrderGoodExpense))).Float64()
149 } 202 }
150 - orderTime := utils.TransformTimestampToTime(orderTimeInt)  
151 203
152 // 新增分红订单 204 // 新增分红订单
153 newDividendsOrder := &domain.DividendsOrder{ 205 newDividendsOrder := &domain.DividendsOrder{
154 - DividendsOrderId: 0,  
155 DividendsOrderNumber: dividendsOrderNumber, 206 DividendsOrderNumber: dividendsOrderNumber,
156 DividendsOriginalOrderNum: createDividendsOrderCommand.DividendsOriginalOrderNum, 207 DividendsOriginalOrderNum: createDividendsOrderCommand.DividendsOriginalOrderNum,
157 DividendsOrderAmount: dividendsOrderAmount, 208 DividendsOrderAmount: dividendsOrderAmount,
@@ -257,6 +308,33 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -257,6 +308,33 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
257 operator = data 308 operator = data
258 } 309 }
259 310
  311 + // 合约仓储初始化
  312 + var cooperationContractRepository domain.CooperationContractRepository
  313 + if value, err := factory.CreateCooperationContractRepository(map[string]interface{}{
  314 + "transactionContext": transactionContext,
  315 + }); err != nil {
  316 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  317 + } else {
  318 + cooperationContractRepository = value
  319 + }
  320 +
  321 + // 查找合约
  322 + cooperationContractsMap := make(map[string]*domain.CooperationContract)
  323 + countContracts, cooperationContracts, err := cooperationContractRepository.Find(map[string]interface{}{
  324 + "offsetLimit": false,
  325 + "companyId": importDividendsOrderCommand.CompanyId,
  326 + "orgId": importDividendsOrderCommand.OrgId,
  327 + })
  328 + if err != nil {
  329 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  330 + } else {
  331 + if countContracts > 0 {
  332 + for _, cooperationContract := range cooperationContracts {
  333 + cooperationContractsMap[cooperationContract.CooperationContractNumber] = cooperationContract
  334 + }
  335 + }
  336 + }
  337 +
260 // 分红订单DAO初始化 338 // 分红订单DAO初始化
261 var dividendsOrderDao *dao.DividendsOrderDao 339 var dividendsOrderDao *dao.DividendsOrderDao
262 if value, err := factory.CreateDividendsOrderDao(map[string]interface{}{ 340 if value, err := factory.CreateDividendsOrderDao(map[string]interface{}{
@@ -297,7 +375,7 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -297,7 +375,7 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
297 } 375 }
298 376
299 // 必填项校验 377 // 必填项校验
300 - nullCellError := make([]interface{}, 0) 378 + nullCellError := make([]*domain.FailInfo, 0)
301 379
302 // 数据行计数 380 // 数据行计数
303 rowCnt := 0 381 rowCnt := 0
@@ -308,7 +386,6 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -308,7 +386,6 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
308 for i, dividendsOrder := range importDividendsOrderCommand.DividendsOrderData { 386 for i, dividendsOrder := range importDividendsOrderCommand.DividendsOrderData {
309 rowCnt++ 387 rowCnt++
310 nullCell := make([]interface{}, 0) 388 nullCell := make([]interface{}, 0)
311 - //var myRow []string  
312 t := reflect.TypeOf(dividendsOrder) 389 t := reflect.TypeOf(dividendsOrder)
313 v := reflect.ValueOf(dividendsOrder) 390 v := reflect.ValueOf(dividendsOrder)
314 for k := 0; k < t.NumField(); k++ { 391 for k := 0; k < t.NumField(); k++ {
@@ -323,7 +400,7 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -323,7 +400,7 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
323 } 400 }
324 if nullFlag { 401 if nullFlag {
325 myRow := &domain.FailInfo{ 402 myRow := &domain.FailInfo{
326 - FailReason: "订单日期格式错误,请输入正确的订单日期", 403 + FailReason: "必填项为空",
327 } 404 }
328 myRow.ImportDividendsOrderData = &importDividendsOrderCommand.DividendsOrderData[i] 405 myRow.ImportDividendsOrderData = &importDividendsOrderCommand.DividendsOrderData[i]
329 nullCellError = append(nullCellError, myRow) 406 nullCellError = append(nullCellError, myRow)
@@ -459,7 +536,6 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -459,7 +536,6 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
459 // 订单日期时间格式转换 536 // 订单日期时间格式转换
460 timeValue, err := time.ParseInLocation("2006/01/02", dividendsOrder.OrderTime, time.Local) 537 timeValue, err := time.ParseInLocation("2006/01/02", dividendsOrder.OrderTime, time.Local)
461 if err != nil { 538 if err != nil {
462 - //s := strconv.Itoa(i + 1)  
463 tmpRow := &domain.FailInfo{ 539 tmpRow := &domain.FailInfo{
464 FailReason: "无效的订单日期", 540 FailReason: "无效的订单日期",
465 } 541 }
@@ -469,7 +545,7 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -469,7 +545,7 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
469 } 545 }
470 546
471 // 产品相关:产品名称,产品数量、产品价格、费用 547 // 产品相关:产品名称,产品数量、产品价格、费用
472 - quantity, err := strconv.ParseInt(dividendsOrder.OrderGoodQuantity, 10, 64) 548 + quantity, err := strconv.ParseFloat(dividendsOrder.OrderGoodQuantity, 64)
473 if err != nil { 549 if err != nil {
474 return nil, application.ThrowError(application.ARG_ERROR, err.Error()) 550 return nil, application.ThrowError(application.ARG_ERROR, err.Error())
475 } 551 }
@@ -477,9 +553,13 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -477,9 +553,13 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
477 if err != nil { 553 if err != nil {
478 return nil, application.ThrowError(application.ARG_ERROR, err.Error()) 554 return nil, application.ThrowError(application.ARG_ERROR, err.Error())
479 } 555 }
480 - expense, err := strconv.ParseFloat(dividendsOrder.Expense, 64)  
481 - if err != nil {  
482 - return nil, application.ThrowError(application.ARG_ERROR, err.Error()) 556 + var expense float64
  557 + if dividendsOrder.Expense != "" {
  558 + if expenseParse, err := strconv.ParseFloat(dividendsOrder.Expense, 64); err != nil {
  559 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  560 + } else {
  561 + expense = expenseParse
  562 + }
483 } 563 }
484 564
485 // 初始化新建分红订单命令集 565 // 初始化新建分红订单命令集
@@ -510,7 +590,7 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -510,7 +590,7 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
510 } 590 }
511 } else { // 聚合同一笔订单产品 591 } else { // 聚合同一笔订单产品
512 // 产品相关:产品名称,产品数量、产品价格、费用 592 // 产品相关:产品名称,产品数量、产品价格、费用
513 - quantity, err := strconv.ParseInt(dividendsOrder.OrderGoodQuantity, 10, 64) 593 + quantity, err := strconv.ParseFloat(dividendsOrder.OrderGoodQuantity, 64)
514 if err != nil { 594 if err != nil {
515 return nil, application.ThrowError(application.ARG_ERROR, err.Error()) 595 return nil, application.ThrowError(application.ARG_ERROR, err.Error())
516 } 596 }
@@ -518,9 +598,13 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -518,9 +598,13 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
518 if err != nil { 598 if err != nil {
519 return nil, application.ThrowError(application.ARG_ERROR, err.Error()) 599 return nil, application.ThrowError(application.ARG_ERROR, err.Error())
520 } 600 }
521 - expense, err := strconv.ParseFloat(dividendsOrder.Expense, 64)  
522 - if err != nil {  
523 - return nil, application.ThrowError(application.ARG_ERROR, err.Error()) 601 + var expense float64
  602 + if dividendsOrder.Expense != "" {
  603 + if expenseParse, err := strconv.ParseFloat(dividendsOrder.Expense, 64); err != nil {
  604 + return nil, application.ThrowError(application.ARG_ERROR, err.Error())
  605 + } else {
  606 + expense = expenseParse
  607 + }
524 } 608 }
525 609
526 dividendsOrderCommands[hashString].OrderGoods = append(dividendsOrderCommands[hashString].OrderGoods, command.OrderGoods{ 610 dividendsOrderCommands[hashString].OrderGoods = append(dividendsOrderCommands[hashString].OrderGoods, command.OrderGoods{
@@ -586,7 +670,6 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -586,7 +670,6 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
586 for _, errorData := range errorDataList { 670 for _, errorData := range errorDataList {
587 if len(errorData.GoodLine) == 0 { // 订单错误 671 if len(errorData.GoodLine) == 0 { // 订单错误
588 for _, line := range errorData.LineNumbers { 672 for _, line := range errorData.LineNumbers {
589 - //s := strconv.Itoa(line + 1)  
590 tmpRow := &domain.FailInfo{ 673 tmpRow := &domain.FailInfo{
591 FailReason: "数据校验错误:" + errorData.Error.Error(), 674 FailReason: "数据校验错误:" + errorData.Error.Error(),
592 } 675 }
@@ -595,7 +678,6 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -595,7 +678,6 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
595 } 678 }
596 } else if len(errorData.GoodLine) > 0 { // 订单产品错误 679 } else if len(errorData.GoodLine) > 0 { // 订单产品错误
597 for line := range errorData.GoodLine { 680 for line := range errorData.GoodLine {
598 - //s := strconv.Itoa(line + 1)  
599 tmpRow := &domain.FailInfo{ 681 tmpRow := &domain.FailInfo{
600 FailReason: "订单产品信息错误:" + errorData.Error.Error(), 682 FailReason: "订单产品信息错误:" + errorData.Error.Error(),
601 } 683 }
@@ -613,36 +695,35 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -613,36 +695,35 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
613 }, nil 695 }, nil
614 } 696 }
615 697
616 - // 批量导入创建分红订单  
617 - for _, dividendsOrder := range createDividendsOrderCommands { 698 + // 创建分红订单领域模型
  699 + var creatDividendsOrder []*domain.DividendsOrder
  700 +
  701 + // 统计当前分红订单数
  702 + count, err := dividendsOrderDao.CountDividendsOrder(map[string]interface{}{})
  703 + if err != nil {
  704 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  705 + }
  706 +
  707 + // 批量创建分红订单
  708 + for i, dividendsOrder := range createDividendsOrderCommands {
618 // 生成分红订单号 709 // 生成分红订单号
619 - dividendsOrderNumber, err := dividendsOrderDao.GenerateDividendsOrderNumber() 710 + dividendsOrderNumber, err := dividendsOrder.GenerateSpecificDividendsOrderNumber(int64(count), time.Time{}, int64(i))
620 if err != nil { 711 if err != nil {
621 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 712 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
622 } 713 }
623 714
624 - // 校验分红订单编号是否唯一  
625 - numberAvailable, err3 := dividendsOrderDao.CheckDividendsOrderNumberAvailable(map[string]interface{}{  
626 - "companyId": importDividendsOrderCommand.CompanyId,  
627 - "orgId": importDividendsOrderCommand.OrgId,  
628 - "dividendsOrderNumber": dividendsOrderNumber,  
629 - })  
630 - if err3 != nil {  
631 - return nil, application.ThrowError(application.TRANSACTION_ERROR, err3.Error())  
632 - }  
633 - if !numberAvailable {  
634 - return nil, application.ThrowError(application.TRANSACTION_ERROR, "新增分红订单异常")  
635 - }  
636 -  
637 - // 共创合约DAO初始化  
638 - var cooperationContractDao *dao.CooperationContractDao  
639 - if value, err := factory.CreateCooperationContractDao(map[string]interface{}{  
640 - "transactionContext": transactionContext,  
641 - }); err != nil {  
642 - return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())  
643 - } else {  
644 - cooperationContractDao = value 715 + // 订单时间转换
  716 + orderTimeInt, err := strconv.ParseInt(dividendsOrder.OrderTime, 10, 64)
  717 + if err != nil {
  718 + row := &domain.ImportInfo{
  719 + Error: application.ThrowError(application.INTERNAL_SERVER_ERROR, fmt.Sprintf("订单日期转换错误:%s", err)),
  720 + LineNumbers: dividendsOrder.LineNumbers, // 错误影响的行
  721 + GoodLine: map[int]interface{}{},
  722 + }
  723 + errorDataList = append(errorDataList, row)
  724 + continue
645 } 725 }
  726 + orderTime := utils.TransformTimestampToTime(orderTimeInt)
646 727
647 // 新增订单产品 728 // 新增订单产品
648 var orderGoods []*domain.OrderGood 729 var orderGoods []*domain.OrderGood
@@ -650,20 +731,43 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -650,20 +731,43 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
650 orderGoodErrMap := make(map[int]interface{}, 0) 731 orderGoodErrMap := make(map[int]interface{}, 0)
651 for i, orderGood := range dividendsOrder.OrderGoods { 732 for i, orderGood := range dividendsOrder.OrderGoods {
652 // 校验共创合约是否合法 733 // 校验共创合约是否合法
  734 + contractNumberExist := false
  735 + for _, cooperationContract := range cooperationContracts {
  736 + if orderGood.CooperationContractNumber == cooperationContract.CooperationContractNumber {
  737 + contractNumberExist = true
  738 + break
  739 + }
  740 + }
  741 + if !contractNumberExist {
  742 + orderGoodErrMap[dividendsOrder.OrderGoods[i].LineNumber] = application.ThrowError(application.INTERNAL_SERVER_ERROR, fmt.Sprintf("共创合约编号不存在:%s", err))
  743 + }
  744 +
  745 + // 计算产品金额
  746 + orderGoodAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(orderGood.OrderGoodQuantity)).Sub(decimal.NewFromFloat(orderGood.OrderGoodExpense)).Float64()
  747 +
  748 + // 校验共创合约激励类型是否正确
  749 + ruleMatchedFlag := false
653 if orderGood.CooperationContractNumber != "" { 750 if orderGood.CooperationContractNumber != "" {
654 - contractNumberExist, _ := cooperationContractDao.CheckContractNumberExist(map[string]interface{}{  
655 - "companyId": importDividendsOrderCommand.CompanyId,  
656 - "orgId": importDividendsOrderCommand.OrgId,  
657 - "cooperationContractNumber": orderGood.CooperationContractNumber,  
658 - })  
659 - if !contractNumberExist {  
660 - orderGoodErrMap[dividendsOrder.OrderGoods[i].LineNumber] = application.ThrowError(application.INTERNAL_SERVER_ERROR, fmt.Sprintf("共创合约编号不存在:%s", err)) 751 + if cooperationContractsMap[orderGood.CooperationContractNumber] != nil && cooperationContractsMap[orderGood.CooperationContractNumber].IncentivesType != 1 {
  752 + orderGoodErrMap[dividendsOrder.OrderGoods[i].LineNumber] = application.ThrowError(application.INTERNAL_SERVER_ERROR, "退货单产品不能关联金额激励规则")
  753 + }
  754 + // 校验产品关联合约的激励规则是否匹配订单时间
  755 + if cooperationContractsMap[orderGood.CooperationContractNumber] != nil {
  756 + for _, incentivesRule := range cooperationContractsMap[orderGood.CooperationContractNumber].DividendsIncentivesRules {
  757 + if (orderTime.After(incentivesRule.DividendsIncentivesStageStart) || orderTime.Equal(incentivesRule.DividendsIncentivesStageStart)) && (orderTime.Before(incentivesRule.DividendsIncentivesStageEnd) || orderTime.Equal(incentivesRule.DividendsIncentivesStageEnd)) {
  758 + ruleMatchedFlag = true
  759 + break
  760 + }
  761 + }
  762 + }
  763 + if !ruleMatchedFlag {
  764 + orderGoodErrMap[dividendsOrder.OrderGoods[i].LineNumber] = application.ThrowError(application.INTERNAL_SERVER_ERROR, "订单时间无法匹配分红激励规则,请重新选择")
661 } 765 }
662 } 766 }
663 767
664 orderGoods = append(orderGoods, &domain.OrderGood{ 768 orderGoods = append(orderGoods, &domain.OrderGood{
665 OrderGoodId: 0, 769 OrderGoodId: 0,
666 - OrderGoodAmount: orderGood.OrderGoodAmount, 770 + OrderGoodAmount: orderGoodAmount,
667 OrderGoodName: orderGood.OrderGoodName, 771 OrderGoodName: orderGood.OrderGoodName,
668 OrderGoodPrice: orderGood.OrderGoodPrice, 772 OrderGoodPrice: orderGood.OrderGoodPrice,
669 OrderGoodQuantity: orderGood.OrderGoodQuantity, 773 OrderGoodQuantity: orderGood.OrderGoodQuantity,
@@ -679,7 +783,7 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -679,7 +783,7 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
679 }) 783 })
680 784
681 // 计算分红订单金额 785 // 计算分红订单金额
682 - dividendsOrderAmount = dividendsOrderAmount + orderGood.OrderGoodAmount 786 + dividendsOrderAmount, _ = decimal.NewFromFloat(dividendsOrderAmount).Add(decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(orderGood.OrderGoodQuantity).Sub(decimal.NewFromFloat(orderGood.OrderGoodExpense)))).Float64()
683 } 787 }
684 if len(orderGoodErrMap) > 0 { 788 if len(orderGoodErrMap) > 0 {
685 row := &domain.ImportInfo{ 789 row := &domain.ImportInfo{
@@ -691,19 +795,6 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -691,19 +795,6 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
691 continue 795 continue
692 } 796 }
693 797
694 - // 订单时间转换  
695 - orderTimeInt, err := strconv.ParseInt(dividendsOrder.OrderTime, 10, 64)  
696 - if err != nil {  
697 - row := &domain.ImportInfo{  
698 - Error: application.ThrowError(application.INTERNAL_SERVER_ERROR, fmt.Sprintf("订单日期转换错误:%s", err)),  
699 - LineNumbers: dividendsOrder.LineNumbers, // 错误影响的行  
700 - GoodLine: map[int]interface{}{},  
701 - }  
702 - errorDataList = append(errorDataList, row)  
703 - continue  
704 - }  
705 - orderTime := utils.TransformTimestampToTime(orderTimeInt)  
706 -  
707 // 新增分红订单 798 // 新增分红订单
708 newDividendsOrder := &domain.DividendsOrder{ 799 newDividendsOrder := &domain.DividendsOrder{
709 DividendsOrderId: 0, 800 DividendsOrderId: 0,
@@ -728,19 +819,14 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -728,19 +819,14 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
728 Operator: operator, 819 Operator: operator,
729 } 820 }
730 821
731 - if _, err2 := dividendsOrderRepository.Save(newDividendsOrder); err2 != nil {  
732 - row := &domain.ImportInfo{  
733 - Error: application.ThrowError(application.INTERNAL_SERVER_ERROR, fmt.Sprintf("保存订单数据失败:%s", err)),  
734 - LineNumbers: dividendsOrder.LineNumbers, // 错误影响的行  
735 - GoodLine: map[int]interface{}{},  
736 - }  
737 - errorDataList = append(errorDataList, row)  
738 - continue  
739 - } 822 + creatDividendsOrder = append(creatDividendsOrder, newDividendsOrder)
740 } 823 }
741 824
742 // 错误报告处理 825 // 错误报告处理
743 if len(errorDataList) <= 0 { // 成功返回 826 if len(errorDataList) <= 0 { // 成功返回
  827 + if _, err2 := dividendsOrderRepository.SaveMany(creatDividendsOrder); err2 != nil {
  828 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err2.Error())
  829 + }
744 if err3 := transactionContext.CommitTransaction(); err3 != nil { 830 if err3 := transactionContext.CommitTransaction(); err3 != nil {
745 return nil, application.ThrowError(application.TRANSACTION_ERROR, err3.Error()) 831 return nil, application.ThrowError(application.TRANSACTION_ERROR, err3.Error())
746 } 832 }
@@ -757,7 +843,6 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -757,7 +843,6 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
757 for _, errorData := range errorDataList { 843 for _, errorData := range errorDataList {
758 if len(errorData.GoodLine) == 0 { // 订单错误 844 if len(errorData.GoodLine) == 0 { // 订单错误
759 for _, line := range errorData.LineNumbers { 845 for _, line := range errorData.LineNumbers {
760 - //s := strconv.Itoa(line + 1)  
761 tmpRow := &domain.FailInfo{ 846 tmpRow := &domain.FailInfo{
762 FailReason: "订单数据新增错误:" + errorData.Error.Error(), 847 FailReason: "订单数据新增错误:" + errorData.Error.Error(),
763 } 848 }
@@ -766,7 +851,6 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD @@ -766,7 +851,6 @@ func (dividendsOrderService *DividendsOrderService) ImportDividendsOrder(importD
766 } 851 }
767 } else if len(errorData.GoodLine) > 0 { // 订单产品错误 852 } else if len(errorData.GoodLine) > 0 { // 订单产品错误
768 for line := range errorData.GoodLine { 853 for line := range errorData.GoodLine {
769 - //s := strconv.Itoa(line + 1)  
770 tmpRow := &domain.FailInfo{ 854 tmpRow := &domain.FailInfo{
771 FailReason: "订单数据新增错误:" + errorData.Error.Error(), 855 FailReason: "订单数据新增错误:" + errorData.Error.Error(),
772 } 856 }
@@ -888,15 +972,15 @@ func (dividendsOrderService *DividendsOrderService) RemoveDividendsOrder(removeD @@ -888,15 +972,15 @@ func (dividendsOrderService *DividendsOrderService) RemoveDividendsOrder(removeD
888 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 972 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
889 } 973 }
890 if dividendsOrder == nil { 974 if dividendsOrder == nil {
891 - return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(removeDividendsOrderCommand.DividendsOrderId))) 975 + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", strconv.FormatInt(removeDividendsOrderCommand.DividendsOrderId, 10)))
892 } 976 }
893 - if dividendsOrder, err := dividendsOrderRepository.Remove(dividendsOrder); err != nil { 977 + if dividendsOrderRemoved, err := dividendsOrderRepository.Remove(dividendsOrder); err != nil {
894 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 978 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
895 } else { 979 } else {
896 if err := transactionContext.CommitTransaction(); err != nil { 980 if err := transactionContext.CommitTransaction(); err != nil {
897 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 981 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
898 } 982 }
899 - return dividendsOrder, nil 983 + return dividendsOrderRemoved, nil
900 } 984 }
901 } 985 }
902 986
@@ -924,7 +1008,10 @@ func (dividendsOrderService *DividendsOrderService) BatchRemoveDividendsOrder(ba @@ -924,7 +1008,10 @@ func (dividendsOrderService *DividendsOrderService) BatchRemoveDividendsOrder(ba
924 dividendsOrderRepository = value 1008 dividendsOrderRepository = value
925 } 1009 }
926 1010
927 - dividendsOrderIds, _ := utils.SliceAtoi(batchRemoveDividendsOrderCommand.DividendsOrderIds) 1011 + dividendsOrderIds, err := utils.SliceAtoi(batchRemoveDividendsOrderCommand.DividendsOrderIds)
  1012 + if err != nil {
  1013 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "分红订单ID类型错误")
  1014 + }
928 if count, dividendsOrders, err := dividendsOrderRepository.Find(map[string]interface{}{ 1015 if count, dividendsOrders, err := dividendsOrderRepository.Find(map[string]interface{}{
929 "dividendsOrderIds": dividendsOrderIds, 1016 "dividendsOrderIds": dividendsOrderIds,
930 }); err != nil { 1017 }); err != nil {
@@ -1055,8 +1142,14 @@ func (dividendsOrderService *DividendsOrderService) UpdateDividendsOrder(updateD @@ -1055,8 +1142,14 @@ func (dividendsOrderService *DividendsOrderService) UpdateDividendsOrder(updateD
1055 } 1142 }
1056 orderTime := utils.TransformTimestampToTime(orderTimeInt) 1143 orderTime := utils.TransformTimestampToTime(orderTimeInt)
1057 1144
  1145 + // 分红订单ID类型转换
  1146 + dividendsOrderId, err := strconv.ParseInt(updateDividendsOrderCommand.DividendsOrderId, 10, 64)
  1147 + if err != nil {
  1148 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  1149 + }
  1150 +
1058 // 获取分红订单 1151 // 获取分红订单
1059 - dividendsOrder, err := dividendsOrderRepository.FindOne(map[string]interface{}{"dividendsOrderId": updateDividendsOrderCommand.DividendsOrderId}) 1152 + dividendsOrder, err := dividendsOrderRepository.FindOne(map[string]interface{}{"dividendsOrderId": dividendsOrderId})
1060 if err != nil { 1153 if err != nil {
1061 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "分红订单不存在") 1154 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "分红订单不存在")
1062 } 1155 }
@@ -1064,18 +1157,68 @@ func (dividendsOrderService *DividendsOrderService) UpdateDividendsOrder(updateD @@ -1064,18 +1157,68 @@ func (dividendsOrderService *DividendsOrderService) UpdateDividendsOrder(updateD
1064 return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(updateDividendsOrderCommand.DividendsOrderId))) 1157 return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(updateDividendsOrderCommand.DividendsOrderId)))
1065 } 1158 }
1066 1159
  1160 + // 合约仓储初始化
  1161 + var cooperationContractRepository domain.CooperationContractRepository
  1162 + if value, err := factory.CreateCooperationContractRepository(map[string]interface{}{
  1163 + "transactionContext": transactionContext,
  1164 + }); err != nil {
  1165 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  1166 + } else {
  1167 + cooperationContractRepository = value
  1168 + }
  1169 +
  1170 + // 查找合约
  1171 + cooperationContractsMap := make(map[string]*domain.CooperationContract)
  1172 + if count, cooperationContracts, err := cooperationContractRepository.Find(map[string]interface{}{
  1173 + "offsetLimit": false,
  1174 + "companyId": updateDividendsOrderCommand.CompanyId,
  1175 + "orgId": updateDividendsOrderCommand.OrgId,
  1176 + }); err != nil {
  1177 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  1178 + } else {
  1179 + if count > 0 {
  1180 + for _, cooperationContract := range cooperationContracts {
  1181 + cooperationContractsMap[cooperationContract.CooperationContractNumber] = cooperationContract
  1182 + }
  1183 + }
  1184 + }
  1185 +
1067 // 获取订单产品 1186 // 获取订单产品
1068 var orderGoods []*domain.OrderGood 1187 var orderGoods []*domain.OrderGood
1069 var dividendsOrderAmount float64 1188 var dividendsOrderAmount float64
1070 for _, orderGood := range updateDividendsOrderCommand.OrderGoods { 1189 for _, orderGood := range updateDividendsOrderCommand.OrderGoods {
  1190 + // 计算订单产品金额
  1191 + orderGoodAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(orderGood.OrderGoodQuantity)).Sub(decimal.NewFromFloat(orderGood.OrderGoodExpense)).Float64()
  1192 +
1071 // 产品ID类型转换 1193 // 产品ID类型转换
1072 orderGoodId, err3 := strconv.ParseInt(orderGood.OrderGoodId, 10, 64) 1194 orderGoodId, err3 := strconv.ParseInt(orderGood.OrderGoodId, 10, 64)
1073 if err3 != nil { 1195 if err3 != nil {
1074 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err3.Error()) 1196 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err3.Error())
1075 } 1197 }
  1198 +
  1199 + ruleMatchedFlag := false
  1200 + if orderGood.CooperationContractNumber != "" {
  1201 + // 校验共创合约激励类型是否正确
  1202 + if cooperationContractsMap[orderGood.CooperationContractNumber] != nil && cooperationContractsMap[orderGood.CooperationContractNumber].IncentivesType != 1 {
  1203 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "分红订单产品不能关联金额激励规则")
  1204 + }
  1205 + // 校验产品关联合约的激励规则是否匹配订单时间
  1206 + if cooperationContractsMap[orderGood.CooperationContractNumber] != nil {
  1207 + for _, incentivesRule := range cooperationContractsMap[orderGood.CooperationContractNumber].DividendsIncentivesRules {
  1208 + if (orderTime.After(incentivesRule.DividendsIncentivesStageStart) || orderTime.Equal(incentivesRule.DividendsIncentivesStageStart)) && (orderTime.Before(incentivesRule.DividendsIncentivesStageEnd) || orderTime.Equal(incentivesRule.DividendsIncentivesStageEnd)) {
  1209 + ruleMatchedFlag = true
  1210 + break
  1211 + }
  1212 + }
  1213 + }
  1214 + if !ruleMatchedFlag {
  1215 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "订单时间无法匹配分红激励规则,请重新选择")
  1216 + }
  1217 + }
  1218 +
1076 orderGoods = append(orderGoods, &domain.OrderGood{ 1219 orderGoods = append(orderGoods, &domain.OrderGood{
1077 OrderGoodId: orderGoodId, 1220 OrderGoodId: orderGoodId,
1078 - OrderGoodAmount: orderGood.OrderGoodAmount, 1221 + OrderGoodAmount: orderGoodAmount,
1079 OrderGoodName: orderGood.OrderGoodName, 1222 OrderGoodName: orderGood.OrderGoodName,
1080 OrderGoodPrice: orderGood.OrderGoodPrice, 1223 OrderGoodPrice: orderGood.OrderGoodPrice,
1081 OrderGoodQuantity: orderGood.OrderGoodQuantity, 1224 OrderGoodQuantity: orderGood.OrderGoodQuantity,
@@ -1083,13 +1226,14 @@ func (dividendsOrderService *DividendsOrderService) UpdateDividendsOrder(updateD @@ -1083,13 +1226,14 @@ func (dividendsOrderService *DividendsOrderService) UpdateDividendsOrder(updateD
1083 DividendsReturnedOrderNumber: "", 1226 DividendsReturnedOrderNumber: "",
1084 CooperationContractNumber: orderGood.CooperationContractNumber, 1227 CooperationContractNumber: orderGood.CooperationContractNumber,
1085 OrderGoodExpense: orderGood.OrderGoodExpense, 1228 OrderGoodExpense: orderGood.OrderGoodExpense,
  1229 + OrderGoodDividendsStatus: 0,
1086 OrgId: updateDividendsOrderCommand.OrgId, 1230 OrgId: updateDividendsOrderCommand.OrgId,
1087 CompanyId: updateDividendsOrderCommand.CompanyId, 1231 CompanyId: updateDividendsOrderCommand.CompanyId,
1088 CreatedAt: time.Time{}, 1232 CreatedAt: time.Time{},
1089 UpdatedAt: time.Now(), 1233 UpdatedAt: time.Now(),
1090 }) 1234 })
1091 // 计算分红订单金额 1235 // 计算分红订单金额
1092 - dividendsOrderAmount = dividendsOrderAmount + orderGood.OrderGoodAmount 1236 + dividendsOrderAmount, _ = decimal.NewFromFloat(dividendsOrderAmount).Add(decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(orderGood.OrderGoodQuantity)).Sub(decimal.NewFromFloat(orderGood.OrderGoodExpense))).Float64()
1093 } 1237 }
1094 1238
1095 if err := dividendsOrder.Update(tool_funs.SimpleStructToMap(updateDividendsOrderCommand)); err != nil { 1239 if err := dividendsOrder.Update(tool_funs.SimpleStructToMap(updateDividendsOrderCommand)); err != nil {
@@ -17,13 +17,15 @@ type OrderGoods struct { @@ -17,13 +17,15 @@ type OrderGoods struct {
17 // 订单产品单价 17 // 订单产品单价
18 OrderGoodPrice float64 `cname:"订单产品单价" json:"orderGoodPrice"` 18 OrderGoodPrice float64 `cname:"订单产品单价" json:"orderGoodPrice"`
19 // 订单产品数量 19 // 订单产品数量
20 - OrderGoodQuantity int64 `cname:"订单产品数量" json:"orderGoodQuantity"` 20 + OrderGoodQuantity float64 `cname:"订单产品数量" json:"orderGoodQuantity"`
21 // 关联分红订单号 21 // 关联分红订单号
22 DividendsOrderNumber string `cname:"关联分红订单号" json:"dividendsOrderNumber"` 22 DividendsOrderNumber string `cname:"关联分红订单号" json:"dividendsOrderNumber"`
23 // 关联的共创合约编号 23 // 关联的共创合约编号
24 CooperationContractNumber string `cname:"关联的共创合约编号" json:"cooperationContractNumber"` 24 CooperationContractNumber string `cname:"关联的共创合约编号" json:"cooperationContractNumber"`
25 // 订单产品费用 25 // 订单产品费用
26 OrderGoodExpense float64 `cname:"订单产品费用" json:"orderGoodExpense"` 26 OrderGoodExpense float64 `cname:"订单产品费用" json:"orderGoodExpense"`
  27 + //行号-错误信息返回
  28 + LineNumber int `json:"lineNumber"`
27 } 29 }
28 30
29 type CreateDividendsReturnedOrderCommand struct { 31 type CreateDividendsReturnedOrderCommand struct {
@@ -34,9 +36,9 @@ type CreateDividendsReturnedOrderCommand struct { @@ -34,9 +36,9 @@ type CreateDividendsReturnedOrderCommand struct {
34 // 来源单号,源单号,订单号 36 // 来源单号,源单号,订单号
35 OriginalOrderNum string `cname:"来源单号" json:"originalOrderNum" valid:"Required"` 37 OriginalOrderNum string `cname:"来源单号" json:"originalOrderNum" valid:"Required"`
36 // 分红单号 38 // 分红单号
37 - DividendsOrderNumber string `cname:"订单号" json:"dividendsOrderNumber" valid:"Required"` 39 + DividendsOrderNumber string `cname:"订单号" json:"dividendsOrderNumber"`
38 // 备注 40 // 备注
39 - Remarks string `cname:"备注" json:"remarks" valid:"Required"` 41 + Remarks string `cname:"备注" json:"remarks,omitempty"`
40 // 退货日期 42 // 退货日期
41 DividendsReturnedDate string `cname:"退货日期" json:"dividendsReturnedDate" valid:"Required"` 43 DividendsReturnedDate string `cname:"退货日期" json:"dividendsReturnedDate" valid:"Required"`
42 // 订单日期 44 // 订单日期
@@ -10,14 +10,14 @@ import ( @@ -10,14 +10,14 @@ import (
10 type UpdateDividendsReturnedOrderCommand struct { 10 type UpdateDividendsReturnedOrderCommand struct {
11 // 分红退货单记录ID 11 // 分红退货单记录ID
12 DividendsReturnedOrderId string `cname:"分红退货单记录ID" json:"dividendsReturnedOrderId" valid:"Required"` 12 DividendsReturnedOrderId string `cname:"分红退货单记录ID" json:"dividendsReturnedOrderId" valid:"Required"`
13 - // 退货金额  
14 - DividendsReturnedOrderRefund float64 `cname:"退货金额" json:"dividendsReturnedOrderRefund" valid:"Required"`  
15 // 退货客户名称 13 // 退货客户名称
16 DividendsReturnedCustomerName string `cname:"退货客户名称" json:"dividendsReturnedCustomerName" valid:"Required"` 14 DividendsReturnedCustomerName string `cname:"退货客户名称" json:"dividendsReturnedCustomerName" valid:"Required"`
17 // 来源单号,源单号,订单号 15 // 来源单号,源单号,订单号
18 OriginalOrderNum string `cname:"来源单号" json:"originalOrderNum" valid:"Required"` 16 OriginalOrderNum string `cname:"来源单号" json:"originalOrderNum" valid:"Required"`
  17 + // 分红单号
  18 + DividendsOrderNumber string `cname:"订单号" json:"dividendsOrderNumber"`
19 // 备注 19 // 备注
20 - Remarks string `cname:"备注" json:"remarks" valid:"Required"` 20 + Remarks string `cname:"备注" json:"remarks"`
21 // 退货日期 21 // 退货日期
22 DividendsReturnedDate string `cname:"退货日期" json:"dividendsReturnedDate" valid:"Required"` 22 DividendsReturnedDate string `cname:"退货日期" json:"dividendsReturnedDate" valid:"Required"`
23 // 退货区域 23 // 退货区域
@@ -37,7 +37,15 @@ type UpdateDividendsReturnedOrderCommand struct { @@ -37,7 +37,15 @@ type UpdateDividendsReturnedOrderCommand struct {
37 } 37 }
38 38
39 func (updateDividendsReturnedOrderCommand *UpdateDividendsReturnedOrderCommand) Valid(validation *validation.Validation) { 39 func (updateDividendsReturnedOrderCommand *UpdateDividendsReturnedOrderCommand) Valid(validation *validation.Validation) {
40 - //validation.SetError("CustomValid", "未实现的自定义认证") 40 + if len(updateDividendsReturnedOrderCommand.OrderGoods) <= 0 {
  41 + validation.Error("退货单产品不能为空")
  42 + } else {
  43 + for i, _ := range updateDividendsReturnedOrderCommand.OrderGoods {
  44 + if updateDividendsReturnedOrderCommand.OrderGoods[i].OrderGoodId == "" {
  45 + updateDividendsReturnedOrderCommand.OrderGoods[i].OrderGoodId = "0"
  46 + }
  47 + }
  48 + }
41 } 49 }
42 50
43 func (updateDividendsReturnedOrderCommand *UpdateDividendsReturnedOrderCommand) ValidateCommand() error { 51 func (updateDividendsReturnedOrderCommand *UpdateDividendsReturnedOrderCommand) ValidateCommand() error {
@@ -6,6 +6,7 @@ import ( @@ -6,6 +6,7 @@ import (
6 "fmt" 6 "fmt"
7 "github.com/linmadan/egglib-go/core/application" 7 "github.com/linmadan/egglib-go/core/application"
8 "github.com/linmadan/egglib-go/utils/tool_funs" 8 "github.com/linmadan/egglib-go/utils/tool_funs"
  9 + "github.com/shopspring/decimal"
9 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/application/dividendsReturnedOrder/command" 10 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/application/dividendsReturnedOrder/command"
10 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/application/dividendsReturnedOrder/query" 11 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/application/dividendsReturnedOrder/query"
11 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/application/factory" 12 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/application/factory"
@@ -16,7 +17,6 @@ import ( @@ -16,7 +17,6 @@ import (
16 "reflect" 17 "reflect"
17 "regexp" 18 "regexp"
18 "strconv" 19 "strconv"
19 - "strings"  
20 "time" 20 "time"
21 ) 21 )
22 22
@@ -99,7 +99,9 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) CreateDivide @@ -99,7 +99,9 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) CreateDivide
99 } 99 }
100 100
101 // 生成分红订单号 101 // 生成分红订单号
102 - dividendsReturnedOrderNumber, err := dividendsReturnedOrderDao.GenerateDividendsReturnedOrderNumber() 102 + dividendsReturnedOrderNumber, err := dividendsReturnedOrderDao.GenerateDividendsReturnedOrderNumber(map[string]interface{}{
  103 + "companyId": createDividendsReturnedOrderCommand.CompanyId,
  104 + })
103 if err != nil { 105 if err != nil {
104 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 106 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
105 } 107 }
@@ -121,7 +123,6 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) CreateDivide @@ -121,7 +123,6 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) CreateDivide
121 // 校验分红退货单编号是否唯一 123 // 校验分红退货单编号是否唯一
122 numberAvailable, err := dividendsReturnedOrderDao.CheckDividendsReturnedOrderNumberAvailable(map[string]interface{}{ 124 numberAvailable, err := dividendsReturnedOrderDao.CheckDividendsReturnedOrderNumberAvailable(map[string]interface{}{
123 "companyId": createDividendsReturnedOrderCommand.CompanyId, 125 "companyId": createDividendsReturnedOrderCommand.CompanyId,
124 - "orgId": createDividendsReturnedOrderCommand.OrgId,  
125 "dividendsReturnedOrderNumber": dividendsReturnedOrderNumber, 126 "dividendsReturnedOrderNumber": dividendsReturnedOrderNumber,
126 }) 127 })
127 if err != nil { 128 if err != nil {
@@ -131,12 +132,64 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) CreateDivide @@ -131,12 +132,64 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) CreateDivide
131 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "分红退货单号已存在") 132 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "分红退货单号已存在")
132 } 133 }
133 134
134 - // 获取分红退货单产品 135 + // 合约仓储初始化
  136 + var cooperationContractRepository domain.CooperationContractRepository
  137 + if value, err := factory.CreateCooperationContractRepository(map[string]interface{}{
  138 + "transactionContext": transactionContext,
  139 + }); err != nil {
  140 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  141 + } else {
  142 + cooperationContractRepository = value
  143 + }
  144 +
  145 + // 查找合约
  146 + cooperationContractsMap := make(map[string]*domain.CooperationContract)
  147 + if count, cooperationContracts, err := cooperationContractRepository.Find(map[string]interface{}{
  148 + "offsetLimit": false,
  149 + "companyId": createDividendsReturnedOrderCommand.CompanyId,
  150 + "orgId": createDividendsReturnedOrderCommand.OrgId,
  151 + }); err != nil {
  152 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  153 + } else {
  154 + if count > 0 {
  155 + for _, cooperationContract := range cooperationContracts {
  156 + cooperationContractsMap[cooperationContract.CooperationContractNumber] = cooperationContract
  157 + }
  158 + }
  159 + }
  160 +
  161 + // 退货金额
  162 + var dividendsReturnedOrderRefund float64
  163 +
  164 + // 新增分红退货单产品
135 var orderGoods []*domain.OrderGood 165 var orderGoods []*domain.OrderGood
136 for _, orderGood := range createDividendsReturnedOrderCommand.OrderGoods { 166 for _, orderGood := range createDividendsReturnedOrderCommand.OrderGoods {
  167 + // 退货产品金额计算
  168 + orderGoodAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(orderGood.OrderGoodQuantity)).Float64()
  169 +
  170 + // 校验合约激励类型是否正确
  171 + ruleMatchedFlag := false
  172 + if orderGood.CooperationContractNumber != "" {
  173 + if cooperationContractsMap[orderGood.CooperationContractNumber] != nil && cooperationContractsMap[orderGood.CooperationContractNumber].IncentivesType != 1 {
  174 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "退货单产品不能关联金额激励规则")
  175 + }
  176 + // 校验产品关联合约的激励规则是否匹配订单时间
  177 + if cooperationContractsMap[orderGood.CooperationContractNumber] != nil {
  178 + for _, incentivesRule := range cooperationContractsMap[orderGood.CooperationContractNumber].DividendsIncentivesRules {
  179 + if (orderTime.After(incentivesRule.DividendsIncentivesStageStart) || orderTime.Equal(incentivesRule.DividendsIncentivesStageStart)) && (orderTime.Before(incentivesRule.DividendsIncentivesStageEnd) || orderTime.Equal(incentivesRule.DividendsIncentivesStageEnd)) {
  180 + ruleMatchedFlag = true
  181 + break
  182 + }
  183 + }
  184 + }
  185 + if !ruleMatchedFlag {
  186 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "订单时间无法匹配分红激励规则,请重新选择")
  187 + }
  188 + }
  189 +
137 orderGoods = append(orderGoods, &domain.OrderGood{ 190 orderGoods = append(orderGoods, &domain.OrderGood{
138 OrderGoodId: 0, 191 OrderGoodId: 0,
139 - OrderGoodAmount: orderGood.OrderGoodAmount, 192 + OrderGoodAmount: orderGoodAmount,
140 OrderGoodName: orderGood.OrderGoodName, 193 OrderGoodName: orderGood.OrderGoodName,
141 OrderGoodPrice: orderGood.OrderGoodPrice, 194 OrderGoodPrice: orderGood.OrderGoodPrice,
142 OrderGoodQuantity: orderGood.OrderGoodQuantity, 195 OrderGoodQuantity: orderGood.OrderGoodQuantity,
@@ -151,11 +204,13 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) CreateDivide @@ -151,11 +204,13 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) CreateDivide
151 DeletedAt: time.Time{}, 204 DeletedAt: time.Time{},
152 UpdatedAt: time.Time{}, 205 UpdatedAt: time.Time{},
153 }) 206 })
  207 + // 计算退货订单金额
  208 + dividendsReturnedOrderRefund, _ = decimal.NewFromFloat(dividendsReturnedOrderRefund).Add(decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(orderGood.OrderGoodQuantity))).Float64()
154 } 209 }
155 210
156 newDividendsReturnedOrder := &domain.DividendsReturnedOrder{ 211 newDividendsReturnedOrder := &domain.DividendsReturnedOrder{
157 DividendsReturnedOrderNumber: dividendsReturnedOrderNumber, 212 DividendsReturnedOrderNumber: dividendsReturnedOrderNumber,
158 - DividendsReturnedOrderRefund: createDividendsReturnedOrderCommand.DividendsReturnedOrderRefund, 213 + DividendsReturnedOrderRefund: dividendsReturnedOrderRefund,
159 OriginalOrderNum: createDividendsReturnedOrderCommand.OriginalOrderNum, 214 OriginalOrderNum: createDividendsReturnedOrderCommand.OriginalOrderNum,
160 DividendsOrderNumber: createDividendsReturnedOrderCommand.DividendsOrderNumber, 215 DividendsOrderNumber: createDividendsReturnedOrderCommand.DividendsOrderNumber,
161 DividendsReturnedCustomerName: createDividendsReturnedOrderCommand.DividendsReturnedCustomerName, 216 DividendsReturnedCustomerName: createDividendsReturnedOrderCommand.DividendsReturnedCustomerName,
@@ -316,6 +371,33 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide @@ -316,6 +371,33 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide
316 dividendsReturnedOrderRepository = value 371 dividendsReturnedOrderRepository = value
317 } 372 }
318 373
  374 + // 合约仓储初始化
  375 + var cooperationContractRepository domain.CooperationContractRepository
  376 + if value, err := factory.CreateCooperationContractRepository(map[string]interface{}{
  377 + "transactionContext": transactionContext,
  378 + }); err != nil {
  379 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  380 + } else {
  381 + cooperationContractRepository = value
  382 + }
  383 +
  384 + // 查找合约
  385 + cooperationContractsMap := make(map[string]*domain.CooperationContract)
  386 + countContracts, cooperationContracts, err := cooperationContractRepository.Find(map[string]interface{}{
  387 + "offsetLimit": false,
  388 + "companyId": importDividendsReturnedOrderCommand.CompanyId,
  389 + "orgId": importDividendsReturnedOrderCommand.OrgId,
  390 + })
  391 + if err != nil {
  392 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  393 + } else {
  394 + if countContracts > 0 {
  395 + for _, cooperationContract := range cooperationContracts {
  396 + cooperationContractsMap[cooperationContract.CooperationContractNumber] = cooperationContract
  397 + }
  398 + }
  399 + }
  400 +
319 // 返回信息表头定义 401 // 返回信息表头定义
320 var tableHeader = map[string]interface{}{ 402 var tableHeader = map[string]interface{}{
321 "failReason": "错误详情", 403 "failReason": "错误详情",
@@ -347,7 +429,7 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide @@ -347,7 +429,7 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide
347 for i, dividendsReturnedOrder := range importDividendsReturnedOrderCommand.DividendsReturnedOrderData { 429 for i, dividendsReturnedOrder := range importDividendsReturnedOrderCommand.DividendsReturnedOrderData {
348 rowCnt++ 430 rowCnt++
349 nullCell := make([]interface{}, 0) 431 nullCell := make([]interface{}, 0)
350 - var myRow []string 432 + var myRow *domain.FailReturnedInfo
351 t := reflect.TypeOf(dividendsReturnedOrder) 433 t := reflect.TypeOf(dividendsReturnedOrder)
352 v := reflect.ValueOf(dividendsReturnedOrder) 434 v := reflect.ValueOf(dividendsReturnedOrder)
353 for k := 0; k < t.NumField(); k++ { 435 for k := 0; k < t.NumField(); k++ {
@@ -361,11 +443,12 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide @@ -361,11 +443,12 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide
361 } 443 }
362 } 444 }
363 if nullFlag { 445 if nullFlag {
364 - s := strconv.Itoa(i + 1)  
365 - b := strings.Replace(strings.Trim(fmt.Sprint(nullCell), "[]"), " ", ",", -1)  
366 - myRow = append(myRow, "第"+s+"行的第"+b+"列必填项为空") // 错误信息  
367 - myRow = append(myRow, s) // 行号  
368 - myRow = append(myRow, fmt.Sprintf("%v", v.Interface())) // 错误行数据 446 + //s := strconv.Itoa(i + 1)
  447 + //b := strings.Replace(strings.Trim(fmt.Sprint(nullCell), "[]"), " ", ",", -1)
  448 + myRow = &domain.FailReturnedInfo{
  449 + FailReason: "必填项为空",
  450 + ImportDividendsReturnedOrderData: &importDividendsReturnedOrderCommand.DividendsReturnedOrderData[i],
  451 + }
369 nullCellError = append(nullCellError, myRow) 452 nullCellError = append(nullCellError, myRow)
370 nullFlag = false 453 nullFlag = false
371 } 454 }
@@ -384,24 +467,22 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide @@ -384,24 +467,22 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide
384 467
385 // 单元格类型校验 468 // 单元格类型校验
386 typeError := make([]interface{}, 0) 469 typeError := make([]interface{}, 0)
387 - for i, dividendsReturnedOrder := range importDividendsReturnedOrderCommand.DividendsReturnedOrderData { // 行  
388 - var myRow []string 470 + for _, dividendsReturnedOrder := range importDividendsReturnedOrderCommand.DividendsReturnedOrderData { // 行
  471 + var myRow *domain.FailReturnedInfo
389 t := reflect.TypeOf(dividendsReturnedOrder) 472 t := reflect.TypeOf(dividendsReturnedOrder)
390 v := reflect.ValueOf(dividendsReturnedOrder) 473 v := reflect.ValueOf(dividendsReturnedOrder)
391 for k := 0; k < t.NumField(); k++ { // 列 474 for k := 0; k < t.NumField(); k++ { // 列
392 - r := strconv.Itoa(i + 1)  
393 - col := strconv.Itoa(k + 1)  
394 -  
395 switch k { 475 switch k {
396 case 3: // 退货日期校验 476 case 3: // 退货日期校验
397 { 477 {
398 regexpStr := `(\d{4})/(\d{2})/(\d{2})` 478 regexpStr := `(\d{4})/(\d{2})/(\d{2})`
399 ok := regexp.MustCompile(regexpStr).MatchString(fmt.Sprintf("%v", v.Field(k).Interface())) 479 ok := regexp.MustCompile(regexpStr).MatchString(fmt.Sprintf("%v", v.Field(k).Interface()))
400 if !ok { 480 if !ok {
401 - var tmpRow []string  
402 - tmpRow = append(tmpRow, "第"+r+"行第"+col+"列退货日期格式错误,请输入正确的退货日期") // 错误信息  
403 - tmpRow = append(tmpRow, r) // 行号  
404 - tmpRow = append(tmpRow, fmt.Sprintf("%v", v.Interface())) // 错误行数据 481 + var tmpRow *domain.FailReturnedInfo
  482 + tmpRow = &domain.FailReturnedInfo{
  483 + FailReason: "退货日期格式错误,请输入正确的退货日期",
  484 + ImportDividendsReturnedOrderData: &dividendsReturnedOrder,
  485 + }
405 myRow = tmpRow 486 myRow = tmpRow
406 } 487 }
407 } 488 }
@@ -410,10 +491,11 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide @@ -410,10 +491,11 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide
410 regexpStr := `(\d{4})/(\d{2})/(\d{2})` 491 regexpStr := `(\d{4})/(\d{2})/(\d{2})`
411 ok := regexp.MustCompile(regexpStr).MatchString(fmt.Sprintf("%v", v.Field(k).Interface())) 492 ok := regexp.MustCompile(regexpStr).MatchString(fmt.Sprintf("%v", v.Field(k).Interface()))
412 if !ok { 493 if !ok {
413 - var tmpRow []string  
414 - tmpRow = append(tmpRow, "第"+r+"行第"+col+"列订单日期格式错误,请输入正确的订单日期") // 错误信息  
415 - tmpRow = append(tmpRow, r) // 行号  
416 - tmpRow = append(tmpRow, fmt.Sprintf("%v", v.Interface())) // 错误行数据 494 + var tmpRow *domain.FailReturnedInfo
  495 + tmpRow = &domain.FailReturnedInfo{
  496 + FailReason: "订单日期格式错误,请输入正确的订单日期",
  497 + ImportDividendsReturnedOrderData: &dividendsReturnedOrder,
  498 + }
417 myRow = tmpRow 499 myRow = tmpRow
418 } 500 }
419 } 501 }
@@ -422,18 +504,20 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide @@ -422,18 +504,20 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide
422 //参数类型转换 504 //参数类型转换
423 orderGoodQuantity, err := strconv.ParseInt(fmt.Sprintf("%v", v.Field(k).Interface()), 10, 64) 505 orderGoodQuantity, err := strconv.ParseInt(fmt.Sprintf("%v", v.Field(k).Interface()), 10, 64)
424 if err != nil { 506 if err != nil {
425 - var tmpRow []string  
426 - tmpRow = append(tmpRow, "第"+r+"行第"+col+"列退货数量格式错误,退货数量必须整数") // 错误信息  
427 - tmpRow = append(tmpRow, r) // 行号  
428 - tmpRow = append(tmpRow, fmt.Sprintf("%v", v.Interface())) // 错误行数据 507 + var tmpRow *domain.FailReturnedInfo
  508 + tmpRow = &domain.FailReturnedInfo{
  509 + FailReason: "退货数量格式错误,退货数量必须整数",
  510 + ImportDividendsReturnedOrderData: &dividendsReturnedOrder,
  511 + }
429 myRow = tmpRow 512 myRow = tmpRow
430 } 513 }
431 // 正负判断 514 // 正负判断
432 if orderGoodQuantity < 0 { 515 if orderGoodQuantity < 0 {
433 - var tmpRow []string  
434 - tmpRow = append(tmpRow, "第"+r+"行第"+col+"列退货数量必须大于0,请重新填写") // 错误信息  
435 - tmpRow = append(tmpRow, r) // 行号  
436 - tmpRow = append(tmpRow, fmt.Sprintf("%v", v.Interface())) // 错误行数据 516 + var tmpRow *domain.FailReturnedInfo
  517 + tmpRow = &domain.FailReturnedInfo{
  518 + FailReason: "退货数量必须大于0,请重新填写",
  519 + ImportDividendsReturnedOrderData: &dividendsReturnedOrder,
  520 + }
437 myRow = tmpRow 521 myRow = tmpRow
438 } 522 }
439 } 523 }
@@ -442,19 +526,21 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide @@ -442,19 +526,21 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide
442 // 参数类型转换 526 // 参数类型转换
443 univalent, typeErr := strconv.ParseFloat(fmt.Sprintf("%v", v.Field(k).Interface()), 64) 527 univalent, typeErr := strconv.ParseFloat(fmt.Sprintf("%v", v.Field(k).Interface()), 64)
444 if typeErr != nil { 528 if typeErr != nil {
445 - var tmpRow []string  
446 - tmpRow = append(tmpRow, "第"+r+"行第"+col+"列退货价格格式错误,退货价格必须为数字类型") // 错误信息  
447 - tmpRow = append(tmpRow, r) // 行号  
448 - tmpRow = append(tmpRow, fmt.Sprintf("%v", v.Interface())) // 错误行数据 529 + var tmpRow *domain.FailReturnedInfo
  530 + tmpRow = &domain.FailReturnedInfo{
  531 + FailReason: "退货价格格式错误,退货价格必须为数字类型",
  532 + ImportDividendsReturnedOrderData: &dividendsReturnedOrder,
  533 + }
449 myRow = tmpRow 534 myRow = tmpRow
450 } 535 }
451 536
452 // 长度校验 537 // 长度校验
453 if univalent >= 1e16 { 538 if univalent >= 1e16 {
454 - var tmpRow []string  
455 - tmpRow = append(tmpRow, "第"+r+"行第"+col+"列退货价格超过最大限制,退货价格小数点前面不能超过十六位数字,并保留两位小数") // 错误信息  
456 - tmpRow = append(tmpRow, r) // 行号  
457 - tmpRow = append(tmpRow, fmt.Sprintf("%v", v.Interface())) // 错误行数据 539 + var tmpRow *domain.FailReturnedInfo
  540 + tmpRow = &domain.FailReturnedInfo{
  541 + FailReason: "退货价格超过最大限制,退货价格小数点前面不能超过十六位数字,并保留两位小数",
  542 + ImportDividendsReturnedOrderData: &dividendsReturnedOrder,
  543 + }
458 myRow = tmpRow 544 myRow = tmpRow
459 } 545 }
460 } 546 }
@@ -515,7 +601,7 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide @@ -515,7 +601,7 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide
515 } 601 }
516 602
517 // 产品相关:产品名称,退货数量、退货价格 603 // 产品相关:产品名称,退货数量、退货价格
518 - quantity, err := strconv.ParseInt(dividendsReturnedOrder.OrderGoodQuantity, 10, 64) 604 + quantity, err := strconv.ParseFloat(dividendsReturnedOrder.OrderGoodQuantity, 64)
519 if err != nil { 605 if err != nil {
520 return nil, application.ThrowError(application.ARG_ERROR, err.Error()) 606 return nil, application.ThrowError(application.ARG_ERROR, err.Error())
521 } 607 }
@@ -553,7 +639,7 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide @@ -553,7 +639,7 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide
553 } 639 }
554 } else { // 聚合同一笔订单产品 640 } else { // 聚合同一笔订单产品
555 // 产品相关:产品名称,退货数量、退货价格 641 // 产品相关:产品名称,退货数量、退货价格
556 - quantity, err := strconv.ParseInt(dividendsReturnedOrder.OrderGoodQuantity, 10, 64) 642 + quantity, err := strconv.ParseFloat(dividendsReturnedOrder.OrderGoodQuantity, 64)
557 if err != nil { 643 if err != nil {
558 return nil, application.ThrowError(application.ARG_ERROR, err.Error()) 644 return nil, application.ThrowError(application.ARG_ERROR, err.Error())
559 } 645 }
@@ -655,7 +741,9 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide @@ -655,7 +741,9 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide
655 // 批量导入创建退货单 741 // 批量导入创建退货单
656 for _, dividendsReturnedOrder := range createDividendsReturnedOrderCommands { 742 for _, dividendsReturnedOrder := range createDividendsReturnedOrderCommands {
657 // 生成退货订单号 743 // 生成退货订单号
658 - dividendsReturnedOrderNumber, err := dividendsReturnedOrderDao.GenerateDividendsReturnedOrderNumber() 744 + dividendsReturnedOrderNumber, err := dividendsReturnedOrderDao.GenerateDividendsReturnedOrderNumber(map[string]interface{}{
  745 + "companyId": importDividendsReturnedOrderCommand.CompanyId,
  746 + })
659 if err != nil { 747 if err != nil {
660 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 748 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
661 } 749 }
@@ -663,7 +751,6 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide @@ -663,7 +751,6 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide
663 // 校验退货订单编号是否唯一 751 // 校验退货订单编号是否唯一
664 numberAvailable, err3 := dividendsReturnedOrderDao.CheckDividendsReturnedOrderNumberAvailable(map[string]interface{}{ 752 numberAvailable, err3 := dividendsReturnedOrderDao.CheckDividendsReturnedOrderNumberAvailable(map[string]interface{}{
665 "companyId": importDividendsReturnedOrderCommand.CompanyId, 753 "companyId": importDividendsReturnedOrderCommand.CompanyId,
666 - "orgId": importDividendsReturnedOrderCommand.OrgId,  
667 "dividendsReturnedOrderNumber": dividendsReturnedOrderNumber, 754 "dividendsReturnedOrderNumber": dividendsReturnedOrderNumber,
668 }) 755 })
669 if err3 != nil { 756 if err3 != nil {
@@ -676,10 +763,32 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide @@ -676,10 +763,32 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) ImportDivide
676 // 新增订单产品 763 // 新增订单产品
677 var orderGoods []*domain.OrderGood 764 var orderGoods []*domain.OrderGood
678 var dividendsReturnedOrderAmount float64 765 var dividendsReturnedOrderAmount float64
679 - for _, orderGood := range dividendsReturnedOrder.OrderGoods { 766 + orderGoodErrMap := make(map[int]interface{}, 0)
  767 + for i, orderGood := range dividendsReturnedOrder.OrderGoods {
  768 + // 校验共创合约是否合法
  769 + contractNumberExist := false
  770 + for _, cooperationContract := range cooperationContracts {
  771 + if orderGood.CooperationContractNumber == cooperationContract.CooperationContractNumber {
  772 + contractNumberExist = true
  773 + break
  774 + }
  775 + }
  776 + if !contractNumberExist {
  777 + orderGoodErrMap[dividendsReturnedOrder.OrderGoods[i].LineNumber] = application.ThrowError(application.INTERNAL_SERVER_ERROR, fmt.Sprintf("共创合约编号不存在:%s", err))
  778 + }
  779 +
  780 + // 计算产品金额
  781 + orderGoodAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(orderGood.OrderGoodQuantity)).Float64()
  782 +
  783 + // 校验合约激励类型是否正确
  784 + if orderGood.CooperationContractNumber != "" {
  785 + if cooperationContractsMap[orderGood.CooperationContractNumber] != nil && cooperationContractsMap[orderGood.CooperationContractNumber].IncentivesType != 1 {
  786 + orderGoodErrMap[dividendsReturnedOrder.OrderGoods[i].LineNumber] = application.ThrowError(application.INTERNAL_SERVER_ERROR, "退货单产品不能关联金额激励规则")
  787 + }
  788 + }
680 orderGoods = append(orderGoods, &domain.OrderGood{ 789 orderGoods = append(orderGoods, &domain.OrderGood{
681 OrderGoodId: 0, 790 OrderGoodId: 0,
682 - OrderGoodAmount: orderGood.OrderGoodAmount, 791 + OrderGoodAmount: orderGoodAmount,
683 OrderGoodName: orderGood.OrderGoodName, 792 OrderGoodName: orderGood.OrderGoodName,
684 OrderGoodPrice: orderGood.OrderGoodPrice, 793 OrderGoodPrice: orderGood.OrderGoodPrice,
685 OrderGoodQuantity: orderGood.OrderGoodQuantity, 794 OrderGoodQuantity: orderGood.OrderGoodQuantity,
@@ -1011,6 +1120,32 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) UpdateDivide @@ -1011,6 +1120,32 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) UpdateDivide
1011 return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(updateDividendsReturnedOrderCommand.DividendsReturnedOrderId))) 1120 return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(updateDividendsReturnedOrderCommand.DividendsReturnedOrderId)))
1012 } 1121 }
1013 1122
  1123 + // 合约仓储初始化
  1124 + var cooperationContractRepository domain.CooperationContractRepository
  1125 + if value, err := factory.CreateCooperationContractRepository(map[string]interface{}{
  1126 + "transactionContext": transactionContext,
  1127 + }); err != nil {
  1128 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  1129 + } else {
  1130 + cooperationContractRepository = value
  1131 + }
  1132 +
  1133 + // 查找合约
  1134 + cooperationContractsMap := make(map[string]*domain.CooperationContract)
  1135 + if count, cooperationContracts, err := cooperationContractRepository.Find(map[string]interface{}{
  1136 + "offsetLimit": false,
  1137 + "companyId": updateDividendsReturnedOrderCommand.CompanyId,
  1138 + "orgId": updateDividendsReturnedOrderCommand.OrgId,
  1139 + }); err != nil {
  1140 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  1141 + } else {
  1142 + if count > 0 {
  1143 + for _, cooperationContract := range cooperationContracts {
  1144 + cooperationContractsMap[cooperationContract.CooperationContractNumber] = cooperationContract
  1145 + }
  1146 + }
  1147 + }
  1148 +
1014 // 获取订单产品 1149 // 获取订单产品
1015 var orderGoods []*domain.OrderGood 1150 var orderGoods []*domain.OrderGood
1016 var dividendsReturnedOrderAmount float64 1151 var dividendsReturnedOrderAmount float64
@@ -1020,9 +1155,33 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) UpdateDivide @@ -1020,9 +1155,33 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) UpdateDivide
1020 if err3 != nil { 1155 if err3 != nil {
1021 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err3.Error()) 1156 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err3.Error())
1022 } 1157 }
  1158 +
  1159 + // 退货产品金额计算
  1160 + orderGoodAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodPrice).Mul(decimal.NewFromFloat(orderGood.OrderGoodQuantity)).Float64()
  1161 +
  1162 + // 校验合约激励类型是否正确
  1163 + ruleMatchedFlag := false
  1164 + if orderGood.CooperationContractNumber != "" {
  1165 + if cooperationContractsMap[orderGood.CooperationContractNumber] != nil && cooperationContractsMap[orderGood.CooperationContractNumber].IncentivesType != 1 {
  1166 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "退货单产品不能关联金额激励规则")
  1167 + }
  1168 + // 校验产品关联合约的激励规则是否匹配订单时间
  1169 + if cooperationContractsMap[orderGood.CooperationContractNumber] != nil {
  1170 + for _, incentivesRule := range cooperationContractsMap[orderGood.CooperationContractNumber].DividendsIncentivesRules {
  1171 + if (orderTime.After(incentivesRule.DividendsIncentivesStageStart) || orderTime.Equal(incentivesRule.DividendsIncentivesStageStart)) && (orderTime.Before(incentivesRule.DividendsIncentivesStageEnd) || orderTime.Equal(incentivesRule.DividendsIncentivesStageEnd)) {
  1172 + ruleMatchedFlag = true
  1173 + break
  1174 + }
  1175 + }
  1176 + }
  1177 + if !ruleMatchedFlag {
  1178 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "订单时间无法匹配分红激励规则,请重新选择")
  1179 + }
  1180 + }
  1181 +
1023 orderGoods = append(orderGoods, &domain.OrderGood{ 1182 orderGoods = append(orderGoods, &domain.OrderGood{
1024 OrderGoodId: orderGoodId, 1183 OrderGoodId: orderGoodId,
1025 - OrderGoodAmount: orderGood.OrderGoodAmount, 1184 + OrderGoodAmount: orderGoodAmount,
1026 OrderGoodName: orderGood.OrderGoodName, 1185 OrderGoodName: orderGood.OrderGoodName,
1027 OrderGoodPrice: orderGood.OrderGoodPrice, 1186 OrderGoodPrice: orderGood.OrderGoodPrice,
1028 OrderGoodQuantity: orderGood.OrderGoodQuantity, 1187 OrderGoodQuantity: orderGood.OrderGoodQuantity,
@@ -1036,7 +1195,7 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) UpdateDivide @@ -1036,7 +1195,7 @@ func (dividendsReturnedOrderService *DividendsReturnedOrderService) UpdateDivide
1036 UpdatedAt: time.Now(), 1195 UpdatedAt: time.Now(),
1037 }) 1196 })
1038 // 计算分红退货单金额 1197 // 计算分红退货单金额
1039 - dividendsReturnedOrderAmount = dividendsReturnedOrderAmount + orderGood.OrderGoodAmount 1198 + dividendsReturnedOrderAmount, _ = decimal.NewFromFloat(dividendsReturnedOrderAmount).Add(decimal.NewFromFloat(orderGood.OrderGoodAmount)).Float64()
1040 } 1199 }
1041 1200
1042 if err := dividendsReturnedOrder.Update(tool_funs.SimpleStructToMap(updateDividendsReturnedOrderCommand)); err != nil { 1201 if err := dividendsReturnedOrder.Update(tool_funs.SimpleStructToMap(updateDividendsReturnedOrderCommand)); err != nil {
@@ -60,3 +60,11 @@ func CreateDividendsEstimateDao(options map[string]interface{}) (*dao.DividendsE @@ -60,3 +60,11 @@ func CreateDividendsEstimateDao(options map[string]interface{}) (*dao.DividendsE
60 } 60 }
61 return dao.NewDividendsEstimateDao(transactionContext) 61 return dao.NewDividendsEstimateDao(transactionContext)
62 } 62 }
  63 +
  64 +func CreateCooperationApplicationDao(options map[string]interface{}) (*dao.CooperationApplicationDao, error) {
  65 + var transactionContext *pg.TransactionContext
  66 + if value, ok := options["transactionContext"]; ok {
  67 + transactionContext = value.(*pg.TransactionContext)
  68 + }
  69 + return dao.NewCooperationApplicationDao(transactionContext)
  70 +}
@@ -4,7 +4,9 @@ import "os" @@ -4,7 +4,9 @@ import "os"
4 4
5 const SERVICE_NAME = "allied-creation-cooperation" 5 const SERVICE_NAME = "allied-creation-cooperation"
6 6
7 -// LOG_LEVEL 日志相关设置 7 +// LOG_TYPE 日志相关设置
  8 +var LOG_TYPE = "terminal" // file, terminal, es
  9 +var LOG_FRAMEWORK = "beego" // beego logrus
8 var LOG_LEVEL = "debug" 10 var LOG_LEVEL = "debug"
9 var LOG_FILE = "app.log" 11 var LOG_FILE = "app.log"
10 var LOG_PREFIX = "[allied-creation-cooperation]" 12 var LOG_PREFIX = "[allied-creation-cooperation]"
@@ -16,9 +18,15 @@ var USER_MODULE_HOST = "http://127.0.0.1:8081" @@ -16,9 +18,15 @@ var USER_MODULE_HOST = "http://127.0.0.1:8081"
16 var BASIC_MODULE_HOST = "http://127.0.0.1:8080" 18 var BASIC_MODULE_HOST = "http://127.0.0.1:8080"
17 19
18 func init() { 20 func init() {
  21 + if os.Getenv("LOG_TYPE") != "" {
  22 + LOG_TYPE = os.Getenv("LOG_TYPE")
  23 + }
19 if os.Getenv("LOG_LEVEL") != "" { 24 if os.Getenv("LOG_LEVEL") != "" {
20 LOG_LEVEL = os.Getenv("LOG_LEVEL") 25 LOG_LEVEL = os.Getenv("LOG_LEVEL")
21 } 26 }
  27 + if os.Getenv("LOG_FRAMEWORK") != "" {
  28 + LOG_FRAMEWORK = os.Getenv("LOG_FRAMEWORK")
  29 + }
22 if os.Getenv("LOG_FILE") != "" { 30 if os.Getenv("LOG_FILE") != "" {
23 LOG_FILE = os.Getenv("LOG_FILE") 31 LOG_FILE = os.Getenv("LOG_FILE")
24 } 32 }
@@ -28,4 +36,7 @@ func init() { @@ -28,4 +36,7 @@ func init() {
28 if os.Getenv("USER_MODULE_HOST") != "" { 36 if os.Getenv("USER_MODULE_HOST") != "" {
29 USER_MODULE_HOST = os.Getenv("USER_MODULE_HOST") 37 USER_MODULE_HOST = os.Getenv("USER_MODULE_HOST")
30 } 38 }
  39 + if os.Getenv("BASIC_MODULE_HOST") != "" {
  40 + BASIC_MODULE_HOST = os.Getenv("BASIC_MODULE_HOST")
  41 + }
31 } 42 }
@@ -2,13 +2,13 @@ package constant @@ -2,13 +2,13 @@ package constant
2 2
3 import "os" 3 import "os"
4 4
5 -// kafka 地址  
6 -var KAFKA_HOSTS = "" 5 +// KAFKA_HOSTS kafka 地址
  6 +var KAFKA_HOSTS = "192.168.0.250:9092,192.168.0.251:9092,192.168.0.252:9092"
7 7
8 -// kafka topic log stash 8 +// TOPIC_LOG_STASH kafka topic log stash
9 var TOPIC_LOG_STASH = "go_stash_dev" 9 var TOPIC_LOG_STASH = "go_stash_dev"
10 10
11 -// 是否启用日志收集 (本地不启用) 11 +// ENABLE_KAFKA_LOG 是否启用日志收集 (本地不启用)
12 var ENABLE_KAFKA_LOG = false 12 var ENABLE_KAFKA_LOG = false
13 13
14 func init() { 14 func init() {
@@ -19,6 +19,10 @@ func init() { @@ -19,6 +19,10 @@ func init() {
19 POSTGRESQL_PORT = os.Getenv("TOPIC_LOG_STASH") 19 POSTGRESQL_PORT = os.Getenv("TOPIC_LOG_STASH")
20 } 20 }
21 if os.Getenv("ENABLE_KAFKA_LOG") != "" { 21 if os.Getenv("ENABLE_KAFKA_LOG") != "" {
22 - DISABLE_CREATE_TABLE = true 22 + if os.Getenv("ENABLE_KAFKA_LOG") == "true" {
  23 + ENABLE_KAFKA_LOG = true
  24 + } else if os.Getenv("ENABLE_KAFKA_LOG") == "false" {
  25 + ENABLE_KAFKA_LOG = false
  26 + }
23 } 27 }
24 } 28 }
@@ -26,8 +26,8 @@ type CooperationApplication struct { @@ -26,8 +26,8 @@ type CooperationApplication struct {
26 CooperationProject *CooperationProject `json:"cooperationProject"` 26 CooperationProject *CooperationProject `json:"cooperationProject"`
27 // 数据所属组织机构 27 // 数据所属组织机构
28 Org *Org `json:"org"` 28 Org *Org `json:"org"`
29 - // 是否被取消标志位  
30 - IsCanceled bool `json:"isCanceled"` 29 + // 是否被取消标志位 1未取消,2取消
  30 + IsCanceled int32 `json:"isCanceled"`
31 // 公司 31 // 公司
32 Company *Company `json:"company"` 32 Company *Company `json:"company"`
33 // 创建时间 33 // 创建时间
@@ -55,7 +55,7 @@ func (cooperationApplication *CooperationApplication) Identify() interface{} { @@ -55,7 +55,7 @@ func (cooperationApplication *CooperationApplication) Identify() interface{} {
55 55
56 func (cooperationApplication *CooperationApplication) Update(data map[string]interface{}) error { 56 func (cooperationApplication *CooperationApplication) Update(data map[string]interface{}) error {
57 if isCanceled, ok := data["isCanceled"]; ok { 57 if isCanceled, ok := data["isCanceled"]; ok {
58 - cooperationApplication.IsCanceled = isCanceled.(bool) 58 + cooperationApplication.IsCanceled = isCanceled.(int32)
59 } 59 }
60 if cooperationApplicationAttachment, ok := data["cooperationApplicationAttachment"]; ok { 60 if cooperationApplicationAttachment, ok := data["cooperationApplicationAttachment"]; ok {
61 cooperationApplication.CooperationApplicationAttachment = cooperationApplicationAttachment.([]*Attachment) 61 cooperationApplication.CooperationApplicationAttachment = cooperationApplicationAttachment.([]*Attachment)
@@ -22,7 +22,7 @@ type CooperationProject struct { @@ -22,7 +22,7 @@ type CooperationProject struct {
22 CooperationMode *CooperationMode `json:"cooperationMode"` 22 CooperationMode *CooperationMode `json:"cooperationMode"`
23 // 共创项目发起部门 23 // 共创项目发起部门
24 Department *Department `json:"department"` 24 Department *Department `json:"department"`
25 - // 共创项目承接对象,1员工,2共创用户,3公开,可以多选 25 + // 共创项目承接对象,1员工,2共创用户,4公开,可以多选
26 CooperationProjectUndertakerTypes []int32 `json:"cooperationProjectUndertakerTypes"` 26 CooperationProjectUndertakerTypes []int32 `json:"cooperationProjectUndertakerTypes"`
27 // 数据所属组织机构 27 // 数据所属组织机构
28 Org *Org `json:"org"` 28 Org *Org `json:"org"`
@@ -61,20 +61,12 @@ type ImportInfo struct { @@ -61,20 +61,12 @@ type ImportInfo struct {
61 // FailInfo 返回的失败信息 61 // FailInfo 返回的失败信息
62 type FailInfo struct { 62 type FailInfo struct {
63 FailReason string `json:"failReason"` 63 FailReason string `json:"failReason"`
64 - //OriginalOrderNum string `json:"originalOrderNum"`  
65 - //DividendsCustomerName string `json:"dividendsCustomerName"`  
66 - //OrderGoodName string `json:"orderGoodName"`  
67 - //OrderTime string `json:"orderTime"`  
68 - //RegionName string `json:"regionName"`  
69 - //OrderGoodQuantity string `json:"orderGoodQuantity"`  
70 - //OrderGoodPrice string `json:"orderGoodPrice"`  
71 - //Expense string `json:"expense"`  
72 - //CooperationContractNumber string `json:"cooperationContractNumber"`  
73 *command.ImportDividendsOrderData 64 *command.ImportDividendsOrderData
74 } 65 }
75 66
76 type DividendsOrderRepository interface { 67 type DividendsOrderRepository interface {
77 Save(dividendsOrder *DividendsOrder) (*DividendsOrder, error) 68 Save(dividendsOrder *DividendsOrder) (*DividendsOrder, error)
  69 + SaveMany(dividendsOrders []*DividendsOrder) ([]*DividendsOrder, error)
78 UpdateMany(dividendsOrders []*DividendsOrder) ([]*DividendsOrder, error) 70 UpdateMany(dividendsOrders []*DividendsOrder) ([]*DividendsOrder, error)
79 Remove(dividendsOrder *DividendsOrder) (*DividendsOrder, error) 71 Remove(dividendsOrder *DividendsOrder) (*DividendsOrder, error)
80 BatchRemove(dividendsOrders []*DividendsOrder) ([]*DividendsOrder, error) 72 BatchRemove(dividendsOrders []*DividendsOrder) ([]*DividendsOrder, error)
1 package domain 1 package domain
2 2
3 -import "time" 3 +import (
  4 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/application/dividendsReturnedOrder/command"
  5 + "time"
  6 +)
4 7
5 // DividendsReturnedOrder 分红退货单实体 8 // DividendsReturnedOrder 分红退货单实体
6 type DividendsReturnedOrder struct { 9 type DividendsReturnedOrder struct {
@@ -46,8 +49,15 @@ type DividendsReturnedOrder struct { @@ -46,8 +49,15 @@ type DividendsReturnedOrder struct {
46 OperateTime time.Time `json:"operateTime"` 49 OperateTime time.Time `json:"operateTime"`
47 } 50 }
48 51
  52 +// FailReturnedInfo 返回的失败信息
  53 +type FailReturnedInfo struct {
  54 + FailReason string `json:"failReason"`
  55 + *command.ImportDividendsReturnedOrderData
  56 +}
  57 +
49 type DividendsReturnedOrderRepository interface { 58 type DividendsReturnedOrderRepository interface {
50 Save(dividendsReturnedOrder *DividendsReturnedOrder) (*DividendsReturnedOrder, error) 59 Save(dividendsReturnedOrder *DividendsReturnedOrder) (*DividendsReturnedOrder, error)
  60 + SaveMany(dividendsReturnedOrders []*DividendsReturnedOrder) ([]*DividendsReturnedOrder, error)
51 UpdateMany(dividendsReturnedOrder []*DividendsReturnedOrder) ([]*DividendsReturnedOrder, error) 61 UpdateMany(dividendsReturnedOrder []*DividendsReturnedOrder) ([]*DividendsReturnedOrder, error)
52 Remove(dividendsReturnedOrder *DividendsReturnedOrder) (*DividendsReturnedOrder, error) 62 Remove(dividendsReturnedOrder *DividendsReturnedOrder) (*DividendsReturnedOrder, error)
53 BatchRemove(dividendsReturnedOrders []*DividendsReturnedOrder) ([]*DividendsReturnedOrder, error) 63 BatchRemove(dividendsReturnedOrders []*DividendsReturnedOrder) ([]*DividendsReturnedOrder, error)
@@ -18,7 +18,7 @@ type OrderGood struct { @@ -18,7 +18,7 @@ type OrderGood struct {
18 // 订单产品单价 18 // 订单产品单价
19 OrderGoodPrice float64 `json:"orderGoodPrice"` 19 OrderGoodPrice float64 `json:"orderGoodPrice"`
20 // 订单产品数量 20 // 订单产品数量
21 - OrderGoodQuantity int64 `json:"orderGoodQuantity,string"` 21 + OrderGoodQuantity float64 `json:"orderGoodQuantity,string"`
22 // 关联分红订单号 22 // 关联分红订单号
23 DividendsOrderNumber string `json:"dividendsOrderNumber"` 23 DividendsOrderNumber string `json:"dividendsOrderNumber"`
24 // 关联的分红退货单号 24 // 关联的分红退货单号
@@ -66,7 +66,7 @@ func (orderGood *OrderGood) Update(data map[string]interface{}) error { @@ -66,7 +66,7 @@ func (orderGood *OrderGood) Update(data map[string]interface{}) error {
66 orderGood.OrderGoodPrice = orderGoodPrice.(float64) 66 orderGood.OrderGoodPrice = orderGoodPrice.(float64)
67 } 67 }
68 if orderGoodQuantity, ok := data["orderGoodQuantity"]; ok { 68 if orderGoodQuantity, ok := data["orderGoodQuantity"]; ok {
69 - orderGood.OrderGoodQuantity = orderGoodQuantity.(int64) 69 + orderGood.OrderGoodQuantity = orderGoodQuantity.(float64)
70 } 70 }
71 if cooperationContractNumber, ok := data["cooperationContractNumber"]; ok { 71 if cooperationContractNumber, ok := data["cooperationContractNumber"]; ok {
72 orderGood.CooperationContractNumber = cooperationContractNumber.(string) 72 orderGood.CooperationContractNumber = cooperationContractNumber.(string)
@@ -31,3 +31,10 @@ type Relevant struct { @@ -31,3 +31,10 @@ type Relevant struct {
31 // 公司 31 // 公司
32 Company *Company `json:"company"` 32 Company *Company `json:"company"`
33 } 33 }
  34 +
  35 +func (relevant *Relevant) Identify() interface{} {
  36 + if relevant.RelevantId == 0 {
  37 + return nil
  38 + }
  39 + return relevant.RelevantId
  40 +}
1 package service 1 package service
2 2
3 import ( 3 import (
  4 + "fmt"
4 coreDomain "github.com/linmadan/egglib-go/core/domain" 5 coreDomain "github.com/linmadan/egglib-go/core/domain"
5 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain" 6 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain"
  7 + "time"
6 ) 8 )
7 9
8 type DividendsEstimateDetail struct { 10 type DividendsEstimateDetail struct {
9 - DividendsUser *domain.User `json:"dividendsUser"` // 共创参与(分红用户)  
10 - DividendsParticipateType int32 `json:"dividendsParticipateType"` // 参与类型  
11 - DividendsStage int32 `json:"dividendsStage"` // 分红阶段  
12 - DividendsAmount float64 `json:"dividendsAmount"` // 分红金额 11 + DividendsUser *domain.User `json:"dividendsUser"` // 共创参与(分红用户)
  12 + DividendsParticipateType int32 `json:"dividendsParticipateType"` // 参与类型
  13 + DividendsStage int32 `json:"dividendsStage"` // 分红阶段
  14 + DividendsAmount float64 `json:"dividendsAmount"` // 分红金额
  15 + OrderOrReturnedOrderNumber string `json:"orderOrReturnedOrderNumber"` // 分红订单号或退货单号
  16 + IsSuccessfully bool `json:"isSuccessfully"` // 是否预算成功
  17 + Reason string `json:"reason"` // 错误原因
  18 +}
  19 +
  20 +// GenerateSpecificDividendsEstimateNumber 批量生成自定义分红预算单号
  21 +func (DividendsEstimateDetail *DividendsEstimateDetail) GenerateSpecificDividendsEstimateNumber(count int64, index int64) (string, error) {
  22 + currentTime := time.Now()
  23 + if count+index < 1000 {
  24 + countStr := fmt.Sprintf("%03d", count+index+1)
  25 + timestamp := currentTime.Unix()
  26 + timeNow := time.Unix(timestamp, 0)
  27 + timeString := timeNow.Format("20060102")
  28 + timeString = timeString[2:len(timeString)]
  29 + dividendsEstimateNumber := "FH" + timeString + "#" + countStr
  30 + return dividendsEstimateNumber, nil
  31 + } else {
  32 + countStr := fmt.Sprintf("%d", count+index+1)
  33 + timestamp := currentTime.Unix()
  34 + timeNow := time.Unix(timestamp, 0)
  35 + timeString := timeNow.Format("20060102")
  36 + timeString = timeString[2:len(timeString)]
  37 + dividendsEstimateNumber := "FH" + timeString + "#" + countStr
  38 + return dividendsEstimateNumber, nil
  39 + }
13 } 40 }
14 41
15 type ConfirmDividendsIncentivesEstimateService interface { 42 type ConfirmDividendsIncentivesEstimateService interface {
@@ -9,4 +9,5 @@ type UserService interface { @@ -9,4 +9,5 @@ type UserService interface {
9 RelevantFrom(companyId int64, orgId int64, userId int64) (*domain.Relevant, error) // 获取相关人 9 RelevantFrom(companyId int64, orgId int64, userId int64) (*domain.Relevant, error) // 获取相关人
10 SalesmanFrom(companyId int64, orgId int64, userId int64) (*domain.Salesman, error) // 获取业务员 10 SalesmanFrom(companyId int64, orgId int64, userId int64) (*domain.Salesman, error) // 获取业务员
11 OperatorFrom(companyId int64, orgId int64, userId int64) (*domain.User, error) // 获取操作人 11 OperatorFrom(companyId int64, orgId int64, userId int64) (*domain.User, error) // 获取操作人
  12 + VisitorFrom(companyId int64, orgId int64, userId int64) (*domain.User, error) // 获取游客
12 } 13 }
@@ -37,3 +37,10 @@ type Undertaker struct { @@ -37,3 +37,10 @@ type Undertaker struct {
37 // 合同附件 37 // 合同附件
38 ContractAttachment []*Attachment `json:"contractAttachment"` 38 ContractAttachment []*Attachment `json:"contractAttachment"`
39 } 39 }
  40 +
  41 +func (undertaker *Undertaker) Identify() interface{} {
  42 + if undertaker.UndertakerId == 0 {
  43 + return nil
  44 + }
  45 + return undertaker.UndertakerId
  46 +}
  1 +package dao
  2 +
  3 +import (
  4 + "fmt"
  5 + pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
  6 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/pg/models"
  7 +)
  8 +
  9 +type CooperationApplicationDao struct {
  10 + transactionContext *pgTransaction.TransactionContext
  11 +}
  12 +
  13 +// CheckApplicationExist 判断该申请人是否提交过申请
  14 +func (dao *CooperationApplicationDao) CheckApplicationExist(queryOptions map[string]interface{}) (bool, error) {
  15 + tx := dao.transactionContext.PgTx
  16 + var cooperationApplicationModels []*models.CooperationApplication
  17 + query := tx.Model(&cooperationApplicationModels)
  18 + if cooperationProjectNumber, ok := queryOptions["cooperationProjectNumber"]; ok && cooperationProjectNumber != "" {
  19 + query = query.Where("cooperation_project_number = ?", cooperationProjectNumber)
  20 + }
  21 + if companyId, ok := queryOptions["companyId"]; ok && companyId.(int64) != 0 {
  22 + query = query.Where(`cooperation_application.company @> '{"companyId":"?"}'`, companyId)
  23 + }
  24 + if orgId, ok := queryOptions["orgId"]; ok && orgId.(int64) != 0 {
  25 + query = query.Where(`cooperation_application.org @> '{"orgId":"?"}'`, orgId)
  26 + }
  27 + if applicantId, ok := queryOptions["applicantId"]; ok && applicantId.(int64) != 0 {
  28 + query = query.Where(`cooperation_application.cooperation_application_applicant @>'{"userId":"?"}'`, applicantId)
  29 + }
  30 + if visitorUserBaseId, ok := queryOptions["visitorUserBaseId"]; ok && visitorUserBaseId.(int64) != 0 {
  31 + query = query.Where(`cooperation_application.cooperation_application_applicant @>'{"userBaseId":"?"}'`, visitorUserBaseId)
  32 + }
  33 + if applicantBaseId, ok := queryOptions["applicantBaseId"]; ok && applicantBaseId.(int64) != 0 {
  34 + query = query.Where(`cooperation_application.cooperation_application_applicant @>'{"userBaseId":"?"}'`, applicantBaseId)
  35 + }
  36 + ok, err := query.Exists()
  37 + return ok, err
  38 +}
  39 +
  40 +func NewCooperationApplicationDao(transactionContext *pgTransaction.TransactionContext) (*CooperationApplicationDao, error) {
  41 + if transactionContext == nil {
  42 + return nil, fmt.Errorf("transactionContext参数不能为nil")
  43 + } else {
  44 + return &CooperationApplicationDao{
  45 + transactionContext: transactionContext,
  46 + }, nil
  47 + }
  48 +}
@@ -2,8 +2,12 @@ package dao @@ -2,8 +2,12 @@ package dao
2 2
3 import ( 3 import (
4 "fmt" 4 "fmt"
  5 + "github.com/go-pg/pg/v10"
  6 + "github.com/linmadan/egglib-go/persistent/pg/sqlbuilder"
5 pgTransaction "github.com/linmadan/egglib-go/transaction/pg" 7 pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
  8 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain"
6 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/pg/models" 9 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/pg/models"
  10 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/pg/transform"
7 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/utils" 11 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/utils"
8 "time" 12 "time"
9 ) 13 )
@@ -13,7 +17,7 @@ type CooperationContractDao struct { @@ -13,7 +17,7 @@ type CooperationContractDao struct {
13 } 17 }
14 18
15 // GenerateContractNumber 生成共创合约编号 19 // GenerateContractNumber 生成共创合约编号
16 -func (dao *CooperationContractDao) GenerateContractNumber() (string, error) { 20 +func (dao *CooperationContractDao) GenerateContractNumber(queryOptions map[string]interface{}) (string, error) {
17 tx := dao.transactionContext.PgTx 21 tx := dao.transactionContext.PgTx
18 var cooperationContractModels []*models.CooperationContract 22 var cooperationContractModels []*models.CooperationContract
19 query := tx.Model(&cooperationContractModels) 23 query := tx.Model(&cooperationContractModels)
@@ -22,16 +26,30 @@ func (dao *CooperationContractDao) GenerateContractNumber() (string, error) { @@ -22,16 +26,30 @@ func (dao *CooperationContractDao) GenerateContractNumber() (string, error) {
22 nextDayZeroTime := utils.GetNextDayZeroTime(currentTime) 26 nextDayZeroTime := utils.GetNextDayZeroTime(currentTime)
23 query.Where("cooperation_contract.created_at >= ?", todayZeroTime) 27 query.Where("cooperation_contract.created_at >= ?", todayZeroTime)
24 query.Where("cooperation_contract.created_at < ?", nextDayZeroTime) 28 query.Where("cooperation_contract.created_at < ?", nextDayZeroTime)
  29 + if companyId, ok := queryOptions["companyId"]; ok && companyId.(int64) != 0 {
  30 + query = query.Where(`cooperation_contract.company @> '{"companyId":"?"}'`, companyId)
  31 + }
25 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil { 32 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil {
26 return "", err 33 return "", err
27 } else { 34 } else {
28 - countStr := fmt.Sprintf("%03d", count+1)  
29 - timestamp := currentTime.Unix()  
30 - timeNow := time.Unix(timestamp, 0)  
31 - timeString := timeNow.Format("20060102")  
32 - timeString = timeString[2:len(timeString)]  
33 - contractNumber := "HY" + timeString + "#" + countStr  
34 - return contractNumber, nil 35 + if count < 1000 {
  36 + countStr := fmt.Sprintf("%03d", count+1)
  37 + timestamp := currentTime.Unix()
  38 + timeNow := time.Unix(timestamp, 0)
  39 + timeString := timeNow.Format("20060102")
  40 + timeString = timeString[2:len(timeString)]
  41 + contractNumber := "HY" + timeString + "#" + countStr
  42 + return contractNumber, nil
  43 + } else {
  44 + countStr := fmt.Sprintf("%d", count+1)
  45 + timestamp := currentTime.Unix()
  46 + timeNow := time.Unix(timestamp, 0)
  47 + timeString := timeNow.Format("20060102")
  48 + timeString = timeString[2:len(timeString)]
  49 + dividendsOrderNumber := "HY" + timeString + "#" + countStr
  50 + return dividendsOrderNumber, nil
  51 + }
  52 +
35 } 53 }
36 } 54 }
37 55
@@ -146,6 +164,76 @@ func (dao *CooperationContractDao) SearchCooperationContractByUndertaker(queryOp @@ -146,6 +164,76 @@ func (dao *CooperationContractDao) SearchCooperationContractByUndertaker(queryOp
146 } 164 }
147 } 165 }
148 166
  167 +func (dao *CooperationContractDao) Find(queryOptions map[string]interface{}) (int64, []*domain.CooperationContract, error) {
  168 + tx := dao.transactionContext.PgTx
  169 + var cooperationContractModels []*models.CooperationContract
  170 + cooperationContracts := make([]*domain.CooperationContract, 0)
  171 + query := sqlbuilder.BuildQuery(tx.Model(&cooperationContractModels), queryOptions)
  172 + if cooperationContractNumber, ok := queryOptions["cooperationContractNumber"]; ok && cooperationContractNumber != "" {
  173 + query.Where("cooperation_contract_number ilike ?", fmt.Sprintf("%%%s%%", cooperationContractNumber))
  174 + }
  175 + if cooperationContractName, ok := queryOptions["cooperationContactName"]; ok && cooperationContractName != "" {
  176 + query.Where("cooperation_contract_name like ?", fmt.Sprintf("%%%s%%", cooperationContractName))
  177 + }
  178 + if departmentName, ok := queryOptions["departmentName"]; ok && departmentName != "" {
  179 + query.Where(`(cooperation_contract.department->>'departmentName')::test LIKE ?`, fmt.Sprintf("%%%s%%", departmentName))
  180 + }
  181 + if sponsorName, ok := queryOptions["sponsorName"]; ok && sponsorName != "" {
  182 + query.Where(`(cooperation_contract.cooperation_contract_sponsor->>'userName')::text LIKE ?`, fmt.Sprintf("%%%s%%", sponsorName))
  183 + }
  184 + if cooperationContractIds, ok := queryOptions["cooperationContractIds"]; ok && len(cooperationContractIds.([]int64)) != 0 {
  185 + query.Where("cooperation_contract_id in (?)", pg.In(cooperationContractIds))
  186 + }
  187 + if cooperationContractNumbers, ok := queryOptions["cooperationContractNumbers"]; ok && len(cooperationContractNumbers.([]string)) != 0 {
  188 + query.Where("cooperation_contract_number in (?)", pg.In(cooperationContractNumbers))
  189 + }
  190 + if companyId, ok := queryOptions["companyId"]; ok && companyId.(int64) != 0 {
  191 + query.Where("company->>'companyId' = '?'", companyId)
  192 + }
  193 + if orgId, ok := queryOptions["orgId"]; ok && orgId.(int64) != 0 {
  194 + query.Where("org->>'orgId' = '?'", orgId)
  195 + }
  196 + if orgIds, ok := queryOptions["orgIds"]; ok && len(orgIds.([]int64)) > 0 {
  197 + newOrgIds := utils.SliceItoa(orgIds.([]int64))
  198 + query.Where("org->>'orgId' in (?)", pg.In(newOrgIds))
  199 + }
  200 + if incentivesType, ok := queryOptions["incentivesType"]; ok && incentivesType.(int32) != 0 {
  201 + query.Where("incentives_type = ?", incentivesType)
  202 + }
  203 + offsetLimitFlag := true
  204 + if offsetLimit, ok := queryOptions["offsetLimit"]; ok {
  205 + offsetLimitFlag = offsetLimit.(bool)
  206 + }
  207 + if offsetLimitFlag {
  208 + query.SetOffsetAndLimit(20)
  209 + }
  210 + query.SetOrderDirect("cooperation_contract_id", "DESC")
  211 + var count int
  212 + var err error
  213 + if count, err = query.SelectAndCount(); err != nil {
  214 + return 0, cooperationContracts, err
  215 + }
  216 + for _, cooperationContractModel := range cooperationContractModels {
  217 + // 获取分红激励规则列表
  218 + var dividendsIncentivesRuleModels []*models.DividendsIncentivesRule
  219 + var moneyIncentivesRuleModels []*models.MoneyIncentivesRule
  220 + var cooperationContractUndertakerModels []*models.CooperationContractUndertaker
  221 + var cooperationContractRelevantModels []*models.CooperationContractRelevant
  222 + if cooperationContract, err := transform.TransformToCooperationContractDomainModelFromPgModels(
  223 + cooperationContractModel,
  224 + &models.CooperationMode{},
  225 + dividendsIncentivesRuleModels,
  226 + moneyIncentivesRuleModels,
  227 + cooperationContractRelevantModels,
  228 + cooperationContractUndertakerModels); err != nil {
  229 + return 0, cooperationContracts, err
  230 + } else {
  231 + cooperationContracts = append(cooperationContracts, cooperationContract)
  232 + }
  233 + }
  234 + return int64(count), cooperationContracts, nil
  235 +}
  236 +
149 func NewCooperationContractDao(transactionContext *pgTransaction.TransactionContext) (*CooperationContractDao, error) { 237 func NewCooperationContractDao(transactionContext *pgTransaction.TransactionContext) (*CooperationContractDao, error) {
150 if transactionContext == nil { 238 if transactionContext == nil {
151 return nil, fmt.Errorf("transactionContext参数不能为nil") 239 return nil, fmt.Errorf("transactionContext参数不能为nil")
@@ -13,7 +13,7 @@ type CooperationProjectDao struct { @@ -13,7 +13,7 @@ type CooperationProjectDao struct {
13 } 13 }
14 14
15 // GenerateProjectNumber 生成共创项目编码 15 // GenerateProjectNumber 生成共创项目编码
16 -func (dao *CooperationProjectDao) GenerateProjectNumber() (string, error) { 16 +func (dao *CooperationProjectDao) GenerateProjectNumber(queryOptions map[string]interface{}) (string, error) {
17 tx := dao.transactionContext.PgTx 17 tx := dao.transactionContext.PgTx
18 var cooperationProjectModels []*models.CooperationProject 18 var cooperationProjectModels []*models.CooperationProject
19 query := tx.Model(&cooperationProjectModels) 19 query := tx.Model(&cooperationProjectModels)
@@ -22,16 +22,29 @@ func (dao *CooperationProjectDao) GenerateProjectNumber() (string, error) { @@ -22,16 +22,29 @@ func (dao *CooperationProjectDao) GenerateProjectNumber() (string, error) {
22 nextDayZeroTime := utils.GetNextDayZeroTime(currentTime) 22 nextDayZeroTime := utils.GetNextDayZeroTime(currentTime)
23 query.Where("cooperation_project.created_at >= ?", todayZeroTime) 23 query.Where("cooperation_project.created_at >= ?", todayZeroTime)
24 query.Where("cooperation_project.created_at < ?", nextDayZeroTime) 24 query.Where("cooperation_project.created_at < ?", nextDayZeroTime)
  25 + if companyId, ok := queryOptions["companyId"]; ok && companyId.(int64) != 0 {
  26 + query = query.Where(`cooperation_project.company @> '{"companyId":"?"}'`, companyId)
  27 + }
25 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil { 28 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil {
26 return "", err 29 return "", err
27 } else { 30 } else {
28 - countStr := fmt.Sprintf("%03d", count+1)  
29 - timestamp := currentTime.Unix()  
30 - timeNow := time.Unix(timestamp, 0)  
31 - timeString := timeNow.Format("20060102")  
32 - timeString = timeString[2:len(timeString)]  
33 - contractNumber := "XM" + timeString + "#" + countStr  
34 - return contractNumber, nil 31 + if count < 1000 {
  32 + countStr := fmt.Sprintf("%03d", count+1)
  33 + timestamp := currentTime.Unix()
  34 + timeNow := time.Unix(timestamp, 0)
  35 + timeString := timeNow.Format("20060102")
  36 + timeString = timeString[2:len(timeString)]
  37 + contractNumber := "XM" + timeString + "#" + countStr
  38 + return contractNumber, nil
  39 + } else {
  40 + countStr := fmt.Sprintf("%d", count+1)
  41 + timestamp := currentTime.Unix()
  42 + timeNow := time.Unix(timestamp, 0)
  43 + timeString := timeNow.Format("20060102")
  44 + timeString = timeString[2:len(timeString)]
  45 + contractNumber := "XM" + timeString + "#" + countStr
  46 + return contractNumber, nil
  47 + }
35 } 48 }
36 } 49 }
37 50
@@ -2,6 +2,7 @@ package dao @@ -2,6 +2,7 @@ package dao
2 2
3 import ( 3 import (
4 "fmt" 4 "fmt"
  5 + "github.com/go-pg/pg/v10"
5 pgTransaction "github.com/linmadan/egglib-go/transaction/pg" 6 pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
6 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/pg/models" 7 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/pg/models"
7 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/utils" 8 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/utils"
@@ -13,7 +14,7 @@ type CreditAccountDao struct { @@ -13,7 +14,7 @@ type CreditAccountDao struct {
13 } 14 }
14 15
15 // GenerateCreditAccountNumber 生成账期结算单号 16 // GenerateCreditAccountNumber 生成账期结算单号
16 -func (dao *CreditAccountDao) GenerateCreditAccountNumber() (string, error) { 17 +func (dao *CreditAccountDao) GenerateCreditAccountNumber(queryOptions map[string]interface{}) (string, error) {
17 tx := dao.transactionContext.PgTx 18 tx := dao.transactionContext.PgTx
18 var creditAccountModels []*models.CreditAccount 19 var creditAccountModels []*models.CreditAccount
19 query := tx.Model(&creditAccountModels) 20 query := tx.Model(&creditAccountModels)
@@ -22,16 +23,29 @@ func (dao *CreditAccountDao) GenerateCreditAccountNumber() (string, error) { @@ -22,16 +23,29 @@ func (dao *CreditAccountDao) GenerateCreditAccountNumber() (string, error) {
22 nextDayZeroTime := utils.GetNextDayZeroTime(currentTime) 23 nextDayZeroTime := utils.GetNextDayZeroTime(currentTime)
23 query.Where("credit_account.created_at >= ?", todayZeroTime) 24 query.Where("credit_account.created_at >= ?", todayZeroTime)
24 query.Where("credit_account.created_at < ?", nextDayZeroTime) 25 query.Where("credit_account.created_at < ?", nextDayZeroTime)
  26 + if companyId, ok := queryOptions["companyId"]; ok && companyId.(int64) != 0 {
  27 + query = query.Where(`credit_account.company @> '{"companyId":"?"}'`, companyId)
  28 + }
25 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil { 29 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil {
26 return "", err 30 return "", err
27 } else { 31 } else {
28 - countStr := fmt.Sprintf("%03d", count+1)  
29 - timestamp := currentTime.Unix()  
30 - timeNow := time.Unix(timestamp, 0)  
31 - timeString := timeNow.Format("20060102")  
32 - timeString = timeString[2:len(timeString)]  
33 - creditAccountNumber := "JS" + timeString + "#" + countStr  
34 - return creditAccountNumber, nil 32 + if count < 1000 {
  33 + countStr := fmt.Sprintf("%03d", count+1)
  34 + timestamp := currentTime.Unix()
  35 + timeNow := time.Unix(timestamp, 0)
  36 + timeString := timeNow.Format("20060102")
  37 + timeString = timeString[2:len(timeString)]
  38 + creditAccountNumber := "JS" + timeString + "#" + countStr
  39 + return creditAccountNumber, nil
  40 + } else {
  41 + countStr := fmt.Sprintf("%d", count+1)
  42 + timestamp := currentTime.Unix()
  43 + timeNow := time.Unix(timestamp, 0)
  44 + timeString := timeNow.Format("20060102")
  45 + timeString = timeString[2:len(timeString)]
  46 + creditAccountNumber := "JS" + timeString + "#" + countStr
  47 + return creditAccountNumber, nil
  48 + }
35 } 49 }
36 } 50 }
37 51
@@ -58,7 +72,8 @@ func (dao *CreditAccountDao) DividendsStatistics(queryOptions map[string]interfa @@ -58,7 +72,8 @@ func (dao *CreditAccountDao) DividendsStatistics(queryOptions map[string]interfa
58 creditAccount := new(models.CreditAccount) 72 creditAccount := new(models.CreditAccount)
59 query := dao.transactionContext.PgTx.Model(creditAccount) 73 query := dao.transactionContext.PgTx.Model(creditAccount)
60 query.ColumnExpr(`sum(settlement_amount) total`) 74 query.ColumnExpr(`sum(settlement_amount) total`)
61 - query.ColumnExpr(`sum((case when payment_status = 1 then actually_paid_amount else 0 end)) paid`) 75 + query.ColumnExpr(`sum((case when payment_status = 2 then actually_paid_amount else 0 end)) paid`)
  76 + query.ColumnExpr(`sum((case when payment_status = 1 then settlement_amount else 0 end)) unpaid`)
62 query.ColumnExpr(`sum((case when settlement_time is not null then settlement_amount else 0 end)) accounted `) 77 query.ColumnExpr(`sum((case when settlement_time is not null then settlement_amount else 0 end)) accounted `)
63 if v, ok := queryOptions["beginTime"]; ok && !(v.(time.Time).IsZero()) { 78 if v, ok := queryOptions["beginTime"]; ok && !(v.(time.Time).IsZero()) {
64 query.Where(`created_at>? `, queryOptions["beginTime"]) 79 query.Where(`created_at>? `, queryOptions["beginTime"])
@@ -70,6 +85,10 @@ func (dao *CreditAccountDao) DividendsStatistics(queryOptions map[string]interfa @@ -70,6 +85,10 @@ func (dao *CreditAccountDao) DividendsStatistics(queryOptions map[string]interfa
70 if v, ok := queryOptions["orgId"]; ok && v.(int64) > 0 { 85 if v, ok := queryOptions["orgId"]; ok && v.(int64) > 0 {
71 query.Where(fmt.Sprintf(` org->>'orgId'= '%v'`, v)) 86 query.Where(fmt.Sprintf(` org->>'orgId'= '%v'`, v))
72 } 87 }
  88 + if v, ok := queryOptions["cooperationContractNumbers"]; ok && len(v.([]string)) > 0 {
  89 + query.Where("cooperation_contract_number in (?)", pg.In(v))
  90 + }
  91 + query.Where("deleted_at is null")
73 err := query.Select(v) 92 err := query.Select(v)
74 return err 93 return err
75 } 94 }
@@ -84,7 +103,7 @@ func (dao *CreditAccountDao) CooperationUsersDividendsStatistics(queryOptions ma @@ -84,7 +103,7 @@ func (dao *CreditAccountDao) CooperationUsersDividendsStatistics(queryOptions ma
84 query.ColumnExpr(`sum((case when payment_status = 1 then actually_paid_amount else 0 end)) actually_paid_amount`) 103 query.ColumnExpr(`sum((case when payment_status = 1 then actually_paid_amount else 0 end)) actually_paid_amount`)
85 query.ColumnExpr(`max(participator->>'userId') user_id`) 104 query.ColumnExpr(`max(participator->>'userId') user_id`)
86 query.ColumnExpr(`max(participator#>>'{userInfo,userName}') user_name`) 105 query.ColumnExpr(`max(participator#>>'{userInfo,userName}') user_name`)
87 - if _, ok := queryOptions["beginTime"]; ok { 106 + if _, ok := queryOptions["beginTime"]; ok && !queryOptions["beginTime"].(time.Time).IsZero() {
88 query.Where(`created_at>? `, queryOptions["beginTime"]) 107 query.Where(`created_at>? `, queryOptions["beginTime"])
89 query.Where(`created_at<? `, queryOptions["endTime"]) 108 query.Where(`created_at<? `, queryOptions["endTime"])
90 } 109 }
@@ -103,6 +122,9 @@ func (dao *CreditAccountDao) CooperationUsersDividendsStatistics(queryOptions ma @@ -103,6 +122,9 @@ func (dao *CreditAccountDao) CooperationUsersDividendsStatistics(queryOptions ma
103 if v, ok := queryOptions["endTime"]; ok && !v.(time.Time).IsZero() { 122 if v, ok := queryOptions["endTime"]; ok && !v.(time.Time).IsZero() {
104 query.Where("created_at < ?", v) 123 query.Where("created_at < ?", v)
105 } 124 }
  125 + if v, ok := queryOptions["cooperationContractNumbers"]; ok && len(v.([]string)) > 0 {
  126 + query.Where("cooperation_contract_number in (?)", pg.In(v))
  127 + }
106 query.Where("deleted_at is null") 128 query.Where("deleted_at is null")
107 if v, ok := queryOptions["sortByActuallyPaidAmount"]; ok { 129 if v, ok := queryOptions["sortByActuallyPaidAmount"]; ok {
108 vInt := v.(int) 130 vInt := v.(int)
@@ -13,7 +13,7 @@ type DividendsEstimateDao struct { @@ -13,7 +13,7 @@ type DividendsEstimateDao struct {
13 } 13 }
14 14
15 // GenerateDividendsEstimateNumber 生成分红预算单号 15 // GenerateDividendsEstimateNumber 生成分红预算单号
16 -func (dao *DividendsEstimateDao) GenerateDividendsEstimateNumber() (string, error) { 16 +func (dao *DividendsEstimateDao) GenerateDividendsEstimateNumber(queryOptions map[string]interface{}) (string, error) {
17 tx := dao.transactionContext.PgTx 17 tx := dao.transactionContext.PgTx
18 var dividendsEstimateModels []*models.DividendsEstimate 18 var dividendsEstimateModels []*models.DividendsEstimate
19 query := tx.Model(&dividendsEstimateModels) 19 query := tx.Model(&dividendsEstimateModels)
@@ -22,16 +22,30 @@ func (dao *DividendsEstimateDao) GenerateDividendsEstimateNumber() (string, erro @@ -22,16 +22,30 @@ func (dao *DividendsEstimateDao) GenerateDividendsEstimateNumber() (string, erro
22 nextDayZeroTime := utils.GetNextDayZeroTime(currentTime) 22 nextDayZeroTime := utils.GetNextDayZeroTime(currentTime)
23 query.Where("dividends_estimate.created_at >= ?", todayZeroTime) 23 query.Where("dividends_estimate.created_at >= ?", todayZeroTime)
24 query.Where("dividends_estimate.created_at < ?", nextDayZeroTime) 24 query.Where("dividends_estimate.created_at < ?", nextDayZeroTime)
  25 + if companyId, ok := queryOptions["companyId"]; ok && companyId.(int64) != 0 {
  26 + query = query.Where(`dividends_estimate.company @> '{"companyId":"?"}'`, companyId)
  27 + }
25 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil { 28 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil {
26 return "", err 29 return "", err
27 } else { 30 } else {
28 - countStr := fmt.Sprintf("%03d", count+1)  
29 - timestamp := currentTime.Unix()  
30 - timeNow := time.Unix(timestamp, 0)  
31 - timeString := timeNow.Format("20060102")  
32 - timeString = timeString[2:len(timeString)]  
33 - dividendsOrderNumber := "FH" + timeString + "#" + countStr  
34 - return dividendsOrderNumber, nil 31 + if count < 1000 {
  32 + countStr := fmt.Sprintf("%03d", count+1)
  33 + timestamp := currentTime.Unix()
  34 + timeNow := time.Unix(timestamp, 0)
  35 + timeString := timeNow.Format("20060102")
  36 + timeString = timeString[2:len(timeString)]
  37 + dividendsOrderNumber := "FH" + timeString + "#" + countStr
  38 + return dividendsOrderNumber, nil
  39 + } else {
  40 + countStr := fmt.Sprintf("%d", count+1)
  41 + timestamp := currentTime.Unix()
  42 + timeNow := time.Unix(timestamp, 0)
  43 + timeString := timeNow.Format("20060102")
  44 + timeString = timeString[2:len(timeString)]
  45 + dividendsOrderNumber := "FH" + timeString + "#" + countStr
  46 + return dividendsOrderNumber, nil
  47 + }
  48 +
35 } 49 }
36 } 50 }
37 51
@@ -75,6 +89,24 @@ func (dao *DividendsEstimateDao) UserEstimated(queryOptions map[string]interface @@ -75,6 +89,24 @@ func (dao *DividendsEstimateDao) UserEstimated(queryOptions map[string]interface
75 return ok, err 89 return ok, err
76 } 90 }
77 91
  92 +// CountDividendsEstimate 统计当前分红预算单总数
  93 +func (dao *DividendsEstimateDao) CountDividendsEstimate(queryOptions map[string]interface{}) (int, error) {
  94 + tx := dao.transactionContext.PgTx
  95 + var dividendsEstimateModels []*models.DividendsEstimate
  96 + query := tx.Model(&dividendsEstimateModels)
  97 + if companyId, ok := queryOptions["companyId"]; ok && companyId.(int64) != 0 {
  98 + query = query.Where(`dividends_estimate.company @> '{"companyId":"?"}'`, companyId)
  99 + }
  100 + if orgId, ok := queryOptions["orgId"]; ok && orgId.(int64) != 0 {
  101 + query = query.Where(`dividends_estimate.org @> '{"orgId":"?"}'`, orgId)
  102 + }
  103 + if count, err := query.AllWithDeleted().SelectAndCount(); err != nil {
  104 + return 0, err
  105 + } else {
  106 + return count, nil
  107 + }
  108 +}
  109 +
78 func NewDividendsEstimateDao(transactionContext *pgTransaction.TransactionContext) (*DividendsEstimateDao, error) { 110 func NewDividendsEstimateDao(transactionContext *pgTransaction.TransactionContext) (*DividendsEstimateDao, error) {
79 if transactionContext == nil { 111 if transactionContext == nil {
80 return nil, fmt.Errorf("transactionContext参数不能为空") 112 return nil, fmt.Errorf("transactionContext参数不能为空")
@@ -13,7 +13,7 @@ type DividendsOrderDao struct { @@ -13,7 +13,7 @@ type DividendsOrderDao struct {
13 } 13 }
14 14
15 // GenerateDividendsOrderNumber 生成分红订单号 15 // GenerateDividendsOrderNumber 生成分红订单号
16 -func (dao *DividendsOrderDao) GenerateDividendsOrderNumber() (string, error) { 16 +func (dao *DividendsOrderDao) GenerateDividendsOrderNumber(queryOptions map[string]interface{}) (string, error) {
17 tx := dao.transactionContext.PgTx 17 tx := dao.transactionContext.PgTx
18 var dividendsOrderModels []*models.DividendsOrder 18 var dividendsOrderModels []*models.DividendsOrder
19 query := tx.Model(&dividendsOrderModels) 19 query := tx.Model(&dividendsOrderModels)
@@ -22,16 +22,29 @@ func (dao *DividendsOrderDao) GenerateDividendsOrderNumber() (string, error) { @@ -22,16 +22,29 @@ func (dao *DividendsOrderDao) GenerateDividendsOrderNumber() (string, error) {
22 nextDayZeroTime := utils.GetNextDayZeroTime(currentTime) 22 nextDayZeroTime := utils.GetNextDayZeroTime(currentTime)
23 query.Where("dividends_order.created_at >= ?", todayZeroTime) 23 query.Where("dividends_order.created_at >= ?", todayZeroTime)
24 query.Where("dividends_order.created_at < ?", nextDayZeroTime) 24 query.Where("dividends_order.created_at < ?", nextDayZeroTime)
  25 + if companyId, ok := queryOptions["companyId"]; ok && companyId.(int64) != 0 {
  26 + query = query.Where(`dividends_order.company @> '{"companyId":"?"}'`, companyId)
  27 + }
25 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil { 28 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil {
26 return "", err 29 return "", err
27 } else { 30 } else {
28 - countStr := fmt.Sprintf("%03d", count+1)  
29 - timestamp := currentTime.Unix()  
30 - timeNow := time.Unix(timestamp, 0)  
31 - timeString := timeNow.Format("20060102")  
32 - timeString = timeString[2:len(timeString)]  
33 - dividendsOrderNumber := "SL" + timeString + "#" + countStr  
34 - return dividendsOrderNumber, nil 31 + if count < 1000 {
  32 + countStr := fmt.Sprintf("%03d", count+1)
  33 + timestamp := currentTime.Unix()
  34 + timeNow := time.Unix(timestamp, 0)
  35 + timeString := timeNow.Format("20060102")
  36 + timeString = timeString[2:len(timeString)]
  37 + dividendsOrderNumber := "SL" + timeString + "#" + countStr
  38 + return dividendsOrderNumber, nil
  39 + } else {
  40 + countStr := fmt.Sprintf("%d", count+1)
  41 + timestamp := currentTime.Unix()
  42 + timeNow := time.Unix(timestamp, 0)
  43 + timeString := timeNow.Format("20060102")
  44 + timeString = timeString[2:len(timeString)]
  45 + dividendsOrderNumber := "SL" + timeString + "#" + countStr
  46 + return dividendsOrderNumber, nil
  47 + }
35 } 48 }
36 } 49 }
37 50
@@ -78,6 +91,23 @@ func (dao *DividendsOrderDao) CalculateDividendsOrderAmount(queryOptions map[str @@ -78,6 +91,23 @@ func (dao *DividendsOrderDao) CalculateDividendsOrderAmount(queryOptions map[str
78 return dividendsOrderModel.DividendsOrderAmount, nil 91 return dividendsOrderModel.DividendsOrderAmount, nil
79 } 92 }
80 93
  94 +// CountDividendsOrder 统计当前订单总数
  95 +func (dao *DividendsOrderDao) CountDividendsOrder(queryOptions map[string]interface{}) (int, error) {
  96 + tx := dao.transactionContext.PgTx
  97 + var dividendsOrderModels []*models.DividendsOrder
  98 + query := tx.Model(&dividendsOrderModels)
  99 + currentTime := time.Now()
  100 + todayZeroTime := utils.GetZeroTime(currentTime)
  101 + nextDayZeroTime := utils.GetNextDayZeroTime(currentTime)
  102 + query.Where("dividends_order.created_at >= ?", todayZeroTime)
  103 + query.Where("dividends_order.created_at < ?", nextDayZeroTime)
  104 + if count, err := query.AllWithDeleted().SelectAndCount(); err != nil {
  105 + return 0, err
  106 + } else {
  107 + return count, nil
  108 + }
  109 +}
  110 +
81 func NewDividendsOrderDao(transactionContext *pgTransaction.TransactionContext) (*DividendsOrderDao, error) { 111 func NewDividendsOrderDao(transactionContext *pgTransaction.TransactionContext) (*DividendsOrderDao, error) {
82 if transactionContext == nil { 112 if transactionContext == nil {
83 return nil, fmt.Errorf("transactionContext参数不能为空") 113 return nil, fmt.Errorf("transactionContext参数不能为空")
@@ -13,7 +13,7 @@ type DividendsReturnedOrderDao struct { @@ -13,7 +13,7 @@ type DividendsReturnedOrderDao struct {
13 } 13 }
14 14
15 // GenerateDividendsReturnedOrderNumber 生成分红退货单号 15 // GenerateDividendsReturnedOrderNumber 生成分红退货单号
16 -func (dao *DividendsReturnedOrderDao) GenerateDividendsReturnedOrderNumber() (string, error) { 16 +func (dao *DividendsReturnedOrderDao) GenerateDividendsReturnedOrderNumber(queryOptions map[string]interface{}) (string, error) {
17 tx := dao.transactionContext.PgTx 17 tx := dao.transactionContext.PgTx
18 var dividendsReturnedOrderModels []*models.DividendsReturnedOrder 18 var dividendsReturnedOrderModels []*models.DividendsReturnedOrder
19 query := tx.Model(&dividendsReturnedOrderModels) 19 query := tx.Model(&dividendsReturnedOrderModels)
@@ -22,6 +22,9 @@ func (dao *DividendsReturnedOrderDao) GenerateDividendsReturnedOrderNumber() (st @@ -22,6 +22,9 @@ func (dao *DividendsReturnedOrderDao) GenerateDividendsReturnedOrderNumber() (st
22 nextDayZeroTime := utils.GetNextDayZeroTime(currentTime) 22 nextDayZeroTime := utils.GetNextDayZeroTime(currentTime)
23 query.Where("dividends_returned_order.created_at >= ?", todayZeroTime) 23 query.Where("dividends_returned_order.created_at >= ?", todayZeroTime)
24 query.Where("dividends_returned_order.created_at < ?", nextDayZeroTime) 24 query.Where("dividends_returned_order.created_at < ?", nextDayZeroTime)
  25 + if companyId, ok := queryOptions["companyId"]; ok && companyId.(int64) != 0 {
  26 + query = query.Where(`dividends_returned_order.company @> '{"companyId":"?"}'`, companyId)
  27 + }
25 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil { 28 if count, err := query.AllWithDeleted().SelectAndCount(); err != nil {
26 return "", err 29 return "", err
27 } else { 30 } else {
@@ -30,7 +30,7 @@ func (dao *OrderGoodDao) CooperationGoodsStatistics(queryOptions map[string]inte @@ -30,7 +30,7 @@ func (dao *OrderGoodDao) CooperationGoodsStatistics(queryOptions map[string]inte
30 queryLimit = fmt.Sprintf("limit %v", queryOptions["limit"]) 30 queryLimit = fmt.Sprintf("limit %v", queryOptions["limit"])
31 } 31 }
32 sql := fmt.Sprintf(`select order_good_name good_name,sum(order_good_amount) good_amount from order_goods 32 sql := fmt.Sprintf(`select order_good_name good_name,sum(order_good_amount) good_amount from order_goods
33 -where company_id=? and org_id = ? %v 33 +where company_id=? and org_id = ? and deleted_at is null %v
34 GROUP BY order_good_name 34 GROUP BY order_good_name
35 order by good_amount desc 35 order by good_amount desc
36 %v 36 %v
@@ -49,7 +49,7 @@ func (dao *OrderGoodDao) CooperationCompanyModeStatistics(queryOptions map[strin @@ -49,7 +49,7 @@ func (dao *OrderGoodDao) CooperationCompanyModeStatistics(queryOptions map[strin
49 var goods []*domain.CooperationModeStatisticsDto 49 var goods []*domain.CooperationModeStatisticsDto
50 sql := fmt.Sprintf(`select count(0) cooperation_people,sum(a.actually_paid_amount) dividends_estimate,b.cooperation_mode_number,sum(good_amount_count) order_amount 50 sql := fmt.Sprintf(`select count(0) cooperation_people,sum(a.actually_paid_amount) dividends_estimate,b.cooperation_mode_number,sum(good_amount_count) order_amount
51 from credit_accounts a inner join cooperation_contracts b on a.cooperation_contract_number = b.cooperation_contract_number 51 from credit_accounts a inner join cooperation_contracts b on a.cooperation_contract_number = b.cooperation_contract_number
52 -where a.company->>'companyId' = '?' and a.org->>'orgId' = '?' and b.status = 1 52 +where a.company->>'companyId' = '?' and a.org->>'orgId' = '?' and a.deleted_at is null and b.status = 1
53 group by b.cooperation_mode_number 53 group by b.cooperation_mode_number
54 `) 54 `)
55 _, err := tx.Query(&goods, sql, queryOptions["companyId"], queryOptions["orgId"]) 55 _, err := tx.Query(&goods, sql, queryOptions["companyId"], queryOptions["orgId"])
@@ -50,6 +50,8 @@ func (domainService *CancelDividendsEstimateService) CancelEstimate(dividendsEst @@ -50,6 +50,8 @@ func (domainService *CancelDividendsEstimateService) CancelEstimate(dividendsEst
50 for _, dividendsEstimate := range dividendsEstimates { 50 for _, dividendsEstimate := range dividendsEstimates {
51 // 根据当前分红预算单的分红订单号或退货单号获取分红预算单 51 // 根据当前分红预算单的分红订单号或退货单号获取分红预算单
52 if countRelative, dividendsEstimatesRelative, err2 := dividendsEstimateRepository.Find(map[string]interface{}{ 52 if countRelative, dividendsEstimatesRelative, err2 := dividendsEstimateRepository.Find(map[string]interface{}{
  53 + "companyId": dividendsEstimate.Company.CompanyId,
  54 + "orgId": dividendsEstimate.Org.OrgId,
53 "orderOrReturnedOrderNum": dividendsEstimate.OrderOrReturnedOrderNum, 55 "orderOrReturnedOrderNum": dividendsEstimate.OrderOrReturnedOrderNum,
54 }); err2 != nil { 56 }); err2 != nil {
55 return nil, err2 57 return nil, err2
@@ -86,6 +88,8 @@ func (domainService *CancelDividendsEstimateService) CancelEstimate(dividendsEst @@ -86,6 +88,8 @@ func (domainService *CancelDividendsEstimateService) CancelEstimate(dividendsEst
86 88
87 // 获取分红订单 89 // 获取分红订单
88 if countDividendsOrder, orders, err4 := dividendsOrderRepository.Find(map[string]interface{}{ 90 if countDividendsOrder, orders, err4 := dividendsOrderRepository.Find(map[string]interface{}{
  91 + "companyId": dividendsEstimates[0].Company.CompanyId,
  92 + "orgId": dividendsEstimates[0].Org.OrgId,
89 "dividendsOrderNumbers": orderNums, 93 "dividendsOrderNumbers": orderNums,
90 }); err4 != nil { 94 }); err4 != nil {
91 return nil, err4 95 return nil, err4
@@ -103,6 +107,8 @@ func (domainService *CancelDividendsEstimateService) CancelEstimate(dividendsEst @@ -103,6 +107,8 @@ func (domainService *CancelDividendsEstimateService) CancelEstimate(dividendsEst
103 107
104 // 获取分红退货单 108 // 获取分红退货单
105 if countDividendsReturnedOrder, returnedOrders, err5 := dividendsReturnedOrderRepository.Find(map[string]interface{}{ 109 if countDividendsReturnedOrder, returnedOrders, err5 := dividendsReturnedOrderRepository.Find(map[string]interface{}{
  110 + "companyId": dividendsEstimates[0].Company.CompanyId,
  111 + "orgId": dividendsEstimates[0].Org.OrgId,
106 "dividendsReturnedOrderNumbers": returnedOrderNums, 112 "dividendsReturnedOrderNumbers": returnedOrderNums,
107 }); err5 != nil { 113 }); err5 != nil {
108 return nil, err5 114 return nil, err5
@@ -2,9 +2,9 @@ package domain_service @@ -2,9 +2,9 @@ package domain_service
2 2
3 import ( 3 import (
4 "fmt" 4 "fmt"
5 - "github.com/linmadan/egglib-go/core/application"  
6 coreDomain "github.com/linmadan/egglib-go/core/domain" 5 coreDomain "github.com/linmadan/egglib-go/core/domain"
7 pgTransaction "github.com/linmadan/egglib-go/transaction/pg" 6 pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
  7 + "github.com/shopspring/decimal"
8 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain" 8 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain"
9 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain/service" 9 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain/service"
10 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/repository" 10 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/repository"
@@ -18,48 +18,157 @@ type ConfirmDividendsIncentivesEstimateService struct { @@ -18,48 +18,157 @@ type ConfirmDividendsIncentivesEstimateService struct {
18 // Confirm 确认业绩分红预算 18 // Confirm 确认业绩分红预算
19 func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoods []*domain.OrderGood) ([]*service.DividendsEstimateDetail, error) { 19 func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoods []*domain.OrderGood) ([]*service.DividendsEstimateDetail, error) {
20 var cooperationContractRepository domain.CooperationContractRepository // 共创合约仓储 20 var cooperationContractRepository domain.CooperationContractRepository // 共创合约仓储
  21 + var cooperationProjectRepository domain.CooperationProjectRepository // 共创项目仓储
21 var dividendsOrderRepository domain.DividendsOrderRepository // 分红订单仓储 22 var dividendsOrderRepository domain.DividendsOrderRepository // 分红订单仓储
22 var dividendsReturnedOrderRepository domain.DividendsReturnedOrderRepository // 分红退货单仓储 23 var dividendsReturnedOrderRepository domain.DividendsReturnedOrderRepository // 分红退货单仓储
  24 +
23 // 共创合约仓储初始化 25 // 共创合约仓储初始化
24 if repo, err := repository.NewCooperationContractRepository(domainService.transactionContext); err != nil { 26 if repo, err := repository.NewCooperationContractRepository(domainService.transactionContext); err != nil {
25 return nil, err 27 return nil, err
26 } else { 28 } else {
27 cooperationContractRepository = repo 29 cooperationContractRepository = repo
28 } 30 }
  31 +
  32 + // 共创项目仓储初始化
  33 + if repo, err := repository.NewCooperationProjectRepository(domainService.transactionContext); err != nil {
  34 + return nil, err
  35 + } else {
  36 + cooperationProjectRepository = repo
  37 + }
  38 +
29 // 分红订单仓储初始化 39 // 分红订单仓储初始化
30 if repo, err := repository.NewDividendsOrderRepository(domainService.transactionContext); err != nil { 40 if repo, err := repository.NewDividendsOrderRepository(domainService.transactionContext); err != nil {
31 return nil, err 41 return nil, err
32 } else { 42 } else {
33 dividendsOrderRepository = repo 43 dividendsOrderRepository = repo
34 } 44 }
  45 +
35 // 分红退货单仓储初始化 46 // 分红退货单仓储初始化
36 if repo, err := repository.NewDividendsReturnedOrderRepository(domainService.transactionContext); err != nil { 47 if repo, err := repository.NewDividendsReturnedOrderRepository(domainService.transactionContext); err != nil {
37 return nil, err 48 return nil, err
38 } else { 49 } else {
39 dividendsReturnedOrderRepository = repo 50 dividendsReturnedOrderRepository = repo
40 } 51 }
  52 +
41 // 确认业绩分红预算 53 // 确认业绩分红预算
42 var dividendsEstimateDetails []*service.DividendsEstimateDetail 54 var dividendsEstimateDetails []*service.DividendsEstimateDetail
43 for _, orderGood := range orderGoods { 55 for _, orderGood := range orderGoods {
44 // 获取合约 56 // 获取合约
45 - cooperationContract, err := cooperationContractRepository.FindOne(map[string]interface{}{"cooperationContractNumber": orderGood.CooperationContractNumber}) 57 + cooperationContract, err := cooperationContractRepository.FindOne(map[string]interface{}{
  58 + "cooperationContractNumber": orderGood.CooperationContractNumber,
  59 + "companyId": orderGood.CompanyId,
  60 + "orgId": orderGood.OrgId,
  61 + })
46 if err != nil { 62 if err != nil {
47 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "共创合约不存在") 63 + dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
  64 + DividendsUser: nil,
  65 + DividendsParticipateType: 0,
  66 + DividendsStage: 0,
  67 + DividendsAmount: 0,
  68 + OrderOrReturnedOrderNumber: orderGood.DividendsOrderNumber,
  69 + IsSuccessfully: false,
  70 + Reason: "共创合约错误",
  71 + })
  72 + continue
  73 + //return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
48 } 74 }
49 if cooperationContract == nil { 75 if cooperationContract == nil {
50 - return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", orderGood.CooperationContractNumber)) 76 + dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
  77 + DividendsUser: nil,
  78 + DividendsParticipateType: 0,
  79 + DividendsStage: 0,
  80 + DividendsAmount: 0,
  81 + OrderOrReturnedOrderNumber: orderGood.DividendsOrderNumber,
  82 + IsSuccessfully: false,
  83 + Reason: "共创合约" + orderGood.CooperationContractNumber + "不存在",
  84 + })
  85 + continue
  86 + //return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("共创合约%s不存在", orderGood.CooperationContractNumber))
51 } 87 }
52 - if orderGood.DividendsOrderNumber != "" { 88 +
  89 + // 获取共创项目
  90 + cooperationProject, err := cooperationProjectRepository.FindOne(map[string]interface{}{
  91 + "cooperationProjectNumber": cooperationContract.CooperationProjectNumber,
  92 + "companyId": cooperationContract.Company.CompanyId,
  93 + "orgId": cooperationContract.Org.OrgId,
  94 + "notPause": true,
  95 + })
  96 + if err != nil {
  97 + dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
  98 + DividendsUser: nil,
  99 + DividendsParticipateType: 0,
  100 + DividendsStage: 0,
  101 + DividendsAmount: 0,
  102 + OrderOrReturnedOrderNumber: orderGood.DividendsOrderNumber,
  103 + IsSuccessfully: false,
  104 + Reason: "共创项目" + orderGood.CooperationContractNumber + "查询错误",
  105 + })
  106 + continue
  107 + //return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  108 + }
  109 + if cooperationProject == nil {
  110 + dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
  111 + DividendsUser: nil,
  112 + DividendsParticipateType: 0,
  113 + DividendsStage: 0,
  114 + DividendsAmount: 0,
  115 + OrderOrReturnedOrderNumber: orderGood.DividendsOrderNumber,
  116 + IsSuccessfully: false,
  117 + Reason: "共创项目" + orderGood.CooperationContractNumber + "已结束或不存在",
  118 + })
  119 + continue
  120 + //return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("共创项目%s不存在", cooperationContract.CooperationProjectNumber))
  121 + }
  122 +
  123 + // 校验合约关联的项目是否已结束
  124 + //if cooperationProject.Status == 2 {
  125 + // dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
  126 + // DividendsUser: nil,
  127 + // DividendsParticipateType: 0,
  128 + // DividendsStage: 0,
  129 + // DividendsAmount: 0,
  130 + // OrderOrReturnedOrderNumber: orderGood.DividendsOrderNumber,
  131 + // IsSuccessfully: false,
  132 + // Reason: "共创项目" + orderGood.CooperationContractNumber + "已结束",
  133 + // })
  134 + // continue
  135 + // //return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("共创项目%s已结束", cooperationContract.CooperationProjectNumber))
  136 + //}
  137 +
  138 + if orderGood.DividendsOrderNumber != "" { // 获取分红订单
53 // 获取分红订单 139 // 获取分红订单
54 dividendsOrder, err2 := dividendsOrderRepository.FindOne(map[string]interface{}{ 140 dividendsOrder, err2 := dividendsOrderRepository.FindOne(map[string]interface{}{
55 "dividendsOrderNumber": orderGood.DividendsOrderNumber, 141 "dividendsOrderNumber": orderGood.DividendsOrderNumber,
  142 + "companyId": orderGood.CompanyId,
  143 + "orgId": orderGood.OrgId,
56 }) 144 })
57 if err2 != nil { 145 if err2 != nil {
58 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "分红订单不存在") 146 + dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
  147 + DividendsUser: nil,
  148 + DividendsParticipateType: 0,
  149 + DividendsStage: 0,
  150 + DividendsAmount: 0,
  151 + OrderOrReturnedOrderNumber: orderGood.DividendsOrderNumber,
  152 + IsSuccessfully: false,
  153 + Reason: "分红订单" + orderGood.DividendsOrderNumber + "查询错误",
  154 + })
  155 + continue
  156 + //return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "分红订单不存在")
59 } 157 }
60 if dividendsOrder == nil { 158 if dividendsOrder == nil {
61 - return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", orderGood.DividendsOrderNumber)) 159 + dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
  160 + DividendsUser: nil,
  161 + DividendsParticipateType: 0,
  162 + DividendsStage: 0,
  163 + DividendsAmount: 0,
  164 + OrderOrReturnedOrderNumber: orderGood.DividendsOrderNumber,
  165 + IsSuccessfully: false,
  166 + Reason: "分红订单" + orderGood.DividendsOrderNumber + "不存在",
  167 + })
  168 + continue
  169 + //return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("分红订单%s不存在", orderGood.DividendsOrderNumber))
62 } 170 }
  171 +
63 // 匹配分红规则 172 // 匹配分红规则
64 var dividendsIncentivesRuleMatched *domain.DividendsIncentivesRule 173 var dividendsIncentivesRuleMatched *domain.DividendsIncentivesRule
65 for _, dividendsIncentivesRule := range cooperationContract.DividendsIncentivesRules { 174 for _, dividendsIncentivesRule := range cooperationContract.DividendsIncentivesRules {
@@ -69,14 +178,24 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo @@ -69,14 +178,24 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo
69 } 178 }
70 } 179 }
71 if dividendsIncentivesRuleMatched == nil { 180 if dividendsIncentivesRuleMatched == nil {
72 - return nil, application.ThrowError(application.RES_NO_FIND_ERROR, "未匹配到分红规则") 181 + dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
  182 + DividendsUser: nil,
  183 + DividendsParticipateType: 0,
  184 + DividendsStage: 0,
  185 + DividendsAmount: 0,
  186 + OrderOrReturnedOrderNumber: orderGood.DividendsOrderNumber,
  187 + IsSuccessfully: false,
  188 + Reason: "未匹配到分红规则",
  189 + })
  190 + continue
  191 + //return nil, application.ThrowError(application.RES_NO_FIND_ERROR, "未匹配到分红规则")
73 } 192 }
74 193
75 // 计算分红 194 // 计算分红
76 if dividendsIncentivesRuleMatched != nil { 195 if dividendsIncentivesRuleMatched != nil {
77 for _, undertaker := range cooperationContract.Undertakers { 196 for _, undertaker := range cooperationContract.Undertakers {
78 // 添加承接人分红预算信息详情 197 // 添加承接人分红预算信息详情
79 - undertakerDividendsAmount := (orderGood.OrderGoodAmount - orderGood.OrderGoodExpense) * dividendsIncentivesRuleMatched.DividendsIncentivesPercentage 198 + undertakerDividendsAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodAmount).Mul(decimal.NewFromFloat(dividendsIncentivesRuleMatched.DividendsIncentivesPercentage).Div(decimal.NewFromFloat(100))).Float64()
80 dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{ 199 dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
81 DividendsUser: &domain.User{ 200 DividendsUser: &domain.User{
82 UserId: undertaker.UserId, 201 UserId: undertaker.UserId,
@@ -87,18 +206,20 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo @@ -87,18 +206,20 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo
87 Roles: undertaker.Roles, 206 Roles: undertaker.Roles,
88 UserInfo: undertaker.UserInfo, 207 UserInfo: undertaker.UserInfo,
89 UserType: undertaker.UserType, 208 UserType: undertaker.UserType,
90 - UserName: undertaker.UserName, 209 + UserName: undertaker.UserInfo.UserName,
91 UserPhone: undertaker.UserPhone, 210 UserPhone: undertaker.UserPhone,
92 Status: undertaker.Status, 211 Status: undertaker.Status,
93 Company: undertaker.Company, 212 Company: undertaker.Company,
94 }, 213 },
95 - DividendsParticipateType: domain.UNDERTAKER,  
96 - DividendsStage: dividendsIncentivesRuleMatched.DividendsIncentivesStage,  
97 - DividendsAmount: undertakerDividendsAmount, 214 + DividendsParticipateType: domain.UNDERTAKER,
  215 + DividendsStage: dividendsIncentivesRuleMatched.DividendsIncentivesStage,
  216 + DividendsAmount: undertakerDividendsAmount,
  217 + OrderOrReturnedOrderNumber: dividendsOrder.DividendsOrderNumber,
  218 + IsSuccessfully: true,
98 }) 219 })
99 // 添加推荐人分红预算信息详情 220 // 添加推荐人分红预算信息详情
100 if undertaker.Referrer != nil { 221 if undertaker.Referrer != nil {
101 - referrerDividendsAmount := (orderGood.OrderGoodAmount - orderGood.OrderGoodExpense) * dividendsIncentivesRuleMatched.ReferrerPercentage 222 + referrerDividendsAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodAmount).Mul(decimal.NewFromFloat(dividendsIncentivesRuleMatched.ReferrerPercentage).Div(decimal.NewFromFloat(100))).Float64()
102 dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{ 223 dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
103 DividendsUser: &domain.User{ 224 DividendsUser: &domain.User{
104 UserId: undertaker.Referrer.UserId, 225 UserId: undertaker.Referrer.UserId,
@@ -113,14 +234,16 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo @@ -113,14 +234,16 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo
113 UserPhone: undertaker.Referrer.UserPhone, 234 UserPhone: undertaker.Referrer.UserPhone,
114 Company: undertaker.Referrer.Company, 235 Company: undertaker.Referrer.Company,
115 }, 236 },
116 - DividendsParticipateType: domain.REFERRER,  
117 - DividendsStage: dividendsIncentivesRuleMatched.DividendsIncentivesStage,  
118 - DividendsAmount: referrerDividendsAmount, 237 + DividendsParticipateType: domain.REFERRER,
  238 + DividendsStage: dividendsIncentivesRuleMatched.DividendsIncentivesStage,
  239 + DividendsAmount: referrerDividendsAmount,
  240 + OrderOrReturnedOrderNumber: dividendsOrder.DividendsOrderNumber,
  241 + IsSuccessfully: true,
119 }) 242 })
120 } 243 }
121 // 添加关联业务员分红预算信息详情 244 // 添加关联业务员分红预算信息详情
122 if undertaker.Salesman != nil { 245 if undertaker.Salesman != nil {
123 - salesmanDividendsAmount := (orderGood.OrderGoodAmount - orderGood.OrderGoodExpense) * dividendsIncentivesRuleMatched.SalesmanPercentage 246 + salesmanDividendsAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodAmount).Mul(decimal.NewFromFloat(dividendsIncentivesRuleMatched.SalesmanPercentage).Div(decimal.NewFromFloat(100))).Float64()
124 dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{ 247 dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
125 DividendsUser: &domain.User{ 248 DividendsUser: &domain.User{
126 UserId: undertaker.Salesman.UserId, 249 UserId: undertaker.Salesman.UserId,
@@ -131,26 +254,50 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo @@ -131,26 +254,50 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo
131 Roles: undertaker.Salesman.Roles, 254 Roles: undertaker.Salesman.Roles,
132 UserInfo: undertaker.Salesman.UserInfo, 255 UserInfo: undertaker.Salesman.UserInfo,
133 UserType: undertaker.Salesman.UserType, 256 UserType: undertaker.Salesman.UserType,
134 - UserName: undertaker.Salesman.UserName, 257 + UserName: undertaker.Salesman.UserInfo.UserName,
135 UserPhone: undertaker.Salesman.UserPhone, 258 UserPhone: undertaker.Salesman.UserPhone,
136 Company: undertaker.Salesman.Company, 259 Company: undertaker.Salesman.Company,
137 }, 260 },
138 - DividendsParticipateType: domain.SALESMAN,  
139 - DividendsStage: dividendsIncentivesRuleMatched.DividendsIncentivesStage,  
140 - DividendsAmount: salesmanDividendsAmount, 261 + DividendsParticipateType: domain.SALESMAN,
  262 + DividendsStage: dividendsIncentivesRuleMatched.DividendsIncentivesStage,
  263 + DividendsAmount: salesmanDividendsAmount,
  264 + OrderOrReturnedOrderNumber: dividendsOrder.DividendsOrderNumber,
  265 + IsSuccessfully: true,
141 }) 266 })
142 } 267 }
143 } 268 }
144 } 269 }
145 - } else if orderGood.DividendsReturnedOrderNumber != "" { // 获取分红退货单 270 + } else if orderGood.DividendsReturnedOrderNumber != "" { // 获取退货单
146 dividendsReturnedOrder, err3 := dividendsReturnedOrderRepository.FindOne(map[string]interface{}{ 271 dividendsReturnedOrder, err3 := dividendsReturnedOrderRepository.FindOne(map[string]interface{}{
147 "dividendsReturnedOrderNumber": orderGood.DividendsReturnedOrderNumber, 272 "dividendsReturnedOrderNumber": orderGood.DividendsReturnedOrderNumber,
  273 + "companyId": orderGood.CompanyId,
  274 + "orgId": orderGood.OrgId,
148 }) 275 })
149 if err3 != nil { 276 if err3 != nil {
150 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "分红退货单不存在") 277 + dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
  278 + DividendsUser: nil,
  279 + DividendsParticipateType: 0,
  280 + DividendsStage: 0,
  281 + DividendsAmount: 0,
  282 + OrderOrReturnedOrderNumber: orderGood.DividendsReturnedOrderNumber,
  283 + IsSuccessfully: false,
  284 + Reason: "退货单" + orderGood.DividendsReturnedOrderNumber + "不存在",
  285 + })
  286 + continue
  287 + //return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "分红退货单不存在")
151 } 288 }
152 if dividendsReturnedOrder == nil { 289 if dividendsReturnedOrder == nil {
153 - return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", orderGood.DividendsReturnedOrderNumber)) 290 + dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
  291 + DividendsUser: nil,
  292 + DividendsParticipateType: 0,
  293 + DividendsStage: 0,
  294 + DividendsAmount: 0,
  295 + OrderOrReturnedOrderNumber: orderGood.DividendsReturnedOrderNumber,
  296 + IsSuccessfully: false,
  297 + Reason: "退货单" + orderGood.DividendsReturnedOrderNumber + "不存在",
  298 + })
  299 + continue
  300 + //return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", orderGood.DividendsReturnedOrderNumber))
154 } 301 }
155 // 匹配分红规则 302 // 匹配分红规则
156 var dividendsIncentivesRuleMatched *domain.DividendsIncentivesRule 303 var dividendsIncentivesRuleMatched *domain.DividendsIncentivesRule
@@ -163,7 +310,7 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo @@ -163,7 +310,7 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo
163 // 计算分红 310 // 计算分红
164 for _, undertaker := range cooperationContract.Undertakers { 311 for _, undertaker := range cooperationContract.Undertakers {
165 // 添加承接人分红退货预算信息详情 312 // 添加承接人分红退货预算信息详情
166 - undertakerDividendsAmount := -orderGood.OrderGoodAmount * dividendsIncentivesRuleMatched.DividendsIncentivesPercentage 313 + undertakerDividendsAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodAmount).Mul(decimal.NewFromFloat(dividendsIncentivesRuleMatched.DividendsIncentivesPercentage).Div(decimal.NewFromFloat(100))).Float64()
167 dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{ 314 dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
168 DividendsUser: &domain.User{ 315 DividendsUser: &domain.User{
169 UserId: undertaker.UserId, 316 UserId: undertaker.UserId,
@@ -174,18 +321,20 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo @@ -174,18 +321,20 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo
174 Roles: undertaker.Roles, 321 Roles: undertaker.Roles,
175 UserInfo: undertaker.UserInfo, 322 UserInfo: undertaker.UserInfo,
176 UserType: undertaker.UserType, 323 UserType: undertaker.UserType,
177 - UserName: undertaker.UserName, 324 + UserName: undertaker.UserInfo.UserName,
178 UserPhone: undertaker.UserPhone, 325 UserPhone: undertaker.UserPhone,
179 Status: undertaker.Status, 326 Status: undertaker.Status,
180 Company: undertaker.Company, 327 Company: undertaker.Company,
181 }, 328 },
182 - DividendsParticipateType: domain.UNDERTAKER,  
183 - DividendsStage: dividendsIncentivesRuleMatched.DividendsIncentivesStage,  
184 - DividendsAmount: undertakerDividendsAmount, 329 + DividendsParticipateType: domain.UNDERTAKER,
  330 + DividendsStage: dividendsIncentivesRuleMatched.DividendsIncentivesStage,
  331 + DividendsAmount: -undertakerDividendsAmount,
  332 + OrderOrReturnedOrderNumber: dividendsReturnedOrder.DividendsOrderNumber,
  333 + IsSuccessfully: true,
185 }) 334 })
186 // 添加推荐人分红退货预算信息详情 335 // 添加推荐人分红退货预算信息详情
187 if undertaker.Referrer != nil { 336 if undertaker.Referrer != nil {
188 - referrerDividendsAmount := -orderGood.OrderGoodAmount * dividendsIncentivesRuleMatched.ReferrerPercentage 337 + referrerDividendsAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodAmount).Mul(decimal.NewFromFloat(dividendsIncentivesRuleMatched.ReferrerPercentage).Div(decimal.NewFromFloat(100))).Float64()
189 dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{ 338 dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
190 DividendsUser: &domain.User{ 339 DividendsUser: &domain.User{
191 UserId: undertaker.Referrer.UserId, 340 UserId: undertaker.Referrer.UserId,
@@ -196,18 +345,20 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo @@ -196,18 +345,20 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo
196 Roles: undertaker.Referrer.Roles, 345 Roles: undertaker.Referrer.Roles,
197 UserInfo: undertaker.Referrer.UserInfo, 346 UserInfo: undertaker.Referrer.UserInfo,
198 UserType: undertaker.Referrer.UserType, 347 UserType: undertaker.Referrer.UserType,
199 - UserName: undertaker.Referrer.UserName, 348 + UserName: undertaker.Referrer.UserInfo.UserName,
200 UserPhone: undertaker.Referrer.UserPhone, 349 UserPhone: undertaker.Referrer.UserPhone,
201 Company: undertaker.Referrer.Company, 350 Company: undertaker.Referrer.Company,
202 }, 351 },
203 - DividendsParticipateType: domain.REFERRER,  
204 - DividendsStage: dividendsIncentivesRuleMatched.DividendsIncentivesStage,  
205 - DividendsAmount: referrerDividendsAmount, 352 + DividendsParticipateType: domain.REFERRER,
  353 + DividendsStage: dividendsIncentivesRuleMatched.DividendsIncentivesStage,
  354 + DividendsAmount: -referrerDividendsAmount,
  355 + OrderOrReturnedOrderNumber: dividendsReturnedOrder.DividendsOrderNumber,
  356 + IsSuccessfully: true,
206 }) 357 })
207 } 358 }
208 // 添加关联业务员分红退货预算信息详情 359 // 添加关联业务员分红退货预算信息详情
209 if undertaker.Salesman != nil { 360 if undertaker.Salesman != nil {
210 - salesmanDividendsAmount := -orderGood.OrderGoodAmount * dividendsIncentivesRuleMatched.SalesmanPercentage 361 + salesmanDividendsAmount, _ := decimal.NewFromFloat(orderGood.OrderGoodAmount).Mul(decimal.NewFromFloat(dividendsIncentivesRuleMatched.SalesmanPercentage).Div(decimal.NewFromFloat(100))).Float64()
211 dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{ 362 dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
212 DividendsUser: &domain.User{ 363 DividendsUser: &domain.User{
213 UserId: undertaker.Salesman.UserId, 364 UserId: undertaker.Salesman.UserId,
@@ -218,13 +369,15 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo @@ -218,13 +369,15 @@ func (domainService *ConfirmDividendsIncentivesEstimateService) Confirm(orderGoo
218 Roles: undertaker.Salesman.Roles, 369 Roles: undertaker.Salesman.Roles,
219 UserInfo: undertaker.Salesman.UserInfo, 370 UserInfo: undertaker.Salesman.UserInfo,
220 UserType: undertaker.Salesman.UserType, 371 UserType: undertaker.Salesman.UserType,
221 - UserName: undertaker.Salesman.UserName, 372 + UserName: undertaker.Salesman.UserInfo.UserName,
222 UserPhone: undertaker.Salesman.UserPhone, 373 UserPhone: undertaker.Salesman.UserPhone,
223 Company: undertaker.Salesman.Company, 374 Company: undertaker.Salesman.Company,
224 }, 375 },
225 - DividendsParticipateType: domain.SALESMAN,  
226 - DividendsStage: dividendsIncentivesRuleMatched.DividendsIncentivesStage,  
227 - DividendsAmount: salesmanDividendsAmount, 376 + DividendsParticipateType: domain.SALESMAN,
  377 + DividendsStage: dividendsIncentivesRuleMatched.DividendsIncentivesStage,
  378 + DividendsAmount: -salesmanDividendsAmount,
  379 + OrderOrReturnedOrderNumber: dividendsReturnedOrder.DividendsOrderNumber,
  380 + IsSuccessfully: true,
228 }) 381 })
229 } 382 }
230 } 383 }
@@ -4,6 +4,7 @@ import ( @@ -4,6 +4,7 @@ import (
4 "fmt" 4 "fmt"
5 coreDomain "github.com/linmadan/egglib-go/core/domain" 5 coreDomain "github.com/linmadan/egglib-go/core/domain"
6 pgTransaction "github.com/linmadan/egglib-go/transaction/pg" 6 pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
  7 + "github.com/shopspring/decimal"
7 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain" 8 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain"
8 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain/service" 9 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain/service"
9 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/dao" 10 "gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/dao"
@@ -16,16 +17,8 @@ type ConfirmMoneyIncentivesEstimateService struct { @@ -16,16 +17,8 @@ type ConfirmMoneyIncentivesEstimateService struct {
16 } 17 }
17 18
18 func (domainService *ConfirmMoneyIncentivesEstimateService) Confirm(contract *domain.CooperationContract, stage int32, undertakerUIDs []int64) ([]*service.DividendsEstimateDetail, error) { 19 func (domainService *ConfirmMoneyIncentivesEstimateService) Confirm(contract *domain.CooperationContract, stage int32, undertakerUIDs []int64) ([]*service.DividendsEstimateDetail, error) {
19 - //var dividendsEstimateRepository domain.DividendsEstimateRepository // 分红预算单仓储  
20 var dividendsEstimateDao *dao.DividendsEstimateDao // 分红预算DAO 20 var dividendsEstimateDao *dao.DividendsEstimateDao // 分红预算DAO
21 21
22 - // 分红预算单仓储初始化  
23 - //if repo, err := repository.NewDividendsEstimateRepository(domainService.transactionContext); err != nil {  
24 - // return nil, err  
25 - //} else {  
26 - // dividendsEstimateRepository = repo  
27 - //}  
28 -  
29 // 分红预算DAO初始化 22 // 分红预算DAO初始化
30 if estimateDao, err := dao.NewDividendsEstimateDao(domainService.transactionContext); err != nil { 23 if estimateDao, err := dao.NewDividendsEstimateDao(domainService.transactionContext); err != nil {
31 return nil, err 24 return nil, err
@@ -68,7 +61,7 @@ func (domainService *ConfirmMoneyIncentivesEstimateService) Confirm(contract *do @@ -68,7 +61,7 @@ func (domainService *ConfirmMoneyIncentivesEstimateService) Confirm(contract *do
68 if undertakerEstimated { 61 if undertakerEstimated {
69 return nil, fmt.Errorf("用户 " + undertaker.UserName + " 已分红") 62 return nil, fmt.Errorf("用户 " + undertaker.UserName + " 已分红")
70 } else { 63 } else {
71 - undertakerDividendsAmount := moneyIncentivesRuleMatched.MoneyIncentivesAmount * (1 - (moneyIncentivesRuleMatched.SalesmanPercentage+moneyIncentivesRuleMatched.ReferrerPercentage)/100) 64 + undertakerDividendsAmount, _ := decimal.NewFromFloat(moneyIncentivesRuleMatched.MoneyIncentivesAmount).Mul(decimal.NewFromFloat(1).Sub(decimal.NewFromFloat(moneyIncentivesRuleMatched.SalesmanPercentage).Add(decimal.NewFromFloat(moneyIncentivesRuleMatched.ReferrerPercentage))).Div(decimal.NewFromFloat(100))).Float64()
72 dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{ 65 dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
73 DividendsUser: &domain.User{ 66 DividendsUser: &domain.User{
74 UserId: undertaker.UserId, 67 UserId: undertaker.UserId,
@@ -91,7 +84,7 @@ func (domainService *ConfirmMoneyIncentivesEstimateService) Confirm(contract *do @@ -91,7 +84,7 @@ func (domainService *ConfirmMoneyIncentivesEstimateService) Confirm(contract *do
91 } 84 }
92 85
93 // 判断业务员在当前阶段是否已经分红 86 // 判断业务员在当前阶段是否已经分红
94 - if undertaker.Salesman.UserId != 0 { 87 + if undertaker.Salesman != nil {
95 salesmanEstimated, err := dividendsEstimateDao.UserEstimated(map[string]interface{}{ 88 salesmanEstimated, err := dividendsEstimateDao.UserEstimated(map[string]interface{}{
96 "undertakerUid": undertaker.Salesman.UserId, 89 "undertakerUid": undertaker.Salesman.UserId,
97 "companyId": contract.Company.CompanyId, 90 "companyId": contract.Company.CompanyId,
@@ -103,7 +96,7 @@ func (domainService *ConfirmMoneyIncentivesEstimateService) Confirm(contract *do @@ -103,7 +96,7 @@ func (domainService *ConfirmMoneyIncentivesEstimateService) Confirm(contract *do
103 if salesmanEstimated { 96 if salesmanEstimated {
104 return nil, fmt.Errorf("业务员 " + undertaker.Salesman.UserName + " 已分红") 97 return nil, fmt.Errorf("业务员 " + undertaker.Salesman.UserName + " 已分红")
105 } else { 98 } else {
106 - undertakerDividendsAmount := moneyIncentivesRuleMatched.MoneyIncentivesAmount * (moneyIncentivesRuleMatched.SalesmanPercentage / 100) 99 + undertakerDividendsAmount, _ := decimal.NewFromFloat(moneyIncentivesRuleMatched.MoneyIncentivesAmount).Mul(decimal.NewFromFloat(moneyIncentivesRuleMatched.SalesmanPercentage).Div(decimal.NewFromFloat(100))).Float64()
107 dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{ 100 dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
108 DividendsUser: &domain.User{ 101 DividendsUser: &domain.User{
109 UserId: undertaker.Salesman.UserId, 102 UserId: undertaker.Salesman.UserId,
@@ -127,7 +120,7 @@ func (domainService *ConfirmMoneyIncentivesEstimateService) Confirm(contract *do @@ -127,7 +120,7 @@ func (domainService *ConfirmMoneyIncentivesEstimateService) Confirm(contract *do
127 } 120 }
128 121
129 // 判断关联业务员在当前阶段是否已经分红 122 // 判断关联业务员在当前阶段是否已经分红
130 - if undertaker.Referrer.UserId != 0 { 123 + if undertaker.Referrer != nil {
131 referrerEstimated, err := dividendsEstimateDao.UserEstimated(map[string]interface{}{ 124 referrerEstimated, err := dividendsEstimateDao.UserEstimated(map[string]interface{}{
132 "undertakerUid": undertaker.Referrer.UserId, 125 "undertakerUid": undertaker.Referrer.UserId,
133 "companyId": contract.Company.CompanyId, 126 "companyId": contract.Company.CompanyId,
@@ -139,7 +132,7 @@ func (domainService *ConfirmMoneyIncentivesEstimateService) Confirm(contract *do @@ -139,7 +132,7 @@ func (domainService *ConfirmMoneyIncentivesEstimateService) Confirm(contract *do
139 if referrerEstimated { 132 if referrerEstimated {
140 return nil, fmt.Errorf("推荐人 " + undertaker.Salesman.UserName + " 已分红") 133 return nil, fmt.Errorf("推荐人 " + undertaker.Salesman.UserName + " 已分红")
141 } else { 134 } else {
142 - undertakerDividendsAmount := moneyIncentivesRuleMatched.MoneyIncentivesAmount * (moneyIncentivesRuleMatched.ReferrerPercentage / 100) 135 + undertakerDividendsAmount, _ := decimal.NewFromFloat(moneyIncentivesRuleMatched.MoneyIncentivesAmount).Mul(decimal.NewFromFloat(moneyIncentivesRuleMatched.ReferrerPercentage).Div(decimal.NewFromFloat(100))).Float64()
143 dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{ 136 dividendsEstimateDetails = append(dividendsEstimateDetails, &service.DividendsEstimateDetail{
144 DividendsUser: &domain.User{ 137 DividendsUser: &domain.User{
145 UserId: undertaker.Referrer.UserId, 138 UserId: undertaker.Referrer.UserId,
@@ -317,6 +317,7 @@ func (ptr *CooperationStatisticsService) CompanyPaymentHistoryStatistics(queryOp @@ -317,6 +317,7 @@ func (ptr *CooperationStatisticsService) CompanyPaymentHistoryStatistics(queryOp
317 Limit int `json:"limit" valid:"Required"` 317 Limit int `json:"limit" valid:"Required"`
318 Offset int `json:"offset"` 318 Offset int `json:"offset"`
319 OrgId int64 `json:"orgId" valid:"Required"` 319 OrgId int64 `json:"orgId" valid:"Required"`
  320 + UserId int64 `json:"userId" valid:"Required"`
320 SortByActuallyPaidAmount int `json:"sortByActuallyPaidAmount" valid:"Required"` 321 SortByActuallyPaidAmount int `json:"sortByActuallyPaidAmount" valid:"Required"`
321 BeginTime time.Time `json:"beginTime"` 322 BeginTime time.Time `json:"beginTime"`
322 EndTime time.Time `json:"endTime"` 323 EndTime time.Time `json:"endTime"`
@@ -326,13 +327,23 @@ func (ptr *CooperationStatisticsService) CompanyPaymentHistoryStatistics(queryOp @@ -326,13 +327,23 @@ func (ptr *CooperationStatisticsService) CompanyPaymentHistoryStatistics(queryOp
326 } 327 }
327 queryOptions = tool_funs.SimpleStructToMap(&request) 328 queryOptions = tool_funs.SimpleStructToMap(&request)
328 329
  330 + // 按关联相关人过滤
  331 + var retMap = make([]interface{}, 0)
  332 + contractNumbers, err := ptr.getRelevantContracts(map[string]interface{}{"userId": request.UserId})
  333 + if len(contractNumbers) == 0 {
  334 + return retMap, nil
  335 + }
  336 + if err != nil {
  337 + return retMap, err
  338 + }
  339 + queryOptions["cooperationContractNumbers"] = contractNumbers
  340 +
329 var responses []usersStatisticsResponse 341 var responses []usersStatisticsResponse
330 creditAccountDao, _ := dao.NewCreditAccountDao(ptr.transactionContext) 342 creditAccountDao, _ := dao.NewCreditAccountDao(ptr.transactionContext)
331 if err := creditAccountDao.CooperationUsersDividendsStatistics(queryOptions, &responses); err != nil { 343 if err := creditAccountDao.CooperationUsersDividendsStatistics(queryOptions, &responses); err != nil {
332 return nil, err 344 return nil, err
333 } 345 }
334 346
335 - var retMap = make([]interface{}, 0)  
336 for i := range responses { 347 for i := range responses {
337 retMap = append(retMap, map[string]interface{}{ 348 retMap = append(retMap, map[string]interface{}{
338 "paymentAmount": responses[i].ActuallyPaidAmount, 349 "paymentAmount": responses[i].ActuallyPaidAmount,
@@ -353,22 +364,76 @@ func (ptr *CooperationStatisticsService) PaymentHistoryHistogramStatistics(query @@ -353,22 +364,76 @@ func (ptr *CooperationStatisticsService) PaymentHistoryHistogramStatistics(query
353 creditAccountDao, _ := dao.NewCreditAccountDao(ptr.transactionContext) 364 creditAccountDao, _ := dao.NewCreditAccountDao(ptr.transactionContext)
354 365
355 var request = struct { 366 var request = struct {
356 - OrgId int64 `json:"orgId"`  
357 - UserBaseId int64 `json:"userBaseId"` 367 + OrgId int64 `json:"orgId"`
  368 + UserId int64 `json:"userId"`
  369 + UserBaseId int64 `json:"userBaseId"`
  370 + BeginTime time.Time `json:"beginTime"`
  371 + EndTime time.Time `json:"endTime"`
358 }{} 372 }{}
359 if err := LoadQueryObject(queryOptions, &request); err != nil { 373 if err := LoadQueryObject(queryOptions, &request); err != nil {
360 return nil, err 374 return nil, err
361 } 375 }
362 queryOptions = tool_funs.SimpleStructToMap(&request) 376 queryOptions = tool_funs.SimpleStructToMap(&request)
363 377
  378 + // 按关联相关人过滤
  379 + var contractNumbers []string
  380 + var err error
  381 + if request.UserId > 0 {
  382 + var retMap = make([]interface{}, 0)
  383 + contractNumbers, err = ptr.getRelevantContracts(map[string]interface{}{"userId": request.UserId})
  384 + if len(contractNumbers) == 0 {
  385 + return retMap, nil
  386 + }
  387 + if err != nil {
  388 + return retMap, err
  389 + }
  390 + queryOptions["cooperationContractNumbers"] = contractNumbers
  391 + }
  392 +
364 var dividends = &CreditAccountStatisticsResponse{} 393 var dividends = &CreditAccountStatisticsResponse{}
  394 + var xAxisData []string
  395 + var values []float64
  396 + var queryItems []queryItem
  397 + if !request.BeginTime.IsZero() && request.BeginTime.AddDate(0, 3, 0).Before(request.EndTime) {
  398 + queryItems, xAxisData = histogramStatisticsByYear()
  399 + } else {
  400 + queryItems, xAxisData = histogramStatisticsByMonth()
  401 + }
  402 + for i := range queryItems {
  403 + item := queryItems[i]
  404 + if len(contractNumbers) == 0 && request.UserId > 0 { //没有相关的合约 查看分红预算单为空
  405 + continue
  406 + }
  407 + queryOptions["beginTime"] = item.BeginTime
  408 + queryOptions["endTime"] = item.EndTime
  409 + if err := creditAccountDao.DividendsStatistics(queryOptions, dividends); err != nil {
  410 + return nil, err
  411 + }
  412 + values = append(values, dividends.Paid)
  413 + }
  414 + return map[string]interface{}{
  415 + "xAxis": map[string]interface{}{
  416 + "data": xAxisData,
  417 + },
  418 + "source": map[string]interface{}{
  419 + "value": values,
  420 + },
  421 + }, nil
  422 +}
  423 +
  424 +type queryItem struct {
  425 + BeginTime time.Time
  426 + EndTime time.Time
  427 +}
  428 +
  429 +func histogramStatisticsByMonth() ([]queryItem, []string) {
  430 + ret := make([]queryItem, 0)
365 year, month := time.Now().Year(), time.Now().Month() 431 year, month := time.Now().Year(), time.Now().Month()
366 var beginTime = time.Date(year, month, 1, 0, 0, 0, 0, time.Local) 432 var beginTime = time.Date(year, month, 1, 0, 0, 0, 0, time.Local)
367 var endTime time.Time 433 var endTime time.Time
368 var increaseDay = 5 434 var increaseDay = 5
369 var monthEnd = time.Date(year, month+1, 1, 0, 0, 0, 0, time.Local).Add(-time.Second) 435 var monthEnd = time.Date(year, month+1, 1, 0, 0, 0, 0, time.Local).Add(-time.Second)
370 var xAxisData []string 436 var xAxisData []string
371 - var values []float64  
372 for { 437 for {
373 if beginTime.AddDate(0, 0, increaseDay).After(monthEnd) { 438 if beginTime.AddDate(0, 0, increaseDay).After(monthEnd) {
374 endTime = monthEnd 439 endTime = monthEnd
@@ -376,25 +441,30 @@ func (ptr *CooperationStatisticsService) PaymentHistoryHistogramStatistics(query @@ -376,25 +441,30 @@ func (ptr *CooperationStatisticsService) PaymentHistoryHistogramStatistics(query
376 } else { 441 } else {
377 endTime = beginTime.AddDate(0, 0, increaseDay).Add(-time.Second) 442 endTime = beginTime.AddDate(0, 0, increaseDay).Add(-time.Second)
378 } 443 }
379 - xAxisData = append(xAxisData, endTime.Format("01-02"))  
380 - queryOptions["beginTime"] = beginTime  
381 - queryOptions["endTime"] = beginTime.AddDate(0, 0, increaseDay)  
382 - if err := creditAccountDao.DividendsStatistics(queryOptions, dividends); err != nil {  
383 - return nil, err 444 + item := queryItem{
  445 + BeginTime: beginTime,
  446 + EndTime: beginTime.AddDate(0, 0, increaseDay).Add(-time.Second),
384 } 447 }
385 - dividends.Accounting = dividends.Total - dividends.Accounted  
386 - values = append(values, dividends.Paid) 448 + xAxisData = append(xAxisData, item.EndTime.Format("01-02"))
387 beginTime = endTime 449 beginTime = endTime
388 if endTime == monthEnd { 450 if endTime == monthEnd {
389 break 451 break
390 } 452 }
  453 + ret = append(ret, item)
391 } 454 }
392 - return map[string]interface{}{  
393 - "xAxis": map[string]interface{}{  
394 - "data": xAxisData,  
395 - },  
396 - "source": map[string]interface{}{  
397 - "value": values,  
398 - },  
399 - }, nil 455 + return ret, xAxisData
  456 +}
  457 +
  458 +func histogramStatisticsByYear() ([]queryItem, []string) {
  459 + ret := make([]queryItem, 0)
  460 + var xAxisData = []string{"3月", "6月", "9月", "12月"}
  461 + year, _ := time.Now().Year(), time.Now().Month()
  462 + var increase = 3
  463 + for i := 0; i < 4; i++ {
  464 + ret = append(ret, queryItem{
  465 + BeginTime: time.Date(year, time.Month(1+i*increase), 1, 0, 0, 0, 0, time.Local),
  466 + EndTime: time.Date(year, time.Month(1+(i+1)*increase), 1, 0, 0, 0, 0, time.Local),
  467 + })
  468 + }
  469 + return ret, xAxisData
400 } 470 }
@@ -52,21 +52,15 @@ func (ptr *CooperationStatisticsService) cooperationCompanyStatistics(userBaseId @@ -52,21 +52,15 @@ func (ptr *CooperationStatisticsService) cooperationCompanyStatistics(userBaseId
52 52
53 // 2.相关合约统计 53 // 2.相关合约统计
54 cooperationContractRelevantRepository, _ := repository.NewCooperationContractRelevantRepository(ptr.transactionContext) 54 cooperationContractRelevantRepository, _ := repository.NewCooperationContractRelevantRepository(ptr.transactionContext)
55 - cooperationContractCount, _, err := cooperationContractRelevantRepository.Find(map[string]interface{}{"userBaseId": userBaseId, 55 + cooperationContractCount, _, err := cooperationContractRelevantRepository.Find(map[string]interface{}{"userBaseId": userBaseId, "orgId": orgId,
56 "limit": 1}) 56 "limit": 1})
57 if err != nil { 57 if err != nil {
58 return nil, err 58 return nil, err
59 } 59 }
60 60
61 // 3.个人分红统计 61 // 3.个人分红统计
62 - type response struct {  
63 - Total float64 `json:"total"`  
64 - Accounting float64 `json:"accounting"`  
65 - Accounted float64 `json:"accounted"`  
66 - Paid float64 `json:"paid"`  
67 - }  
68 creditAccountDao, _ := dao.NewCreditAccountDao(ptr.transactionContext) 62 creditAccountDao, _ := dao.NewCreditAccountDao(ptr.transactionContext)
69 - var allDividends = &response{} 63 + var allDividends = &CreditAccountStatisticsResponse{}
70 if err := creditAccountDao.DividendsStatistics(map[string]interface{}{"userBaseId": userBaseId, "orgId": orgId}, allDividends); err != nil { 64 if err := creditAccountDao.DividendsStatistics(map[string]interface{}{"userBaseId": userBaseId, "orgId": orgId}, allDividends); err != nil {
71 return nil, err 65 return nil, err
72 } 66 }
@@ -76,7 +70,7 @@ func (ptr *CooperationStatisticsService) cooperationCompanyStatistics(userBaseId @@ -76,7 +70,7 @@ func (ptr *CooperationStatisticsService) cooperationCompanyStatistics(userBaseId
76 OrgId: orgId, 70 OrgId: orgId,
77 CooperationProjectCount: cooperationProjectCount, 71 CooperationProjectCount: cooperationProjectCount,
78 CooperationContractCount: cooperationContractCount, 72 CooperationContractCount: cooperationContractCount,
79 - DividendsIncome: utils.Round(allDividends.Total, 2), 73 + DividendsIncome: utils.Round(allDividends.Accounted, 2),
80 } 74 }
81 return ret, nil 75 return ret, nil
82 } 76 }
@@ -105,7 +99,7 @@ func (ptr *CooperationStatisticsService) PersonCooperationContractStatistics(que @@ -105,7 +99,7 @@ func (ptr *CooperationStatisticsService) PersonCooperationContractStatistics(que
105 } 99 }
106 queryOptions = tool_funs.SimpleStructToMap(&request) 100 queryOptions = tool_funs.SimpleStructToMap(&request)
107 101
108 - cooperationContractUndertaker, _ := repository.NewCooperationContractUndertakerRepository(ptr.transactionContext) 102 + cooperationContractUndertaker, _ := repository.NewCooperationContractRelevantRepository(ptr.transactionContext)
109 _, contractUndertakers, err := cooperationContractUndertaker.Find(queryOptions) 103 _, contractUndertakers, err := cooperationContractUndertaker.Find(queryOptions)
110 if err != nil { 104 if err != nil {
111 return nil, nil 105 return nil, nil
1 package domain_service 1 package domain_service
2 2
3 import ( 3 import (
4 - "encoding/json"  
5 "fmt" 4 "fmt"
6 "github.com/go-pg/pg/v10" 5 "github.com/go-pg/pg/v10"
7 pgTransaction "github.com/linmadan/egglib-go/transaction/pg" 6 pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
@@ -48,6 +47,8 @@ const ( @@ -48,6 +47,8 @@ const (
48 CreditAccountStatistics = "CreditAccountStatistics" 47 CreditAccountStatistics = "CreditAccountStatistics"
49 // 公司/个人 - 支付历史统计直方图 48 // 公司/个人 - 支付历史统计直方图
50 PaymentHistoryHistogramStatistics = "PaymentHistoryHistogramStatistics" 49 PaymentHistoryHistogramStatistics = "PaymentHistoryHistogramStatistics"
  50 + // 用户相关的项目合约编号列表查询
  51 + RelevantCooperationContractNumbers = "RelevantCooperationContractNumbers"
51 ) 52 )
52 53
53 // CooperationStatisticsService 共创统计服务 54 // CooperationStatisticsService 共创统计服务
@@ -77,6 +78,7 @@ func (ptr *CooperationStatisticsService) SearchContractDividends(queryOptions ma @@ -77,6 +78,7 @@ func (ptr *CooperationStatisticsService) SearchContractDividends(queryOptions ma
77 //企业 78 //企业
78 CompanyId int64 `json:"companyId"` 79 CompanyId int64 `json:"companyId"`
79 OrgId int64 `json:"orgId"` 80 OrgId int64 `json:"orgId"`
  81 + UserId int64 `json:"userId"`
80 //个人 82 //个人
81 UserBaseId int64 `json:"userBaseId"` 83 UserBaseId int64 `json:"userBaseId"`
82 Offset int `json:"offset"` 84 Offset int `json:"offset"`
@@ -90,11 +92,11 @@ func (ptr *CooperationStatisticsService) SearchContractDividends(queryOptions ma @@ -90,11 +92,11 @@ func (ptr *CooperationStatisticsService) SearchContractDividends(queryOptions ma
90 // 1.根据个人、企业查询合约列表 92 // 1.根据个人、企业查询合约列表
91 var contracts []*domain.CooperationContract 93 var contracts []*domain.CooperationContract
92 var err error 94 var err error
93 - if _, ok := queryOptions["userBaseId"]; ok {  
94 - contracts, err = ptr.getUserContracts(queryOptions)  
95 - } else if v, ok := queryOptions["orgId"]; ok {  
96 - queryOptions["orgId"], _ = (v.(json.Number)).Int64()  
97 - contracts, err = ptr.getCompanyContracts(queryOptions) 95 + if request.UserBaseId > 0 {
  96 + contracts, err = ptr.getUserContracts(request.UserBaseId, queryOptions)
  97 + } else if request.OrgId > 0 {
  98 + queryOptions["orgId"] = request.OrgId
  99 + contracts, err = ptr.getCompanyContracts(request.UserId, queryOptions)
98 } 100 }
99 if err != nil { 101 if err != nil {
100 return nil, err 102 return nil, err
@@ -131,32 +133,59 @@ func (ptr *CooperationStatisticsService) SearchContractDividends(queryOptions ma @@ -131,32 +133,59 @@ func (ptr *CooperationStatisticsService) SearchContractDividends(queryOptions ma
131 // getUserContracts 获取用户的合约列表 133 // getUserContracts 获取用户的合约列表
132 // 134 //
133 // p1 p1_desc 135 // p1 p1_desc
134 -func (ptr *CooperationStatisticsService) getUserContracts(queryOptions map[string]interface{}) ([]*domain.CooperationContract, error) {  
135 - undertakerRepository, _ := repository.NewCooperationContractUndertakerRepository(ptr.transactionContext)  
136 - _, undertakers, err := undertakerRepository.Find(queryOptions)  
137 - var numbers []string  
138 - for i := range undertakers {  
139 - numbers = append(numbers, undertakers[i].CooperationContractNumber) 136 +func (ptr *CooperationStatisticsService) getUserContracts(userBaseId int64, queryOptions map[string]interface{}) ([]*domain.CooperationContract, error) {
  137 + var contracts = make([]*domain.CooperationContract, 0)
  138 + if userBaseId == 0 {
  139 + return contracts, nil
140 } 140 }
141 - if len(numbers) == 0 {  
142 - return []*domain.CooperationContract{}, nil 141 + contractNumbers, err := ptr.getRelevantContracts(map[string]interface{}{"userBaseId": userBaseId})
  142 + if len(contractNumbers) == 0 {
  143 + return contracts, nil
143 } 144 }
144 - queryOptions["inCooperationContractNumber"] = numbers  
145 - contractRepository, _ := repository.NewCooperationContractRepository(ptr.transactionContext)  
146 - _, contracts, err := contractRepository.Find(queryOptions) 145 + if err != nil {
  146 + return contracts, err
  147 + }
  148 + queryOptions["cooperationContractNumbers"] = contractNumbers
  149 + contractRepository, _ := dao.NewCooperationContractDao(ptr.transactionContext)
  150 + _, contracts, err = contractRepository.Find(queryOptions)
147 return contracts, err 151 return contracts, err
148 } 152 }
149 153
150 // getCompanyContracts 获取组织合约列表 154 // getCompanyContracts 获取组织合约列表
151 // 155 //
152 // p1 p1_desc 156 // p1 p1_desc
153 -func (ptr *CooperationStatisticsService) getCompanyContracts(queryOptions map[string]interface{}) ([]*domain.CooperationContract, error) {  
154 - contractRepository, _ := repository.NewCooperationContractRepository(ptr.transactionContext)  
155 - // TODO: 参数查询条件  
156 - _, contracts, err := contractRepository.Find(queryOptions) 157 +func (ptr *CooperationStatisticsService) getCompanyContracts(userId int64, queryOptions map[string]interface{}) ([]*domain.CooperationContract, error) {
  158 + var contracts = make([]*domain.CooperationContract, 0)
  159 + if userId == 0 {
  160 + return contracts, nil
  161 + }
  162 + contractNumbers, err := ptr.getRelevantContracts(map[string]interface{}{"userId": userId})
  163 + if len(contractNumbers) == 0 {
  164 + return contracts, nil
  165 + }
  166 + if err != nil {
  167 + return contracts, err
  168 + }
  169 + queryOptions["cooperationContractNumbers"] = contractNumbers
  170 + contractRepository, _ := dao.NewCooperationContractDao(ptr.transactionContext)
  171 + _, contracts, err = contractRepository.Find(queryOptions)
157 return contracts, err 172 return contracts, err
158 } 173 }
159 174
  175 +//getRelevantContracts 获取相关人的合约
  176 +func (ptr *CooperationStatisticsService) getRelevantContracts(queryOptions map[string]interface{}) ([]string, error) {
  177 + undertakerRepository, _ := repository.NewCooperationContractRelevantRepository(ptr.transactionContext)
  178 + _, undertakers, err := undertakerRepository.Find(queryOptions)
  179 + var numbers []string
  180 + for i := range undertakers {
  181 + numbers = append(numbers, undertakers[i].CooperationContractNumber)
  182 + }
  183 + if len(numbers) == 0 {
  184 + return []string{}, nil
  185 + }
  186 + return numbers, err
  187 +}
  188 +
160 // getContractsDividendsEstimate 合约分红预算 189 // getContractsDividendsEstimate 合约分红预算
161 func (ptr *CooperationStatisticsService) getContractsDividendsEstimate(numbers []string) (map[string]*domain.DividendsEstimate, error) { 190 func (ptr *CooperationStatisticsService) getContractsDividendsEstimate(numbers []string) (map[string]*domain.DividendsEstimate, error) {
162 var estimates []*domain.DividendsEstimate 191 var estimates []*domain.DividendsEstimate
@@ -320,6 +349,7 @@ func (ptr *CooperationStatisticsService) DividendsStatistics(queryOptions map[st @@ -320,6 +349,7 @@ func (ptr *CooperationStatisticsService) DividendsStatistics(queryOptions map[st
320 //企业 349 //企业
321 CompanyId int64 `json:"companyId"` 350 CompanyId int64 `json:"companyId"`
322 OrgId int64 `json:"orgId"` 351 OrgId int64 `json:"orgId"`
  352 + UserId int64 `json:"userId"`
323 //个人 353 //个人
324 UserBaseId int64 `json:"userBaseId"` 354 UserBaseId int64 `json:"userBaseId"`
325 }{} 355 }{}
@@ -335,27 +365,45 @@ func (ptr *CooperationStatisticsService) DividendsStatistics(queryOptions map[st @@ -335,27 +365,45 @@ func (ptr *CooperationStatisticsService) DividendsStatistics(queryOptions map[st
335 Paid float64 `json:"paid"` 365 Paid float64 `json:"paid"`
336 } 366 }
337 creditAccountDao, _ := dao.NewCreditAccountDao(ptr.transactionContext) 367 creditAccountDao, _ := dao.NewCreditAccountDao(ptr.transactionContext)
338 -  
339 - var allDividends = &response{}  
340 - if err := creditAccountDao.DividendsStatistics(queryOptions, allDividends); err != nil {  
341 - return nil, err 368 + var contractNumbers []string
  369 + var err error
  370 + if request.OrgId > 0 && request.UserId > 0 {
  371 + contractNumbers, err = ptr.getRelevantContracts(map[string]interface{}{"orgId": request.OrgId, "userId": request.UserId})
  372 + if err != nil {
  373 + return struct{}{}, err
  374 + }
  375 + } else if request.UserBaseId > 0 {
  376 + contractNumbers, err = ptr.getRelevantContracts(map[string]interface{}{"orgId": request.OrgId, "userBaseId": request.UserBaseId})
  377 + if err != nil {
  378 + return struct{}{}, err
  379 + }
342 } 380 }
343 - allDividends.Accounting = allDividends.Total - allDividends.Accounted  
344 381
345 - var annualDividends = &response{}  
346 - queryOptions["beginTime"] = time.Date(time.Now().Year(), 1, 1, 0, 0, 0, 0, time.Local)  
347 - queryOptions["endTime"] = time.Date(time.Now().Year(), 1, 1, 0, 0, 0, 0, time.Local).AddDate(1, 0, 0)  
348 - if err := creditAccountDao.DividendsStatistics(queryOptions, annualDividends); err != nil {  
349 - return nil, err  
350 - }  
351 - annualDividends.Accounting = annualDividends.Total - annualDividends.Accounted 382 + queryOptions["cooperationContractNumbers"] = contractNumbers
352 383
353 - var quarterDividends = &response{}  
354 - queryOptions["beginTime"], queryOptions["endTime"] = quarterBeginEnd()  
355 - if err := creditAccountDao.DividendsStatistics(queryOptions, quarterDividends); err != nil {  
356 - return nil, err 384 + var allDividends = &CreditAccountStatisticsResponse{}
  385 + var annualDividends = &CreditAccountStatisticsResponse{}
  386 + var quarterDividends = &CreditAccountStatisticsResponse{}
  387 +
  388 + if len(contractNumbers) > 0 {
  389 + if err := creditAccountDao.DividendsStatistics(queryOptions, allDividends); err != nil {
  390 + return nil, err
  391 + }
  392 + allDividends.Accounting = allDividends.Total - allDividends.Accounted
  393 +
  394 + queryOptions["beginTime"] = time.Date(time.Now().Year(), 1, 1, 0, 0, 0, 0, time.Local)
  395 + queryOptions["endTime"] = time.Date(time.Now().Year(), 1, 1, 0, 0, 0, 0, time.Local).AddDate(1, 0, 0)
  396 + if err := creditAccountDao.DividendsStatistics(queryOptions, annualDividends); err != nil {
  397 + return nil, err
  398 + }
  399 + annualDividends.Accounting = annualDividends.Total - annualDividends.Accounted
  400 +
  401 + queryOptions["beginTime"], queryOptions["endTime"] = quarterBeginEnd()
  402 + if err := creditAccountDao.DividendsStatistics(queryOptions, quarterDividends); err != nil {
  403 + return nil, err
  404 + }
  405 + quarterDividends.Accounting = quarterDividends.Total - quarterDividends.Accounted
357 } 406 }
358 - quarterDividends.Accounting = quarterDividends.Total - quarterDividends.Accounted  
359 407
360 ret := map[string]interface{}{ 408 ret := map[string]interface{}{
361 "allDividends": allDividends, 409 "allDividends": allDividends,
@@ -393,8 +441,10 @@ func quarterBeginEnd() (time.Time, time.Time) { @@ -393,8 +441,10 @@ func quarterBeginEnd() (time.Time, time.Time) {
393 func (ptr *CooperationStatisticsService) SearchDividendsEstimates(queryOptions map[string]interface{}) (interface{}, error) { 441 func (ptr *CooperationStatisticsService) SearchDividendsEstimates(queryOptions map[string]interface{}) (interface{}, error) {
394 // 参数验证 442 // 参数验证
395 var request = struct { 443 var request = struct {
396 - CompanyId int64 `json:"companyId"`  
397 - OrgId int64 `json:"orgId"` 444 + CompanyId int64 `json:"companyId"`
  445 + OrgId int64 `json:"orgId"`
  446 + UserId int64 `json:"userId"`
  447 +
398 UserBaseId int64 `json:"userBaseId"` 448 UserBaseId int64 `json:"userBaseId"`
399 DividendsAccountStatus int32 `json:"dividendsAccountStatus"` // 分红结算状态 449 DividendsAccountStatus int32 `json:"dividendsAccountStatus"` // 分红结算状态
400 Offset int64 `json:"offset"` 450 Offset int64 `json:"offset"`
@@ -405,10 +455,18 @@ func (ptr *CooperationStatisticsService) SearchDividendsEstimates(queryOptions m @@ -405,10 +455,18 @@ func (ptr *CooperationStatisticsService) SearchDividendsEstimates(queryOptions m
405 } 455 }
406 queryOptions = tool_funs.SimpleStructToMap(&request) 456 queryOptions = tool_funs.SimpleStructToMap(&request)
407 457
408 - dividendsEstimateRepository, _ := repository.NewDividendsEstimateRepository(ptr.transactionContext)  
409 - _, estimates, err := dividendsEstimateRepository.Find(queryOptions)  
410 - if err != nil {  
411 - return nil, err 458 + var contractNumbers []string
  459 + var err error
  460 + if request.OrgId > 0 && request.UserId > 0 {
  461 + contractNumbers, err = ptr.getRelevantContracts(map[string]interface{}{"orgId": request.OrgId, "userId": request.UserId})
  462 + if err != nil {
  463 + return struct{}{}, err
  464 + }
  465 + } else if request.UserBaseId > 0 {
  466 + contractNumbers, err = ptr.getRelevantContracts(map[string]interface{}{"orgId": request.OrgId, "userBaseId": request.UserBaseId})
  467 + if err != nil {
  468 + return struct{}{}, err
  469 + }
412 } 470 }
413 type response struct { 471 type response struct {
414 // 承接人分红预算记录ID 472 // 承接人分红预算记录ID
@@ -429,6 +487,18 @@ func (ptr *CooperationStatisticsService) SearchDividendsEstimates(queryOptions m @@ -429,6 +487,18 @@ func (ptr *CooperationStatisticsService) SearchDividendsEstimates(queryOptions m
429 CustomerName string `json:"customerName"` 487 CustomerName string `json:"customerName"`
430 } 488 }
431 var results = make([]response, 0) 489 var results = make([]response, 0)
  490 + if len(contractNumbers) == 0 {
  491 + return results, nil
  492 + }
  493 +
  494 + queryOptions["cooperationContractNumbers"] = contractNumbers
  495 +
  496 + dividendsEstimateRepository, _ := repository.NewDividendsEstimateRepository(ptr.transactionContext)
  497 + _, estimates, err := dividendsEstimateRepository.Find(queryOptions)
  498 + if err != nil {
  499 + return nil, err
  500 + }
  501 +
432 dividendsOrderRepository, _ := repository.NewDividendsOrderRepository(ptr.transactionContext) 502 dividendsOrderRepository, _ := repository.NewDividendsOrderRepository(ptr.transactionContext)
433 dividendsReturnedOrderRepository, _ := repository.NewDividendsReturnedOrderRepository(ptr.transactionContext) 503 dividendsReturnedOrderRepository, _ := repository.NewDividendsReturnedOrderRepository(ptr.transactionContext)
434 for i := range estimates { 504 for i := range estimates {
@@ -441,8 +511,11 @@ func (ptr *CooperationStatisticsService) SearchDividendsEstimates(queryOptions m @@ -441,8 +511,11 @@ func (ptr *CooperationStatisticsService) SearchDividendsEstimates(queryOptions m
441 DividendsType: item.DividendsType, 511 DividendsType: item.DividendsType,
442 DividendsUser: item.DividendsUser, 512 DividendsUser: item.DividendsUser,
443 } 513 }
  514 + // TODO:优化查询 统一查询到map里面
444 if item.DividendsType == 1 { 515 if item.DividendsType == 1 {
445 - order, err := dividendsOrderRepository.FindOne(map[string]interface{}{"dividendsOrderNumber": item.OrderOrReturnedOrderNum}) 516 + order, err := dividendsOrderRepository.FindOne(map[string]interface{}{
  517 + "dividendsOrderNumber": item.OrderOrReturnedOrderNum,
  518 + })
446 if err != nil { 519 if err != nil {
447 return nil, err 520 return nil, err
448 } 521 }
@@ -469,6 +542,8 @@ func (ptr *CooperationStatisticsService) CreditAccountStatistics(queryOptions ma @@ -469,6 +542,8 @@ func (ptr *CooperationStatisticsService) CreditAccountStatistics(queryOptions ma
469 UserBaseId int64 `json:"userBaseId"` 542 UserBaseId int64 `json:"userBaseId"`
470 BeginTime time.Time `json:"beginTime"` 543 BeginTime time.Time `json:"beginTime"`
471 EndTime time.Time `json:"endTime"` 544 EndTime time.Time `json:"endTime"`
  545 + // 合约编号列表
  546 + CooperationContractNumbers []string `json:"cooperationContractNumbers"`
472 }{} 547 }{}
473 if err := LoadQueryObject(queryOptions, &request); err != nil { 548 if err := LoadQueryObject(queryOptions, &request); err != nil {
474 return nil, err 549 return nil, err
@@ -490,4 +565,26 @@ type CreditAccountStatisticsResponse struct { @@ -490,4 +565,26 @@ type CreditAccountStatisticsResponse struct {
490 Accounting float64 `json:"accounting"` 565 Accounting float64 `json:"accounting"`
491 Accounted float64 `json:"accounted"` 566 Accounted float64 `json:"accounted"`
492 Paid float64 `json:"paid"` 567 Paid float64 `json:"paid"`
  568 + Unpaid float64 `json:"unpaid"`
  569 +}
  570 +
  571 +//getRelevantContracts 获取相关人的合约
  572 +func (ptr *CooperationStatisticsService) RelevantCooperationContractNumbers(queryOptions map[string]interface{}) (interface{}, error) {
  573 + var request = struct {
  574 + //企业
  575 + CompanyId int64 `json:"companyId" valid:"Required"`
  576 + OrgId int64 `json:"orgId" valid:"Required"`
  577 + UserId int64 `json:"userId" valid:"Required"`
  578 + //个人
  579 + //UserBaseId int64 `json:"userBaseId"`
  580 + //Offset int `json:"offset"`
  581 + //Limit int `json:"limit"`
  582 + }{}
  583 + if err := LoadQueryObject(queryOptions, &request); err != nil {
  584 + return nil, err
  585 + }
  586 + queryOptions = tool_funs.SimpleStructToMap(&request)
  587 +
  588 + contractNumbers, err := ptr.getRelevantContracts(queryOptions)
  589 + return contractNumbers, err
493 } 590 }
@@ -172,6 +172,33 @@ func (service *UserService) OperatorFrom(companyId int64, orgId int64, userId in @@ -172,6 +172,33 @@ func (service *UserService) OperatorFrom(companyId int64, orgId int64, userId in
172 } 172 }
173 } 173 }
174 174
  175 +// VisitorFrom 获取游客
  176 +func (service *UserService) VisitorFrom(companyId int64, orgId int64, userBaseId int64) (*domain.User, error) {
  177 + var returnData *domain.User
  178 + if userAdaptor, err := adaptor.NewUserAdaptor(); err != nil {
  179 + return nil, err
  180 + } else {
  181 + if visitor, err := userAdaptor.ToParticipator(companyId, orgId, userBaseId, "Visitor"); err != nil {
  182 + return nil, err
  183 + } else {
  184 + if visitor != nil {
  185 + log.Logger.Debug("游客", map[string]interface{}{
  186 + "visitor interface": visitor,
  187 + })
  188 + visitorJson, err1 := json.Marshal(visitor)
  189 + if err1 != nil {
  190 + return nil, err
  191 + }
  192 + err2 := json.Unmarshal(visitorJson, &returnData)
  193 + if err2 != nil {
  194 + return nil, err2
  195 + }
  196 + }
  197 + return returnData, nil
  198 + }
  199 + }
  200 +}
  201 +
175 func NewUserService() (*UserService, error) { 202 func NewUserService() (*UserService, error) {
176 return &UserService{}, nil 203 return &UserService{}, nil
177 } 204 }
@@ -17,6 +17,8 @@ type ContractUndertakerFeedback struct { @@ -17,6 +17,8 @@ type ContractUndertakerFeedback struct {
17 CooperationContractNumber string `comment:"共创合约编号"` 17 CooperationContractNumber string `comment:"共创合约编号"`
18 // 项目合约名称 18 // 项目合约名称
19 CooperationContractName string `comment:"项目合约名称"` 19 CooperationContractName string `comment:"项目合约名称"`
  20 + // 模式名称
  21 + CooperationModeName string `comment:"模式名称"`
20 // 共创合约承接人 22 // 共创合约承接人
21 ContractUndertaker *domain.Undertaker `comment:"共创合约承接人"` 23 ContractUndertaker *domain.Undertaker `comment:"共创合约承接人"`
22 // 数据所属组织机构 24 // 数据所属组织机构
@@ -29,8 +29,8 @@ type CooperationApplication struct { @@ -29,8 +29,8 @@ type CooperationApplication struct {
29 CooperationProjectNumber string `comment:"共创项目编号"` 29 CooperationProjectNumber string `comment:"共创项目编号"`
30 // 数据所属组织机构 30 // 数据所属组织机构
31 Org *domain.Org `comment:"数据所属组织机构"` 31 Org *domain.Org `comment:"数据所属组织机构"`
32 - // 是否被取消标志位  
33 - IsCanceled bool `comment:"是否被取消标志位"` 32 + // 是否被取消标志位 1正常,2取消
  33 + IsCanceled int32 `comment:"是否被取消标志位" pg:",default:1"`
34 // 公司 34 // 公司
35 Company *domain.Company `comment:"公司"` 35 Company *domain.Company `comment:"公司"`
36 // 创建时间 36 // 创建时间
@@ -25,7 +25,7 @@ type CooperationContractByUndertaker struct { @@ -25,7 +25,7 @@ type CooperationContractByUndertaker struct {
25 Department *domain.Department `comment:"共创合约发起部门"` 25 Department *domain.Department `comment:"共创合约发起部门"`
26 // 组织机构 26 // 组织机构
27 Org *domain.Org `comment:"组织机构"` 27 Org *domain.Org `comment:"组织机构"`
28 - // 共创合约状态 28 + // 共创合约状态 1正常,2关闭
29 ContractStatus int32 `comment:"共创合约状态"` 29 ContractStatus int32 `comment:"共创合约状态"`
30 // 共创模式名称 30 // 共创模式名称
31 CooperationModeName string `comment:"共创合约名称"` 31 CooperationModeName string `comment:"共创合约名称"`
@@ -10,7 +10,7 @@ type DividendsOrder struct { @@ -10,7 +10,7 @@ type DividendsOrder struct {
10 // 分红订单ID 10 // 分红订单ID
11 DividendsOrderId int64 `comment:"分红订单ID" pg:",pk"` 11 DividendsOrderId int64 `comment:"分红订单ID" pg:",pk"`
12 // 分红订单号 12 // 分红订单号
13 - DividendsOrderNumber string `comment:"分红订单号"` 13 + DividendsOrderNumber string `comment:"分红订单号" pg:",unique"`
14 // 分红订单原单号 14 // 分红订单原单号
15 DividendsOriginalOrderNum string `comment:"分红订单原单号"` 15 DividendsOriginalOrderNum string `comment:"分红订单原单号"`
16 // 分红订单金额 16 // 分红订单金额
@@ -13,7 +13,7 @@ type OrderGood struct { @@ -13,7 +13,7 @@ type OrderGood struct {
13 // 订单产品单价 13 // 订单产品单价
14 OrderGoodPrice float64 `comment:"订单产品单价"` 14 OrderGoodPrice float64 `comment:"订单产品单价"`
15 // 订单产品数量 15 // 订单产品数量
16 - OrderGoodQuantity int64 `comment:"订单产品数量"` 16 + OrderGoodQuantity float64 `comment:"订单产品数量"`
17 // 关联分红订单号 17 // 关联分红订单号
18 DividendsOrderNumber string `comment:"关联分红订单号"` 18 DividendsOrderNumber string `comment:"关联分红订单号"`
19 // 关联的分红退货单号 19 // 关联的分红退货单号