Przeglądaj źródła

修正基础绩效小数点只有两位的问题

luocaiyang 3 lat temu
rodzic
commit
895ff8447a

+ 2 - 2
StaffPerformance.sln

@@ -1,7 +1,7 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.31624.102
+# Visual Studio Version 17
+VisualStudioVersion = 17.1.32210.238
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "wispro.sp.api", "wispro.sp.api\wispro.sp.api.csproj", "{86964765-C850-48E8-B11F-1AD8B74E0BAE}"
 EndProject

+ 70 - 0
wispro.sp.api/AppealHandler/ChangeReviewerReviewer.cs

@@ -0,0 +1,70 @@
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Linq;
+using wispro.sp.entity;
+using wispro.sp.share;
+
+namespace wispro.sp.api.AppealHandler
+{
+    public class ChangeReviewerReviewer : IDoAppealObject
+    {
+        public void DoAppeal(AppealObject appeal, int appealRecordId, DbContext spContext)
+        {
+            bool isAggree = false;
+            foreach (var iv in appeal.inputFieldValues)
+            {
+                if (iv.InputField == null)
+                {
+                    iv.InputField = ((spDbContext)spContext).InputFields.FirstOrDefault(s => s.Id == iv.InputFieldId);
+                }
+
+                if (iv.InputField.FieldName == "审核意见" && iv.Value == "确认变更")
+                {
+                    isAggree = true;
+                    break;
+                }
+
+            }
+            if (isAggree)
+            {
+                var result = ((spDbContext)spContext).InputFieldValues.Where<InputFieldValue>(f => 
+                        f.AppealRecordId == appealRecordId && f.InputField.AppealState == 0)
+                    .ToList();
+
+                string strReviewerName = "";
+                foreach (var iv in result)
+                {
+                    if (iv.InputField == null)
+                    {
+                        iv.InputField = ((spDbContext)spContext).InputFields.FirstOrDefault(s => s.Id == iv.InputFieldId);
+                    }
+
+                    if (iv.InputField.FieldName == "实际核稿人")
+                    {
+                        strReviewerName = iv.Value;
+                        break;
+                    }
+                }
+
+                var appRecord = ((spDbContext)spContext).AppealRecords.Include(a=>a.Item).FirstOrDefault(f => f.Id == appealRecordId);
+                
+                if (appRecord != null && appRecord.Item != null)
+                {
+                    var newStaff = ((spDbContext)spContext).Staffs.FirstOrDefault(s => s.Name == strReviewerName.Trim());
+
+                    if(newStaff != null)
+                    {
+                        appRecord.Item.ReviewerId = newStaff.Id;
+                    }
+                    else
+                    {
+                        throw new ApplicationException("输入的【实际核稿人】不存在!");
+                    }
+
+                }
+
+
+            }
+        }
+    }
+}

+ 19 - 2
wispro.sp.api/Controllers/ReportController.cs

@@ -136,6 +136,23 @@ namespace wispro.sp.api.Controllers
                     return retDatas;
 
                     break;
+                case 5:
+                    var retData5 = results.GroupBy(c => new { c.Creater.Department, c.CreateTime.Year, c.CreateTime.Month })
+                        .Select(g => new { key = g.Key, Count = g.Count() }).OrderByDescending(g => g.Count)
+                        .ToDictionary(g => g.key, g => g.Count);
+
+                    retDatas.ATitle = "部门";
+                    retDatas.BTitle = "绩效月份";
+                    retDatas.Title = "部门每月申诉统计";
+                    retDatas.Datas = new List<ChartData>();
+
+                    foreach (var key in retData5.Keys)
+                    {
+                        retDatas.Datas.Add(new ChartData() { type = key.Department, year = $" {DateTime.Parse($"{key.Year}-{key.Month}-1").ToString("yyyy-MM")}", value = retData5[key] });
+                    }
+                    return retDatas;
+
+                    break;
                 default:
                     return null;
                     break;
@@ -232,7 +249,7 @@ namespace wispro.sp.api.Controllers
 
                         foreach (var key in retData1)
                         {
-                            retDatas.Datas.Add(new ChartData() { type = key.Name, year = $" {DateTime.Parse($"{key.Year}-{key.Month}-1").ToString("yyyy-MM")}", value = key.sum.HasValue ? key.sum.Value : 0 });
+                            retDatas.Datas.Add(new ChartData() { type = key.Name, year = $"{DateTime.Parse($"{key.Year}-{key.Month}-1").ToString("yyyy-MM")}", value = key.sum.HasValue ? key.sum.Value : 0 });
                         }
                         return retDatas;
                     }
@@ -249,7 +266,7 @@ namespace wispro.sp.api.Controllers
 
                     foreach (var key in retData3)
                     {
-                        retDatas.Datas.Add(new ChartData() { type = key.Name, year = $" {DateTime.Parse($"{key.Year}-{key.Month}-1").ToString("yyyy-MM")}", value = key.sum.HasValue ? key.sum.Value : 0 });
+                        retDatas.Datas.Add(new ChartData() { type = key.Name, year = $"{DateTime.Parse($"{key.Year}-{key.Month}-1").ToString("yyyy-MM")}", value = key.sum.HasValue ? key.sum.Value : 0 });
                     }
                     return retDatas;
                     break;

