Пример #1
0
        // 从json字符串中转换出需要的数据
        private List <SpecDataDto> ReadValueFromJsonStr(string jsonStr)
        {
            JToken             specToken    = JToken.Parse(jsonStr);
            List <SpecDataDto> specDataList = new List <SpecDataDto>();

            foreach (var specItem in specToken)
            {
                SpecDataDto       specData = new SpecDataDto();
                List <EleDataDto> eleList  = new List <EleDataDto>();

                var    tempSpec = (Newtonsoft.Json.Linq.JProperty)specItem;
                int    specId   = int.Parse(tempSpec.Name.Substring(3));
                var    eleToken = JToken.Parse(tempSpec.Value.ToString());
                int    i        = 0;
                string signId   = string.Empty;
                string typeId   = string.Empty;
                foreach (var eleItem in eleToken)
                {
                    var tempEle = (JProperty)eleItem;
                    if (i == 0) //签到Id
                    {
                        signId = tempEle.Value.ToString();
                    }
                    else if (i == 1) // 原表Id-typeIn表id
                    {
                        typeId = tempEle.Value.ToString();
                    }
                    else if (i >= 2) // 元素
                    {
                        dynamic    eleData = JToken.Parse(tempEle.Value.ToString());
                        EleDataDto eleObj  = new EleDataDto();


                        // 如果元素值不为空 或者 元素的原Id不为空,则将数据置入数组
                        // 当元素原Id不为空时,代表,数据可能是更新,不管将元素是否有值,因为可能需要将有值的元素更新为无值
                        if (!string.IsNullOrEmpty((string)eleData.eleValue) || !string.IsNullOrEmpty((string)eleData.typeEleId))
                        {
                            int eleId = int.Parse(tempEle.Name.Substring(3));
                            eleObj.SpecId = specId;
                            eleObj.EleId  = eleId;

                            eleObj.OldId      = eleData.TypeEleId;
                            eleObj.EleValue   = eleData.eleValue;
                            eleObj.OperatorId = eleData.operId;
                            eleObj.EleName    = eleData.eleName;

                            eleList.Add(eleObj);
                        }
                    }
                    i++;
                }
                specData.OldId       = typeId;
                specData.SpecId      = specId;
                specData.SignId      = signId;
                specData.EleDataList = eleList;
                specDataList.Add(specData);
            }

            return(specDataList);
        }
Пример #2
0
 /*
  * 开发时注意:重复点击,比如连续点击2次,第1次为添加元素,第2次应该为更新元素,但是由于前台点击了2次,第2次传递的数据和第1次一样,依旧没有OldId
  * 此时应该更新,但代码却以添加为操作,致使数据会重复
  */
 // 更新或添加元素
 private void UpdateOrAddElement(SpecDataDto specDto, int typeInId, int tplId)
 {
     foreach (var item in specDto.EleDataList)
     {
         if (string.IsNullOrEmpty(item.OldId))  // 添加
         {
             var tempEleItem = _typeInItemRep.FirstOrDefault(x => x.TplId == tplId && x.TypeInId == typeInId && x.ElementId == item.EleId && x.SpecimenId == item.SpecId && !x.IsDeleted);
             if (tempEleItem == null)
             {
                 TypeInItem tempEleDto = new TypeInItem();
                 tempEleDto.CreateTime = DateTime.Now;
                 tempEleDto.TplId      = tplId;
                 tempEleDto.TypeInId   = typeInId;
                 tempEleDto.OperatorId = item.OperatorId;
                 tempEleDto.SpecimenId = item.SpecId;
                 tempEleDto.ElementId  = item.EleId;
                 tempEleDto.EleValue   = item.EleValue;
                 tempEleDto.IsDeleted  = false;
                 tempEleDto.EleName    = item.EleName;
                 _typeInItemRep.InsertAsync(tempEleDto);
             }
             else
             {
                 tempEleItem.EleValue   = item.EleValue;
                 tempEleItem.OperatorId = item.OperatorId;
                 _typeInItemRep.UpdateAsync(tempEleItem);
             }
         }
         else //更新
         {
             UpdateSingleElement(item);
         }
     }
 }
Пример #3
0
 private void AddElementDataToTable(SpecDataDto specDto, int typeInId, int tplId)
 {
     foreach (var item in specDto.EleDataList)
     {
         TypeInItem tempEleDto = new TypeInItem();
         tempEleDto.CreateTime = DateTime.Now;
         tempEleDto.TplId      = tplId;
         tempEleDto.TypeInId   = typeInId;
         tempEleDto.OperatorId = item.OperatorId;
         tempEleDto.SpecimenId = item.SpecId;
         tempEleDto.ElementId  = item.EleId;
         tempEleDto.EleValue   = item.EleValue;
         tempEleDto.IsDeleted  = false;
         tempEleDto.EleName    = item.EleName;
         _typeInItemRep.Insert(tempEleDto);
     }
 }
Пример #4
0
        private void UpdateOrAddSpecData(SpecDataDto item, int tplId, int oldTypeInId, DateTime samplingDate, string samplingTime)
        {
            // 如果没有元素数据直接返回
            List <EleDataDto> eleDataList = item.EleDataList;

            if (eleDataList.Count == 0)
            {
                return;
            }

            // 查找到唯一的元素
            TypeIn     findTypeIn     = _typeInRep.FirstOrDefault(x => x.Id == oldTypeInId);
            Attendance findAttendance = null;

            if (!string.IsNullOrEmpty(findTypeIn.SignId))
            {
                int tempAttenId = int.Parse(findTypeIn.SignId);
                findAttendance = _attendanceRep.Single(x => x.Id == tempAttenId);
            }
            else
            {
                findTypeIn.SamplingDate = samplingDate.ToString("yyyy-MM-dd");
                findTypeIn.SamplingTime = samplingTime;
            }


            // 获取化验元素信息
            eleDataList = eleDataList.OrderBy(x => x.EleId).ToList();
            string elementIds      = string.Join(",", eleDataList.Select(x => x.EleId));
            string elementNames    = string.Join(",", eleDataList.Select(x => x.EleName));
            string newElementIds   = findTypeIn.EleIds + "," + elementIds;
            string newElementNames = findTypeIn.EleNames + "," + elementNames;
            // 将字符串 转变为 数值数组,并去重
            var idArray = Array.ConvertAll <string, int>(newElementIds.Split(',', StringSplitOptions.RemoveEmptyEntries).Distinct().ToArray(), x => int.Parse(x));

            // 从小到大排序
            Array.Sort(idArray);
            newElementIds = string.Join(',', idArray);
            // 元素名称去掉重复项
            newElementNames = string.Join(',',
                                          newElementNames.Split(",", StringSplitOptions.RemoveEmptyEntries).Distinct());

            findTypeIn.EleIds   = newElementIds;
            findTypeIn.EleNames = newElementNames;

            // 更新TypeIn
            _typeInRep.UpdateAsync(findTypeIn);
            // 更新或者添加TypeInItem
            UpdateOrAddElement(item, findTypeIn.Id, tplId);

            // 更新签到表信息
            if (findAttendance != null)
            {
                findAttendance.TplElementIds = newElementIds;
                if (findAttendance.TplElementIds == newElementIds)
                {
                    findAttendance.Flag = 2;
                }
                else
                {
                    findAttendance.Flag = 1;
                }
                _attendanceRep.UpdateAsync(findAttendance);
            }
        }