+ 121 - 45
wispro.sp.api/Controllers/StaffController.cs

@@ -254,21 +254,47 @@ namespace wispro.sp.api.Controllers
                 {
                     try
                     {
-                        editObject.Account = saveUser.staff.Account;
-                        editObject.Department = saveUser.staff.Department;
-                        editObject.EntyDate = saveUser.staff.EntyDate;
+                        if(saveUser.staff.Account != null && editObject.Account != saveUser.staff.Account)
+                            editObject.Account = saveUser.staff.Account;
+
+                        if (saveUser.staff.Department != null && editObject.Department != saveUser.staff.Department)
+                            editObject.Department = saveUser.staff.Department;
+
+                        if (saveUser.staff.EntyDate != null && editObject.EntyDate != saveUser.staff.EntyDate)
+                            editObject.EntyDate = saveUser.staff.EntyDate;
+
                         editObject.IsCalPerformsnce = saveUser.staff.IsCalPerformsnce;
                         editObject.IsOnJob = saveUser.staff.IsOnJob;
-                        editObject.Mail = saveUser.staff.Mail;
-                        editObject.Memo = saveUser.staff.Memo;
-                        editObject.Mobile = saveUser.staff.Mobile;
-                        editObject.Name = saveUser.staff.Name;
-                        editObject.Password = utility.MD5Utility.GetMD5(saveUser.staff.Password);
-                        editObject.Sex = saveUser.staff.Sex;
-                        editObject.StaffGradeId = saveUser.staff.StaffGradeId;
-                        editObject.Status = saveUser.staff.Status;
-                        editObject.Tel = saveUser.staff.Tel;
-                        editObject.WorkPlace = saveUser.staff.WorkPlace;
+
+                        if (saveUser.staff.Mail != null && editObject.Mail != saveUser.staff.Mail)
+                            editObject.Mail = saveUser.staff.Mail;
+
+                        if (saveUser.staff.Memo != null && editObject.Memo != saveUser.staff.Memo)
+                            editObject.Memo = saveUser.staff.Memo;
+
+                        if (saveUser.staff.Mobile != null && editObject.Mobile != saveUser.staff.Mobile)
+                            editObject.Mobile = saveUser.staff.Mobile;
+
+                        if (saveUser.staff.Name != null && editObject.Name != saveUser.staff.Name)
+                            editObject.Name = saveUser.staff.Name;
+
+                        if (saveUser.staff.Password != null && saveUser.staff.Id >0)
+                            editObject.Password = utility.MD5Utility.GetMD5(saveUser.staff.Password);
+
+                        if (saveUser.staff.Sex != null && editObject.Sex != saveUser.staff.Sex)
+                            editObject.Sex = saveUser.staff.Sex;
+
+                        if (saveUser.staff.StaffGradeId != null && editObject.StaffGradeId != saveUser.staff.StaffGradeId)
+                            editObject.StaffGradeId = saveUser.staff.StaffGradeId;
+
+                        if (saveUser.staff.Status != null && editObject.Status != saveUser.staff.Status)
+                            editObject.Status = saveUser.staff.Status;
+
+                        if (saveUser.staff.Tel != null && editObject.Tel != saveUser.staff.Tel)
+                            editObject.Tel = saveUser.staff.Tel;
+
+                        if (saveUser.staff.WorkPlace != null && editObject.WorkPlace != saveUser.staff.WorkPlace)
+                            editObject.WorkPlace = saveUser.staff.WorkPlace;
                         Context.SaveChanges();
 
                         var temDP = Context.DepartmentPositions
@@ -429,26 +455,51 @@ namespace wispro.sp.api.Controllers
 
                     if (temStaff != null)
                     {
-                        temStaff.Account = staff.Account;
-                        temStaff.Department = staff.Department;
-                        temStaff.EntyDate = staff.EntyDate;
-                        temStaff.IsCalPerformsnce = staff.IsCalPerformsnce;
-                        temStaff.IsOnJob = staff.IsOnJob;
-                        temStaff.Mail = staff.Mail;
-                        temStaff.Memo = staff.Memo;
-                        temStaff.Mobile = staff.Mobile;
-                        temStaff.Name = staff.Name;
-                        temStaff.Password = utility.MD5Utility.GetMD5(staff.Password);
-                        temStaff.Sex = staff.Sex;
-                        temStaff.StaffGradeId = staff.StaffGradeId;
-                        temStaff.Status = staff.Status;
-                        temStaff.Tel = staff.Tel;
-                        temStaff.WorkPlace = staff.WorkPlace;
+                        if (staff.Account != null && staff.Account != temStaff.Account)
+                            temStaff.Account = staff.Account;
+
+                        if (staff.Department != null && staff.Department != temStaff.Department)
+                            temStaff.Department = staff.Department;
+
+                        if (staff.EntyDate != null && staff.EntyDate != temStaff.EntyDate)
+                            temStaff.EntyDate = staff.EntyDate;
+
+                        if (staff.IsCalPerformsnce != temStaff.IsCalPerformsnce)
+                            temStaff.IsCalPerformsnce = staff.IsCalPerformsnce;
+
+                        if (staff.IsOnJob != temStaff.IsOnJob)
+                            temStaff.IsOnJob = staff.IsOnJob;
+
+                        if (staff.Mail != null && staff.Mail != temStaff.Mail)
+                        {
+                            temStaff.Mail = staff.Mail;
+                        }
+
+                        if (staff.Memo != null && staff.Memo != temStaff.Memo)
+                            temStaff.Memo = staff.Memo;
+
+                        if (staff.Memo != null && staff.Memo != temStaff.Memo)
+                            temStaff.Mobile = staff.Mobile;
+
+                        if (staff.Sex != null && staff.Sex != temStaff.Sex)
+                            temStaff.Sex = staff.Sex;
+
+                        if (staff.StaffGradeId != null && staff.StaffGradeId != temStaff.StaffGradeId)
+                            temStaff.StaffGradeId = staff.StaffGradeId;
+
+                        if (staff.Status != null && staff.Status != temStaff.Status)
+                            temStaff.Status = staff.Status;
+
+                        if (staff.Tel != null && staff.Tel != temStaff.Tel)
+                            temStaff.Tel = staff.Tel;
+
+                        if (staff.WorkPlace != null && staff.WorkPlace != temStaff.WorkPlace)
+                            temStaff.WorkPlace = staff.WorkPlace;
 
                         Context.SaveChanges();
 
-                        ret.Success = false;
-                        ret.ErrorMessage = $"用户【{staff.Name}】已存在!";
+                        //ret.Success = false;
+                        //ret.ErrorMessage = $"用户【{staff.Name}】已存在!";
                     }
                     else
                     {
@@ -461,21 +512,46 @@ namespace wispro.sp.api.Controllers
 
                     if (editObject != null)
                     {
-                        editObject.Account = staff.Account;
-                        editObject.Department = staff.Department;
-                        editObject.EntyDate = staff.EntyDate;
-                        editObject.IsCalPerformsnce = staff.IsCalPerformsnce;
-                        editObject.IsOnJob = staff.IsOnJob;
-                        editObject.Mail = staff.Mail;
-                        editObject.Memo = staff.Memo;
-                        editObject.Mobile = staff.Mobile;
-                        editObject.Name = staff.Name;
-                        editObject.Password = utility.MD5Utility.GetMD5(staff.Password); //staff.Password;
-                        editObject.Sex = staff.Sex;
-                        editObject.StaffGradeId = staff.StaffGradeId;
-                        editObject.Status = staff.Status;
-                        editObject.Tel = staff.Tel;
-                        editObject.WorkPlace = staff.WorkPlace;
+                        if (staff.Account != null && staff.Account != editObject.Account)
+                            editObject.Account = staff.Account;
+
+                        if (staff.Department != null && staff.Department != editObject.Department)
+                            editObject.Department = staff.Department;
+
+                        if (staff.EntyDate != null && staff.EntyDate != editObject.EntyDate)
+                            editObject.EntyDate = staff.EntyDate;
+
+                        if (staff.IsCalPerformsnce != editObject.IsCalPerformsnce)
+                            editObject.IsCalPerformsnce = staff.IsCalPerformsnce;
+
+                        if (staff.IsOnJob != editObject.IsOnJob)
+                            editObject.IsOnJob = staff.IsOnJob;
+
+                        if (staff.Mail != null && staff.Mail != editObject.Mail)
+                        {
+                            editObject.Mail = staff.Mail;
+                        }
+
+                        if (staff.Memo != null && staff.Memo != editObject.Memo)
+                            editObject.Memo = staff.Memo;
+
+                        if (staff.Memo != null && staff.Memo != editObject.Memo)
+                            editObject.Mobile = staff.Mobile;
+
+                        if (staff.Sex != null && staff.Sex != editObject.Sex)
+                            editObject.Sex = staff.Sex;
+
+                        if (staff.StaffGradeId != null && staff.StaffGradeId != editObject.StaffGradeId)
+                            editObject.StaffGradeId = staff.StaffGradeId;
+
+                        if (staff.Status != null && staff.Status != editObject.Status)
+                            editObject.Status = staff.Status;
+
+                        if (staff.Tel != null && staff.Tel != editObject.Tel)
+                            editObject.Tel = staff.Tel;
+
+                        if (staff.WorkPlace != null && staff.WorkPlace != editObject.WorkPlace)
+                            editObject.WorkPlace = staff.WorkPlace;
                     }
                     else
                     {

Plik diff jest za duży
+ 33 - 0
wispro.sp.api/Job/AgentMessageJob.cs


Plik diff jest za duży
+ 0 - 14
wispro.sp.api/Job/ImportReportJob.cs


+ 10 - 0
wispro.sp.api/Program.cs

@@ -74,6 +74,16 @@ namespace wispro.sp.api
             _ = QuartzUtil.Add(typeof(InvalidDataMessageJob), jobKey2, trigger2);
             #endregion
 
+            #region 通知代理人反馈
+            JobKey jobKey3 = new JobKey("AgentMessage");
+            var trigger3 = TriggerBuilder.Create()
+                .WithDescription("通知代理人开始反馈")
+                .WithSchedule(CronScheduleBuilder.CronSchedule(utility.ConfigHelper.GetSectionValue("AgentMessageScheduleSetting")).WithMisfireHandlingInstructionDoNothing())
+                .Build();
+
+            _ = QuartzUtil.Add(typeof(AgentMessageJob), jobKey3, trigger3);
+            #endregion
+
             host.Run();
         }
 

+ 1 - 5
wispro.sp.api/Utility/Utility.cs

@@ -12,11 +12,7 @@ namespace wispro.sp.api.Utility
     {
         public static void CalBasePoint(PerformanceItem item, List<BasePointRule> rules)
         {
-            if(item.CaseNo == "PAUS2117047")
-            {
-                System.Diagnostics.Debug.WriteLine("");
-            }
-
+            
             if (item.CaseNo.ToUpper().StartsWith("S"))
             {
                 return;

+ 2 - 1
wispro.sp.api/appsettings.json

@@ -12,7 +12,8 @@
   },
 
   "UpdateScheduleSetting": "00 01 09 1-8 * ? *",
-  "InvalidDataScheduleSetting": "00 10 15 1-8 * ? *",
+  "InvalidDataScheduleSetting": "00 10 15 1-6 * ? *",
+  "AgentMessageScheduleSetting": "00 10 06 7 * ? *",
 
   "ValidAudience": "StaffPerformance",
   "ValidIssuer": "http://localhost:39476",

+ 1 - 1
wispro.sp.api/spDbContext.cs

@@ -178,7 +178,7 @@ namespace wispro.sp.api
 
                 entity.Property(e => e.ApplicationType).HasMaxLength(50);
 
-                entity.Property(e => e.BasePoint).HasColumnType("numeric(18, 2)");
+                entity.Property(e => e.BasePoint);
 
                 entity.Property(e => e.BusinessType).HasMaxLength(50);
 

+ 1 - 0
wispro.sp.web/Components/Chart.razor

@@ -0,0 +1 @@
+

+ 17 - 0
wispro.sp.web/Components/Chart.razor.cs

@@ -0,0 +1,17 @@
+using Microsoft.AspNetCore.Components;
+using wispro.sp.share;
+
+namespace wispro.sp.web.Components
+{
+    public partial class Chart
+    {
+        [Parameter]
+        public int ChartType { get;set; }
+
+        [Parameter]
+        public ChartDatas chartDatas { get; set; }
+
+        
+
+    }
+}

+ 1 - 1
wispro.sp.web/Pages/Report/AppealTrend.razor

@@ -41,7 +41,7 @@
                 @*<AntDesign.Charts.Line Data="Datas.Datas" Config="config" @ref="@chart" />*@
 
             <center>
-
+                <Blazor.ECharts.Components.ELine Option="@option" />
             @{
                 System.Data.DataTable tableData = Datas.GetTableData();
 

+ 86 - 19
wispro.sp.web/Pages/Report/AppealTrend.razor.cs

@@ -1,5 +1,5 @@
 using AntDesign;
-
+using Blazor.ECharts.Options;
 using Microsoft.AspNetCore.Components;
 using System;
 using System.Collections.Generic;
@@ -9,6 +9,9 @@ using System.Text.Json;
 using System.Threading.Tasks;
 using wispro.sp.share;
 using wispro.sp.web.Services;
+using Blazor.ECharts.Options;
+using Blazor.ECharts.Options.Enum;
+using L = Blazor.ECharts.Options.Series.Line;
 
 namespace wispro.sp.web.Pages.Report
 {
@@ -17,6 +20,7 @@ namespace wispro.sp.web.Pages.Report
         private int iType = 3;
         private DateTime? start = new DateTime(DateTime.Now.Year, 1, 1);
         private DateTime? end = DateTime.Now;
+        private EChartsOption<L.Line> option;
 
         internal class TJType
         {
@@ -28,7 +32,7 @@ namespace wispro.sp.web.Pages.Report
         {
             new TJType { value = 3,Name = "申诉人统计" },
             new TJType { value = 4,Name = "申诉类型统计" },
-            new TJType { value = 4,Name = "部门申诉统计" },
+            new TJType { value = 5,Name = "部门申诉统计" },
             
         };
 
@@ -56,49 +60,112 @@ namespace wispro.sp.web.Pages.Report
         private void OnTimeRangeChange(DateRangeChangedEventArgs args)
         {
             msgService.Info($"Selected Time: {JsonSerializer.Serialize(args.Dates)}");
-            Console.WriteLine($"Selected Time: {JsonSerializer.Serialize(args.Dates)}");
-            Console.WriteLine($"Formatted Selected Time: {JsonSerializer.Serialize(args.DateStrings)}");
-
+            
             if (args.Dates?.Length > 0)
             {
                 Console.WriteLine(args.Dates[0]);
+                
                 start = args.Dates[0];
             }
 
             if (args.Dates?.Length > 1)
             {
-                Console.WriteLine(args.Dates[1]);
                 end = args.Dates[1];
             }
 
         }
 
+
         private bool _noIconLoading;
         private async Task OnButtonClick()
         {
             _noIconLoading = true;
             Datas = await reportService.GetAppealReportData(iType, start, end, null);
+            GetOption();
+            _noIconLoading = false;
+        }
 
+        private void GetOption()
+        {
             if (Datas != null)
             {
-                
-                StateHasChanged();
+                List<object> series = new List<object>();
+
+                DataTable dt = Datas.GetTableData();
+
+                foreach (DataRow row in dt.Rows)
+                {
+                    L.Line l = new L.Line();
+                    l.Name = row[0].ToString();
+                    List<double> data = new List<double>();
+
+                    for (int i = 1; i < dt.Columns.Count; i++)
+                    {
+                        double dTem = 0;
+                        double.TryParse(row[i].ToString(), out dTem);
+
+                        data.Add(dTem);
+                    }
+
+                    l.Data = data;
+
+                    series.Add(l);
+                }
+
+                option = new()
+                {
+                    Toolbox = new()
+                    {
+                        Show = true,
+                        Feature = new()
+                        {
+                            SaveAsImage = new()
+                            {
+                                PixelRatio = 2,
+                                Name = "保存图片"
+                            }
+                        }
+                    },
+                    Tooltip = new()
+                    {
+                        Trigger = TooltipTrigger.Item,
+                        Formatter = "{a} <br/>{b}: {c}"
+                    },
+                    Title = new()
+                    {
+                        Text = Datas.Title
+                    },
+                    YAxis = new()
+                    {
+                        new()
+                        {
+                            Type = AxisType.Value,
+                            Name = "申诉量",
+                            AxisLine = new()
+                            {
+                                Show = true,
+                            }
+                        }
+                    },
+                    XAxis = new()
+                    {
+                        new()
+                        {
+                            Type = AxisType.Category,
+                            Data = Datas.GetYear(),
+                            Name = Datas.BTitle
+                        }
+                    },
+                    Series = series
+                };
             }
-            _noIconLoading = false;
         }
 
         protected async override Task OnInitializedAsync()
         {
-            //Datas = await reportService.GetAppealReportData(iType, DateTime.Parse("2022-01-01"), DateTime.Now, null);
-
-            if (Datas != null)
-            {
-                //config.Title.Text = Datas.Title;
-                
-                //await chart.ChangeData(Datas.Datas);
-                //await chart.UpdateChart(config);
-                StateHasChanged();
-            }
+            Datas = await reportService.GetAppealReportData(iType, DateTime.Parse("2022-01-01"), DateTime.Now, null);
+            GetOption();
+            StateHasChanged();
 
             await base.OnInitializedAsync();
         }

+ 1 - 3
wispro.sp.web/Pages/Report/PieChart.razor

@@ -41,10 +41,8 @@
             else
             {
                 <div>
-                    <Blazor.ECharts.Components.EPie Option="@Option1"  @ref="pieChart"/>
-
-                    @*<Pie Data="Datas.Datas" Config="config4" @ref="@chart" />*@
                     <center>
+                        <Blazor.ECharts.Components.EPie Option="@Option1" Class="chart-normal" @ref="pieChart"/>
                         <table width="80%" border="1">
                             <thead>
                             <th>序号</th>

+ 17 - 8
wispro.sp.web/Pages/Report/PieChart.razor.cs

@@ -83,6 +83,17 @@ namespace wispro.sp.web.Pages.Report
 
             return Option1 = new()
             {
+                Toolbox = new() { 
+                    Show= true,
+                    Feature=new()
+                    {
+                        SaveAsImage = new()
+                        {
+                            PixelRatio =2,
+                            Name="保存图片"
+                        }
+                    }
+                },
                 Title= new Blazor.ECharts.Options.Title()
                 {
                     Text = datas.Title ,
@@ -107,11 +118,11 @@ namespace wispro.sp.web.Pages.Report
                         Name = datas.Title,
                         Radius = new[] { "50%", "70%" },
                         AvoidLabelOverlap = false,
-                        //Label = new()
-                        //{
-                        //    Show = true,
-                        //    Position = LabelPosition.Inside,
-                        //},
+                        Label = new()
+                        {
+                            Show = true,
+                            Formatter= "{b}\r\n{c} ({d}%)"
+                        },
                         //LabelLine = new() { Show = true },
                         Data = seriesData
                     }
@@ -122,9 +133,7 @@ namespace wispro.sp.web.Pages.Report
         private void OnTimeRangeChange(DateRangeChangedEventArgs args)
         {
             msgService.Info($"Selected Time: {JsonSerializer.Serialize(args.Dates)}");
-            Console.WriteLine($"Selected Time: {JsonSerializer.Serialize(args.Dates)}");
-            Console.WriteLine($"Formatted Selected Time: {JsonSerializer.Serialize(args.DateStrings)}");
-
+            
             if (args.Dates?.Length > 0){
                 start = args.Dates[0];
             }

+ 2 - 3
wispro.sp.web/Pages/Report/StaffStaticsReport.razor

@@ -23,6 +23,7 @@
                 </Select>
             </SpaceItem>
             <SpaceItem><Button Icon="search" Loading="_noIconLoading" OnClick="OnButtonClick">开始统计</Button></SpaceItem>
+            <SpaceItem><Button OnClick="OnButtonClick_1">开始统计</Button></SpaceItem>
         </Space>
     </Content>
     <ChildContent>
@@ -34,10 +35,8 @@
             else
             {
                 <div>
-                    @*<AntDesign.Charts.Line Data="Datas.Datas" Config="config" @ref="@chart" />*@
-
                     <center>
-
+                        <Blazor.ECharts.Components.ELine  Class="chart-normal" EventTypes="EventTypes" OnEventCallback="OnEchartsEvent" @ref="chart"/>
                         @{
                             System.Data.DataTable tableData = Datas.GetTableData();
 

+ 141 - 52
wispro.sp.web/Pages/Report/StaffStaticsReport.razor.cs

@@ -1,5 +1,4 @@
 using AntDesign;
-
 using Microsoft.AspNetCore.Components;
 using System;
 using System.Collections.Generic;
@@ -7,16 +6,18 @@ using System.Data;
 using System.Linq;
 using System.Text.Json;
 using System.Threading.Tasks;
-using wispro.sp.share;
 using wispro.sp.web.Services;
+using Blazor.ECharts.Options;
+using Blazor.ECharts.Options.Enum;
+using L = Blazor.ECharts.Options.Series.Line;
 
 namespace wispro.sp.web.Pages.Report
 {
     public partial class StaffStaticsReport
     {
-        private int iType = 3;
-        private DateTime? start = new DateTime(DateTime.Now.Year, 1, 1);
-        private DateTime? end = DateTime.Now;
+        private int iType = 0;
+        private EChartsOption<L.Line> option;
+        private Blazor.ECharts.Components.ELine chart;
 
         internal class TJType
         {
@@ -26,87 +27,175 @@ namespace wispro.sp.web.Pages.Report
         }
         List<TJType> Types = new List<TJType>
         {
-            new TJType { value = 0,Name = "代理人每月绩效统计" },
-            new TJType { value = 2,Name = "代理人每年绩效统计" },
+            new TJType { value = 0,Name = "人每月绩效统计" },
+            new TJType { value = 2,Name = "人每年绩效统计" },
             new TJType { value = 1,Name = "部门每月绩效统计" },
             new TJType { value = 3,Name = "部门每年绩效统计" },
             new TJType { value = 4,Name = "人员专案绩效统计" },
-            //new TJType { value = 4,Name = "部门申诉统计" },
-
         };
 
         share.ChartDatas Datas = new share.ChartDatas()
         {
             Title = "初始化标题",
             Datas = new List<share.ChartData>() {
-                //new share.ChartData(){ type ="部门一", value =1, year="2022-01", CustomerType ="", CustomerYear=""},
-                //new share.ChartData(){ type ="部门一",value =5, year="2022-02",CustomerType ="", CustomerYear=""},
-                //new share.ChartData(){ type ="部门二", value =3, year="2022-01", CustomerType ="", CustomerYear=""},
-                //new share.ChartData(){ type ="部门二",value =4, year="2022-02",CustomerType ="", CustomerYear=""},
-                //new share.ChartData(){ type ="部门三",value =2.5, year="2022-02",CustomerType ="", CustomerYear=""}
+                new share.ChartData(){ type ="部门一", value =1, year="2022-01", CustomerType ="", CustomerYear=""},
+                new share.ChartData(){ type ="部门一",value =5, year="2022-02",CustomerType ="", CustomerYear=""},
+                new share.ChartData(){ type ="部门二", value =3, year="2022-01", CustomerType ="", CustomerYear=""},
+                new share.ChartData(){ type ="部门二",value =4, year="2022-02",CustomerType ="", CustomerYear=""},
+                new share.ChartData(){ type ="部门三",value =2.5, year="2022-02",CustomerType ="", CustomerYear=""}
             },
             ATitle = "部门",
             BTitle = "申诉月份"
         };
 
-        
+        private void GetOption()
+        {
+            
+            if (Datas != null)
+            {
+                List<object> series = new List<object>();
+
+                DataTable dt = Datas.GetTableData();
+
+                foreach (DataRow row in dt.Rows)
+                {
+                    L.Line l = new L.Line();
+                    l.Name = row[0].ToString();
+                    List<double> data = new List<double>();
+
+                    for (int i = 1; i < dt.Columns.Count; i++)
+                    {
+                        double dTem = 0;
+                        double.TryParse(row[i].ToString(), out dTem);
+
+                        data.Add(dTem);
+                    }
+
+                    l.Data = data;
+
+                    series.Add(l);
+                }
+
+                option  = new EChartsOption<L.Line>()
+                {
+                    //Legend = new() { 
+                    //    Show = true,
+                    //},
+                    Toolbox = new()
+                    {
+                        Show = true,
+                        Feature = new()
+                        {
+                            DataView = new()
+                            {
+                                ReadOnly = false
+                            },
+                            Restore = new(),
+                            MagicType = new() {
+                                Type = new()
+                                {
+                                    MagicTypeType.Bar,
+                                    MagicTypeType.Line,
+                                    MagicTypeType.Stack,
+                                    MagicTypeType.Tiled,
+                                }
+                            },
+                            SaveAsImage = new()
+                            {
+                                PixelRatio = 2,
+                                Name = "保存图片"
+                            }
+                        }
+                    },
+                    Tooltip = new()
+                    {
+                        Trigger = TooltipTrigger.Item,
+                        Formatter = "{a} <br/>{b}: {c}"
+                    },
+                    Title = new()
+                    {
+                        Text = Datas.Title
+                    },
+                    YAxis = new()
+                    {
+                        new()
+                        {
+                            Type = AxisType.Value,
+                            Name = "绩效",
+                            Position = PositionY.Start,
+                            AxisLine = new()
+                            {
+                                Show = true,
+                            }
+                        }
+                        
+                    },
+                    XAxis = new()
+                    {
+                        new()
+                        {
+                            Type = AxisType.Category,
+                            Data = Datas.GetYear(),
+                            Name = Datas.BTitle,
+                            NameLocation = Location.Middle,
+                            AxisLabel = new()
+                            {
+                                Show = true
+                            },
+                            
+                        }
+                    },
+                    Series = series
+                };
+            } 
+        }
+
         [Inject] ReportService reportService { get; set; }
 
         [Inject] MessageService msgService { get; set; }
 
-        private void OnTimeRangeChange(DateRangeChangedEventArgs args)
+        private bool _noIconLoading;
+        private async Task OnButtonClick()
         {
-            msgService.Info($"Selected Time: {JsonSerializer.Serialize(args.Dates)}");
-            Console.WriteLine($"Selected Time: {JsonSerializer.Serialize(args.Dates)}");
-            Console.WriteLine($"Formatted Selected Time: {JsonSerializer.Serialize(args.DateStrings)}");
-
-            if (args.Dates?.Length > 0)
-            {
-                Console.WriteLine(args.Dates[0]);
-                start = args.Dates[0];
-            }
+            //option = null;
+            await GetChartDatas();
+            
+            Console.WriteLine(chart.OptionRaw);
+        }
 
-            if (args.Dates?.Length > 1)
+        private async Task OnButtonClick_1()
+        {
+            Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(option, new JsonSerializerOptions()
             {
-                Console.WriteLine(args.Dates[1]);
-                end = args.Dates[1];
-            }
+                DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull
+            }));
 
+            await msgService.Success(chart.OptionRaw);
         }
 
-        private bool _noIconLoading;
-        private async Task OnButtonClick()
+        private async Task GetChartDatas()
         {
             _noIconLoading = true;
             Datas = await reportService.GetStaticReportData(iType);
-
-            if (Datas != null)
-            {
-                //config.Title.Text = Datas.Title;
-                //config.XField = Datas.ATitle;
-                //await chart.ChangeData(Datas.Datas);
-                //await chart.UpdateChart(config);
-                StateHasChanged();
-            }
+            GetOption();
+            StateHasChanged();
             _noIconLoading = false;
         }
 
         protected async override Task OnInitializedAsync()
         {
-            //Datas = await reportService.GetAppealReportData(iType, DateTime.Parse("2022-01-01"), DateTime.Now, null);
-
-            if (Datas != null)
-            {
-                //config.Title.Text = Datas.Title;
-
-                //await chart.ChangeData(Datas.Datas);
-                //await chart.UpdateChart(config);
-                StateHasChanged();
-            }
-
+            await GetChartDatas();
             await base.OnInitializedAsync();
         }
 
-        
+        private EchartsEventArgs callbackArgs;
+        private List<EventType> EventTypes = new List<EventType> { EventType.click };
+        private void OnEchartsEvent(EchartsEventArgs args)
+        {
+            msgService.Info($"您点击了:[{args.SeriesName},{args.Name}]!");
+            callbackArgs = args;
+        }
+
+
     }
 }

+ 28 - 0
wispro.sp.web/wwwroot/css/site.css

@@ -27,6 +27,34 @@ ul,
 ol {
   list-style: none;
 }
+
+.chart-container {
+    display: flex;
+    flex-direction: row;
+    flex-wrap: wrap;
+    justify-content: flex-start;
+    padding-left: 20px;
+    padding-bottom: 20px;
+    padding-right: 0px;
+    padding-top: 0px;
+    height: 95%;
+    width: 95%;
+}
+
+.chart-normal {
+    border-radius: 4px;
+    height: 400px;
+    width: 600px;
+    margin-top: 20px;
+}
+
+.chart-fill {
+    width: 100%;
+    height: 720px;
+    margin-top: 20px;
+    margin-right: 20px;
+}
+
 @media (max-width: 480px) {
   .ant-table {
     width: 100%;

+ 146 - 1
wispro.sp.winClient/Form1.cs

@@ -188,7 +188,10 @@ namespace wispro.sp.winClient
        
         private async void button3_Click(object sender, EventArgs e)
         {
-           await GetTest();
+            await UpdateStaff();
+
+            await InitDepartment();
+           //await GetTest();
             //await Compare2DB();
             //await RefreshPerformanceItem(1);
 
@@ -664,6 +667,148 @@ namespace wispro.sp.winClient
             return null;
         }
 
+        private async Task InitDepartment()
+        {
+            if (Token == null)
+            {
+                await Login();
+            }
+
+            string strUrl = $"{strAPIBaseUri}/api/Organization/InitUserDepartment";
+            HttpClient http = CreateHttp();
+            http.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("bearer", Token.Token);
+
+            var response = await http.GetAsync(strUrl);
+        }
+
+        private async Task UpdateStaff()
+        {
+            OpenFileDialog ofd = new OpenFileDialog();
+            if (ofd.ShowDialog() == DialogResult.OK)
+            {
+                string fileName = ofd.FileName;
+                DataTable dt = NPOIExcel.ExcelToDataTable(fileName, true, false,0);
+
+                if (Token == null)
+                {
+                    await Login();
+                }
+
+                foreach(DataRow row in dt.Rows)
+                {
+                    Staff staff = new Staff();
+                    staff.Account  = row["Account"].ToString();
+                    staff.Name = row["Name"].ToString().Trim();
+                    staff.Sex = row["Sex"].ToString().Trim();
+                    staff.Status = row["Status"].ToString().Trim();
+                    
+
+                    staff.Tel = row["Tel"].ToString();
+                    if (staff.Tel == "NULL")
+                    {
+                        staff.Tel = null;
+                    }
+
+                    staff.Mobile  = row["Mobile"].ToString().Trim();
+                    if (staff.Mobile == "NULL")
+                    {
+                        staff.Mobile = null;
+                    }
+                    string temStatus = row["xm备注1"].ToString();
+                    if(!string.IsNullOrEmpty(temStatus) && temStatus != staff.Status)
+                    {
+                        staff.Status = temStatus;
+                    }
+                    if (staff.Status == "NULL")
+                    {
+                        staff.Status = null;
+                    }
+
+                    staff.IsOnJob = (row["IsOnJob"].ToString() == "1");
+
+                    staff.IsCalPerformsnce = (row["IsCalPerformsnce"].ToString() == "1");
+                    staff.IsCalPerformsnce = (row["是否计算绩效"].ToString() == "是");
+                    staff.Department = row["Department"].ToString().Trim();
+                    if (staff.Department == "NULL")
+                    {
+                        staff.Department = null;
+                    }
+                    staff.WorkPlace = row["WorkPlace"].ToString().Trim();
+
+                    if (staff.WorkPlace == "NULL")
+                    {
+                        staff.WorkPlace = null;
+                    }
+                    staff.Mail = row["Mail"].ToString().Trim();
+
+                    if (staff.Mail == "NULL")
+                    {
+                        staff.Mail = null;
+                    }
+                    staff.Memo = row["Memo"].ToString().Trim();
+                    if (staff.Memo == "NULL")
+                    {
+                        staff.Memo = null;
+                    }
+
+                    int temSGID;
+                    if (int.TryParse(row["StaffGradeId"].ToString().Trim(), out temSGID)){
+                        staff.StaffGradeId = temSGID;
+                    }
+
+                    DateTime temDate;
+                    if(DateTime.TryParse(row["EntyDate"].ToString(),out temDate))
+                    {
+                        staff.EntyDate = temDate;
+                    }
+
+                    // xm备注2 StaffGradeId        EntyDate     
+
+                    var temStaff = await GetStaff(staff.Name);
+
+                    bool isSaved = false;
+
+                    if (temStaff == null)
+                    {
+                        isSaved = true;
+                        //staff.Password = MD5Utility.GetMD5("12345678");
+                    }
+                    else
+                    {
+                        staff.Id = temStaff.Id;
+                        //staff.Password = temStaff.Password;
+                        isSaved =
+                            (staff.Name != temStaff.Name) ||
+                            (staff.Account != temStaff.Account) ||
+                            (staff.Department != temStaff.Department) ||
+                            (staff.EntyDate != temStaff.EntyDate) ||
+                            (staff.IsOnJob != temStaff.IsOnJob) ||
+                            (staff.Mail != temStaff.Mail) ||
+                            (staff.Mobile != temStaff.Mobile) ||
+                            (staff.Sex != temStaff.Sex) ||
+                            (staff.Status != temStaff.Status) ||
+                            (staff.Tel != temStaff.Tel) ||
+                            (staff.WorkPlace != temStaff.WorkPlace) ||
+                            (staff.StaffGradeId != temStaff.StaffGradeId) ||
+                            (staff.IsCalPerformsnce  != temStaff.IsCalPerformsnce );
+                    }
+
+                    if (isSaved)
+                    {
+                        //staff.IsCalPerformsnce = (row["是否核算绩效"].ToString() == "是");
+                        //staff.Memo = row["备注"].ToString().Trim();
+
+
+                        //staff.StaffGradeId = row["姓名"].ToString();
+
+                        await SaveStaff(staff);
+                    }
+
+                    System.Diagnostics.Debug.WriteLine($"{staff.Account}\t{staff.Name}");
+
+                }
+            }
+        }
         private async Task ImportUsers()
         {
             OpenFileDialog ofd = new OpenFileDialog();