Пример #5
0
        private void AddSpecDataToTable(SpecDataDto item, int tplId, DateTime samplingDate, string samplingTime)
        {
            // 如果没有元素数据直接返回
            List <EleDataDto> eleDataList = item.EleDataList;

            if (eleDataList.Count == 0)
            {
                return;
            }
            // 获取化验元素信息
            eleDataList = eleDataList.OrderBy(x => x.EleId).ToList();
            string elementIds   = string.Join(",", eleDataList.Select(x => x.EleId));
            string elementNames = string.Join(",", eleDataList.Select(x => x.EleName));

            Attendance findAttendance = null;
            TypeIn     tempTypeIn     = null;
            // 记录数据插入的Id
            int tempTypeInId = -1;

            // 签到Id和typeIn的Id都为空,则需要去签到表中检测签Id
            if (string.IsNullOrEmpty(item.SignId))
            {
                DateTime beginTime = DateTime.Parse(string.Format("{0} {1}:00", samplingDate.ToString("yyyy-MM-dd"), samplingTime));
                DateTime endTime   = DateTime.Parse(string.Format("{0} {1}:59", samplingDate.ToString("yyyy-MM-dd"), samplingTime));

                int tempSpecId = item.SpecId;
                // 查找签到信息
                var tempAttendance = _attendanceRep.GetAll().Where(x =>
                                                                   x.SignTime >= beginTime && x.SignTime <= endTime &&
                                                                   !x.IsDeleted && x.TplId == tplId && x.TplSpecId == tempSpecId)
                                     .FirstOrDefault();
                findAttendance = tempAttendance;
            }
            else
            {
                findAttendance = _attendanceRep.Single(x => x.Id == int.Parse(item.SignId));
                // 如果签到信息存在,则去TypeIn表中查找是否有录入记录
                tempTypeIn = _typeInRep.GetAll().Where(x => x.SignId == item.SignId && x.IsDeleted == false).FirstOrDefault();
            }


            // 如果typeIn表中没有记录,则根据签到信息回填,或者根据已有信息创建新的TypeIn
            if (tempTypeIn == null)
            {
                // 创建签到数据模型,并填充基础信息
                TypeIn typeIn = new TypeIn();
                typeIn.IsParallel = false; // 平行样
                string attendanceEleIds = string.Empty;
                typeIn.TplId      = tplId;
                typeIn.SpecId     = item.SpecId;
                typeIn.CreateTime = DateTime.Now;
                typeIn.CreatorId  = (int)AbpSession.UserId;
                typeIn.IsDeleted  = false;
                typeIn.EleIds     = elementIds;
                typeIn.EleNames   = elementNames;

                // 如果有签到信息,则将签到信息回填
                if (findAttendance != null)
                {
                    typeIn.SignId       = findAttendance.Id.ToString();
                    attendanceEleIds    = findAttendance.ElementIds;
                    typeIn.IsParallel   = string.IsNullOrEmpty(findAttendance.MainScanId) ? false : true;
                    typeIn.MainId       = findAttendance.MainScanId;
                    typeIn.SamplingDate = findAttendance.SamplingDate.ToString("yyyy-MM-dd");
                    typeIn.SamplingTime = findAttendance.SamplingTime;
                    typeIn.SamplingTm   = DateTime.Parse(findAttendance.SamplingDate.ToString("yyyy-MM-dd ") + findAttendance.SamplingTime);
                    typeIn.SignTm       = findAttendance.SignTime;
                }
                else // 没有签到信息,则根据已有信息补充
                {
                    string samplDate = samplingDate.ToString("yyyy-MM-dd");
                    typeIn.SamplingDate = samplDate;
                    typeIn.SamplingTime = samplingTime;
                    typeIn.SamplingTm   = DateTime.Parse($"{samplDate} {samplingTime}");
                    typeIn.SignTm       = DateTime.Now;
                }
                // 插入数据,获取当前插入ID
                tempTypeInId = _typeInRep.InsertAndGetId(typeIn);
            }
            else // 有信息则,只更新元素信息
            {
                tempTypeIn.EleIds   = elementIds;
                tempTypeIn.EleNames = elementNames;
                _typeInRep.Update(tempTypeIn);
                tempTypeInId = tempTypeIn.Id;
            }

            // 更新签到表信息(0-未录入,1-部分录入,2-全录入)
            if (findAttendance != null)
            {
                if (findAttendance.TplElementIds == elementIds)
                {
                    findAttendance.Flag = 2;
                }
                else
                {
                    findAttendance.Flag = 1;
                }

                _attendanceRep.UpdateAsync(findAttendance);
            }

            // 生成TypeInItem信息
            AddElementDataToTable(item, tempTypeInId, tplId);
        }