feat: 完善焊接质量检查和材料管理
补齐焊前专项审核和焊缝外观检测流程,统一质检查询、附件处理与材料明细导出,提升业务数据追溯和组件匹配使用效率。
This commit is contained in:
@@ -47,7 +47,9 @@ namespace BLL
|
||||
where m.WeldJointId == weldJointId
|
||||
select new Model.PreWeldMaterialItem
|
||||
{
|
||||
MaterialCode = lib.MaterialCode,
|
||||
PipeLineMatId = m.PipeLineMatId,
|
||||
MainCode = m.MaterialCode,
|
||||
MaterialCode = m.MaterialCode,
|
||||
MaterialName = lib.MaterialName,
|
||||
MaterialSpec = lib.MaterialSpec,
|
||||
MaterialMade = lib.MaterialMade,
|
||||
@@ -55,12 +57,16 @@ namespace BLL
|
||||
MaterialUnit = lib.MaterialUnit,
|
||||
HeatNo = lib.HeatNo,
|
||||
BatchNo = lib.BatchNo,
|
||||
}).ToList()
|
||||
}).ToList()
|
||||
};
|
||||
|
||||
var item = query.FirstOrDefault();
|
||||
if (item != null)
|
||||
{
|
||||
for (int index = 0; index < item.preWeldMaterialItems.Count; index++)
|
||||
{
|
||||
item.preWeldMaterialItems[index].MaterialSide = index + 1;
|
||||
}
|
||||
SetInspectionAttachUrl(db, item);
|
||||
}
|
||||
|
||||
@@ -73,44 +79,7 @@ namespace BLL
|
||||
/// </summary>
|
||||
public static List<Model.PreWeldCuttingCheckItem> GetCuttingChecksByWeldJointId(string weldJointId)
|
||||
{
|
||||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||||
{
|
||||
var data = (from c in db.HJGL_PreWeldCuttingCheck
|
||||
join w in db.HJGL_WeldJoint on c.WeldJointId equals w.WeldJointId
|
||||
join p in db.Person_Persons on c.CheckPerson equals p.PersonId into persons
|
||||
from p in persons.DefaultIfEmpty()
|
||||
where c.WeldJointId == weldJointId
|
||||
orderby c.CheckTime descending
|
||||
select new Model.PreWeldCuttingCheckItem
|
||||
{
|
||||
CuttingCheckId = c.CuttingCheckId,
|
||||
ProjectId = c.ProjectId,
|
||||
WeldJointId = c.WeldJointId,
|
||||
PipelineCode = w.PipelineCode,
|
||||
WeldJointCode = w.WeldJointCode,
|
||||
CuttingLength = c.CuttingLength,
|
||||
GrooveForm = c.GrooveForm,
|
||||
GrooveAngle = c.GrooveAngle,
|
||||
IsMaterialCodeBatchNoAccurate = c.IsMaterialCodeBatchNoAccurate,
|
||||
IsMaterialQuantityAccurate = c.IsMaterialQuantityAccurate,
|
||||
IsQualified = c.IsQualified,
|
||||
CheckPerson = c.CheckPerson,
|
||||
CheckPersonName = p == null ? string.Empty : p.PersonName,
|
||||
CheckTime = c.CheckTime,
|
||||
CreateUser = c.CreateUser,
|
||||
CreateTime = c.CreateTime,
|
||||
AttachUrl1 = null,
|
||||
CheckResult = c.CheckResult,
|
||||
UnqualifiedReason = c.UnqualifiedReason,
|
||||
RectifyRequirement = c.RectifyRequirement,
|
||||
Remark = c.Remark
|
||||
}).ToList();
|
||||
foreach (var item in data)
|
||||
{
|
||||
item.AttachUrl1 = GetAttachUrl(db, Const.HJGL_PreWeldCuttingCheckMenuId, item.CuttingCheckId);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
return PreWeldInspectionService.GetCuttingCheckItemsByWeldJointId(weldJointId);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -189,6 +158,26 @@ namespace BLL
|
||||
return PreWeldInspectionService.SaveCuttingCheck(item);
|
||||
}
|
||||
|
||||
public static string ReviewCuttingCheck(Model.PreWeldCuttingCheckReviewInput item)
|
||||
{
|
||||
return PreWeldInspectionService.ReviewCuttingCheck(item);
|
||||
}
|
||||
|
||||
public static List<Model.BaseInfoItem> GetSpecialReviewers(string projectId)
|
||||
{
|
||||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||||
{
|
||||
return (from x in db.SitePerson_Person
|
||||
where x.ProjectId == projectId && x.States == Const.ProjectPersonStates_1
|
||||
orderby x.PersonName
|
||||
select new Model.BaseInfoItem
|
||||
{
|
||||
BaseInfoId = x.PersonId,
|
||||
BaseInfoName = x.PersonName
|
||||
}).Distinct().ToList();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 保存组对检查
|
||||
/// </summary>
|
||||
|
||||
@@ -289,7 +289,14 @@ namespace BLL
|
||||
return "参数不能为空";
|
||||
}
|
||||
|
||||
string res = BLL.WeldingDailyService.SaveWeldingDailyTempDetailByMobile(newItem.WeldJointId, newItem.Personid, newItem.time, newItem.weldingLocation, newItem.welderType);
|
||||
string res = BLL.WeldingDailyService.SaveWeldingDailyTempDetailByMobile(
|
||||
newItem.WeldJointId,
|
||||
newItem.Personid,
|
||||
newItem.time,
|
||||
newItem.weldingLocation,
|
||||
newItem.welderType,
|
||||
newItem.WeldingMethodId,
|
||||
newItem.WeldTypeId);
|
||||
if (!string.IsNullOrEmpty(res))
|
||||
{
|
||||
return res;
|
||||
|
||||
@@ -464,6 +464,7 @@
|
||||
<Compile Include="HJGL\WeldingManage\PipelineMatService.cs" />
|
||||
<Compile Include="HJGL\WeldingManage\PipelineService.cs" />
|
||||
<Compile Include="HJGL\WeldingManage\PreWeldInspectionService.cs" />
|
||||
<Compile Include="HJGL\WeldingManage\WeldAppearanceCheckService.cs" />
|
||||
<Compile Include="HJGL\WeldingManage\WeldingDailyService.cs" />
|
||||
<Compile Include="HJGL\WeldingManage\WeldJointService.cs" />
|
||||
<Compile Include="HJGL\WeldingManage\WeldTaskService.cs" />
|
||||
|
||||
@@ -42,6 +42,18 @@ namespace BLL
|
||||
g.Key,
|
||||
RealNum = g.Sum(x => x.ActNum) ?? 0,
|
||||
}).ToList();
|
||||
///实际材料出库数量列表
|
||||
var RealOutMateriaList = (from x in db.Tw_OutputDetail
|
||||
join master in db.Tw_OutputMaster on x.OutputMasterId equals master.Id
|
||||
where master.ProjectId == projectid && master.WarehouseId == WarehouseId
|
||||
group x by x.MaterialCode
|
||||
into g
|
||||
where (string.IsNullOrEmpty(materialCode) || g.Key.Contains(materialCode))
|
||||
select new
|
||||
{
|
||||
g.Key,
|
||||
OutputNum = g.Sum(x => x.ActNum) ?? 0,
|
||||
}).ToList();
|
||||
//库存数量
|
||||
var tw_MaterialStock = (from x in db.Tw_MaterialStock
|
||||
where x.WarehouseId == WarehouseId && x.ProjectId == projectid
|
||||
@@ -50,6 +62,7 @@ namespace BLL
|
||||
var needMateriaList = NeedOutMateriaList.ToList();
|
||||
var materialCodeList = needMateriaList.Select(x => x.Key)
|
||||
.Union(RealInMateriaList.Select(x => x.Key))
|
||||
.Union(RealOutMateriaList.Select(x => x.Key))
|
||||
.Distinct()
|
||||
.ToList();
|
||||
|
||||
@@ -62,6 +75,8 @@ namespace BLL
|
||||
from x in needGroup.DefaultIfEmpty()
|
||||
join y in RealInMateriaList on code equals y.Key into realGroup
|
||||
from y in realGroup.DefaultIfEmpty()
|
||||
join o in RealOutMateriaList on code equals o.Key into outputGroup
|
||||
from o in outputGroup.DefaultIfEmpty()
|
||||
join z in materialInfoList on code equals z.MaterialCode into infoGroup
|
||||
from z in infoGroup.DefaultIfEmpty()
|
||||
join m in tw_MaterialStock on code equals m.PipeLineMatCode into stockGroup
|
||||
@@ -73,6 +88,7 @@ namespace BLL
|
||||
StockNum = m == null ? 0 : (decimal)m.StockNum,
|
||||
NeedNum = x == null ? 0 : x.NeedNum,
|
||||
RealNum = y == null ? 0 : y.RealNum,
|
||||
OutputNum = o == null ? 0 : o.OutputNum,
|
||||
Code = z == null ? null : z.Code,
|
||||
HeatNo = z == null ? null : z.HeatNo,
|
||||
BatchNo = z == null ? null : z.BatchNo,
|
||||
@@ -449,7 +465,8 @@ namespace BLL
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取单位工程下当前区域内同时存在已焊口和未焊口的组件汇总。
|
||||
/// 获取单位工程下当前区域的组件导出汇总。
|
||||
/// 每个组件返回一行;未焊达因量按未焊口统计,材料信息按当前区域组件材料明细统计。
|
||||
/// </summary>
|
||||
public static List<Tw_PartialWeldedComponentOutput> GetPartialWeldedComponents(string projectId, string unitWorkId, string pipeArea, string warehouseCode)
|
||||
{
|
||||
@@ -476,17 +493,53 @@ namespace BLL
|
||||
z.UnitWorkId,
|
||||
m.UnitWorkName,
|
||||
x.PrefabricatedComponents,
|
||||
x.MaterialCode,
|
||||
x.MaterialCode2,
|
||||
x.Number,
|
||||
w.WeldJointId,
|
||||
w.Size,
|
||||
w.WeldingDailyId
|
||||
}).ToList();
|
||||
|
||||
var partialComponents = componentWeldRows
|
||||
var materialCodes = componentWeldRows
|
||||
.Where(x => !string.IsNullOrEmpty(x.MaterialCode))
|
||||
.Select(x => x.MaterialCode)
|
||||
.Distinct()
|
||||
.ToList();
|
||||
var materialCodeLibByMaterialCode = materialCodes.Any()
|
||||
? db.HJGL_MaterialCodeLib
|
||||
.Where(x => materialCodes.Contains(x.MaterialCode))
|
||||
.ToList()
|
||||
.GroupBy(x => x.MaterialCode)
|
||||
.ToDictionary(x => x.Key, x => x.First())
|
||||
: new Dictionary<string, HJGL_MaterialCodeLib>();
|
||||
|
||||
var componentExports = componentWeldRows
|
||||
.GroupBy(x => new { x.PipelineId, x.PipelineCode, x.UnitWorkId, x.UnitWorkName, x.PrefabricatedComponents })
|
||||
.Select(group =>
|
||||
{
|
||||
var weldJoints = group.GroupBy(x => x.WeldJointId).Select(x => x.First()).ToList();
|
||||
int weldedCount = weldJoints.Count(x => !string.IsNullOrEmpty(x.WeldingDailyId));
|
||||
int totalCount = weldJoints.Count;
|
||||
// 材料编码优先采用匹配页面使用的 MaterialCode2,数量按当前区域组件材料明细汇总。
|
||||
var componentMaterialRows = group
|
||||
.Where(x => (x.Number ?? 0) > 0)
|
||||
.ToList();
|
||||
var materialGroups = componentMaterialRows
|
||||
.Select(x => new
|
||||
{
|
||||
MaterialCode = GetExportMaterialCode(x.MaterialCode, x.MaterialCode2, materialCodeLibByMaterialCode),
|
||||
Quantity = x.Number ?? 0
|
||||
})
|
||||
.Where(x => !string.IsNullOrEmpty(x.MaterialCode))
|
||||
.GroupBy(x => x.MaterialCode)
|
||||
.OrderBy(x => x.Key)
|
||||
.Select(x => new
|
||||
{
|
||||
MaterialCode = x.Key,
|
||||
Quantity = x.Sum(y => y.Quantity)
|
||||
})
|
||||
.ToList();
|
||||
return new Tw_PartialWeldedComponentOutput
|
||||
{
|
||||
UnitWorkId = group.Key.UnitWorkId,
|
||||
@@ -498,26 +551,30 @@ namespace BLL
|
||||
PipeAreaText = pipeArea == PipelineService.PipeArea_SHOP ? "工厂预制" : "现场安装",
|
||||
TotalWeldJointCount = totalCount,
|
||||
WeldedWeldJointCount = weldedCount,
|
||||
UnweldedWeldJointCount = totalCount - weldedCount
|
||||
UnweldedWeldJointCount = totalCount - weldedCount,
|
||||
UnweldedDin = weldJoints
|
||||
.Where(x => string.IsNullOrEmpty(x.WeldingDailyId))
|
||||
.Sum(x => x.Size ?? 0),
|
||||
MaterialCode = string.Join("\n", materialGroups.Select(x => x.MaterialCode)),
|
||||
MaterialQuantity = string.Join("\n", materialGroups.Select(x => x.Quantity.ToString()))
|
||||
};
|
||||
})
|
||||
.Where(x => x.WeldedWeldJointCount > 0 && x.UnweldedWeldJointCount > 0)
|
||||
.OrderBy(x => x.PipelineCode)
|
||||
.ThenBy(x => x.PrefabricatedComponents)
|
||||
.ToList();
|
||||
|
||||
if (!partialComponents.Any())
|
||||
if (!componentExports.Any())
|
||||
{
|
||||
return partialComponents;
|
||||
return componentExports;
|
||||
}
|
||||
|
||||
// 导出匹配率复用页面匹配规则,保证区域、未焊口及续作组件优先级完全一致。
|
||||
var pipelineIds = partialComponents.Select(x => x.PipelineId).Distinct().ToList();
|
||||
var pipelineIds = componentExports.Select(x => x.PipelineId).Distinct().ToList();
|
||||
var matchOutputs = GetPipeMatMatch(projectId, pipelineIds, warehouseCode, null, pipeArea);
|
||||
var componentRates = matchOutputs
|
||||
.GroupBy(x => GetComponentKey(x.PipelineId, x.PrefabricatedComponents))
|
||||
.ToDictionary(x => x.Key, x => x.First().ComponentMatchRate ?? 0);
|
||||
foreach (var component in partialComponents)
|
||||
foreach (var component in componentExports)
|
||||
{
|
||||
decimal componentRate;
|
||||
componentRates.TryGetValue(GetComponentKey(component.PipelineId, component.PrefabricatedComponents), out componentRate);
|
||||
@@ -525,10 +582,24 @@ namespace BLL
|
||||
component.ComponentMatchRateString = Math.Round(componentRate * 100, 2).ToString() + "%";
|
||||
}
|
||||
|
||||
return partialComponents;
|
||||
return componentExports;
|
||||
}
|
||||
}
|
||||
|
||||
private static string GetExportMaterialCode(string materialCode, string materialCode2, Dictionary<string, HJGL_MaterialCodeLib> materialCodeLibByMaterialCode)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(materialCode2))
|
||||
{
|
||||
return materialCode2;
|
||||
}
|
||||
|
||||
HJGL_MaterialCodeLib materialLib;
|
||||
return !string.IsNullOrEmpty(materialCode)
|
||||
&& materialCodeLibByMaterialCode.TryGetValue(materialCode, out materialLib)
|
||||
? materialLib.Code
|
||||
: materialCode;
|
||||
}
|
||||
|
||||
private static string GetJointAttributeByPipeArea(string pipeArea)
|
||||
{
|
||||
if (pipeArea == PipelineService.PipeArea_SHOP)
|
||||
|
||||
@@ -133,11 +133,19 @@ namespace BLL
|
||||
join mat in Funs.DB.HJGL_MaterialCodeLib on x.MaterialCode equals mat.MaterialCode into mm
|
||||
from mat in mm.DefaultIfEmpty()
|
||||
join y in Funs.DB.Tw_InputMaster on x.InputMasterId equals y.Id
|
||||
join warehouse in Funs.DB.Base_Warehouse on y.WarehouseId equals warehouse.WarehouseId into warehouses
|
||||
from warehouse in warehouses.DefaultIfEmpty()
|
||||
join person in Funs.DB.Person_Persons on y.CreateMan equals person.PersonId into persons
|
||||
from person in persons.DefaultIfEmpty()
|
||||
where inputMasterIds.Contains(x.InputMasterId)
|
||||
orderby y.CusBillCode, x.SortIndex
|
||||
select new
|
||||
{
|
||||
入库单编号 = y.CusBillCode,
|
||||
y.CusBillCode,
|
||||
WarehouseName = warehouse == null ? y.WarehouseCode : warehouse.WarehouseName,
|
||||
y.TypeInt,
|
||||
CreateManName = person == null ? y.CreateMan : person.PersonName,
|
||||
y.CreateDate,
|
||||
材料主编码 = x.MaterialCode,
|
||||
材料编码 = mat.Code,
|
||||
炉号 = mat.HeatNo,
|
||||
@@ -146,8 +154,26 @@ namespace BLL
|
||||
材料描述 = mat.MaterialDef,
|
||||
计划数量 = x.PlanNum,
|
||||
实际数量 = x.ActNum,
|
||||
y.Remark
|
||||
};
|
||||
return q;
|
||||
// 类型字典无法转换为 SQL,先完成数据库查询,再生成固定顺序的 Excel 列。
|
||||
return q.ToList().Select(x => new
|
||||
{
|
||||
编号 = x.CusBillCode,
|
||||
仓库 = x.WarehouseName,
|
||||
类型 = TwConst.TypeIntMap.FirstOrDefault(y => y.Value == x.TypeInt).Key,
|
||||
发起人 = x.CreateManName,
|
||||
发起时间 = x.CreateDate,
|
||||
x.材料主编码,
|
||||
x.材料编码,
|
||||
x.炉号,
|
||||
x.批号,
|
||||
x.材料名称,
|
||||
x.材料描述,
|
||||
x.计划数量,
|
||||
x.实际数量,
|
||||
备注 = x.Remark
|
||||
}).ToList();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -151,13 +151,26 @@ namespace BLL
|
||||
public static IEnumerable GetPrintListByOutputMasterIds(List<string> outputMasterIds)
|
||||
{
|
||||
var q = from x in Funs.DB.Tw_OutputDetail
|
||||
join y in Funs.DB.HJGL_MaterialCodeLib on x.MaterialCode equals y.MaterialCode
|
||||
join y in Funs.DB.HJGL_MaterialCodeLib on x.MaterialCode equals y.MaterialCode into materials
|
||||
from y in materials.DefaultIfEmpty()
|
||||
join master in Funs.DB.Tw_OutputMaster on x.OutputMasterId equals master.Id
|
||||
join plan in Funs.DB.Tw_InOutPlanMaster on master.InOutPlanMasterId equals plan.Id into plans
|
||||
from plan in plans.DefaultIfEmpty()
|
||||
join warehouse in Funs.DB.Base_Warehouse on master.WarehouseId equals warehouse.WarehouseId into warehouses
|
||||
from warehouse in warehouses.DefaultIfEmpty()
|
||||
join person in Funs.DB.Person_Persons on master.CreateMan equals person.PersonId into persons
|
||||
from person in persons.DefaultIfEmpty()
|
||||
join unit in Funs.DB.Base_Unit on master.ReqUnitId equals unit.UnitId into units
|
||||
from unit in units.DefaultIfEmpty()
|
||||
where outputMasterIds.Contains(x.OutputMasterId)
|
||||
orderby master.CusBillCode
|
||||
select new
|
||||
{
|
||||
出库单编号 = master.CusBillCode,
|
||||
master.CusBillCode,
|
||||
WarehouseName = warehouse == null ? master.WarehouseCode : warehouse.WarehouseName,
|
||||
master.TypeInt,
|
||||
CreateManName = person == null ? master.CreateMan : person.PersonName,
|
||||
master.CreateDate,
|
||||
材料主编码 = x.MaterialCode,
|
||||
材料编码 = y.Code,
|
||||
炉号 = y.HeatNo,
|
||||
@@ -166,8 +179,30 @@ namespace BLL
|
||||
材料描述 = y.MaterialDef,
|
||||
计划数量 = x.PlanNum,
|
||||
实际数量 = x.ActNum,
|
||||
master.WarehouseDate,
|
||||
ReqUnitName = unit == null ? master.ReqUnitId : unit.UnitName,
|
||||
Remark = plan == null ? null : plan.Remark
|
||||
};
|
||||
return q;
|
||||
// 类型字典无法转换为 SQL,先完成数据库查询,再生成固定顺序的 Excel 列。
|
||||
return q.ToList().Select(x => new
|
||||
{
|
||||
编号 = x.CusBillCode,
|
||||
仓库 = x.WarehouseName,
|
||||
类型 = TwConst.TypeIntMap.FirstOrDefault(y => y.Value == x.TypeInt).Key,
|
||||
发起人 = x.CreateManName,
|
||||
发起时间 = x.CreateDate,
|
||||
x.材料主编码,
|
||||
x.材料编码,
|
||||
x.炉号,
|
||||
x.批号,
|
||||
x.材料名称,
|
||||
x.材料描述,
|
||||
x.计划数量,
|
||||
x.实际数量,
|
||||
出库时间 = x.WarehouseDate,
|
||||
领用单位 = x.ReqUnitName,
|
||||
备注 = x.Remark
|
||||
}).ToList();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2944,6 +2944,8 @@ namespace BLL
|
||||
/// 下料抽检记录台账
|
||||
/// </summary>
|
||||
public const string HJGL_PreWeldCuttingCheckMenuId = "D1B5A8B7-5D2A-4C51-9B7E-6A2F15B7F002";
|
||||
/// <summary>焊缝外观检测记录菜单ID</summary>
|
||||
public const string HJGL_WeldAppearanceCheckMenuId = "A4C8F8A1-1A27-4B63-A6DF-3F8AAE67C901";
|
||||
|
||||
/// <summary>
|
||||
/// 组对抽检列表台账
|
||||
|
||||
@@ -9,6 +9,9 @@ namespace BLL
|
||||
/// </summary>
|
||||
public static class PreWeldInspectionService
|
||||
{
|
||||
public const int CuttingReviewCompleted = 0;
|
||||
public const int CuttingReviewPending = 1;
|
||||
public const int CuttingReviewApproved = 2;
|
||||
/// <summary>
|
||||
/// 获取下料检查台账
|
||||
/// </summary>
|
||||
@@ -62,13 +65,14 @@ namespace BLL
|
||||
CheckResult = x.c.CheckResult,
|
||||
UnqualifiedReason = x.c.UnqualifiedReason,
|
||||
RectifyRequirement = x.c.RectifyRequirement,
|
||||
Remark = x.c.Remark
|
||||
Remark = x.c.Remark,
|
||||
ReviewState = x.c.ReviewState,
|
||||
SpecialReviewerId = x.c.SpecialReviewerId,
|
||||
ReviewerId = x.c.ReviewerId,
|
||||
ReviewTime = x.c.ReviewTime
|
||||
})
|
||||
.ToList();
|
||||
foreach (var item in data)
|
||||
{
|
||||
item.AttachUrl1 = GetInspectionAttachUrl(db, Const.HJGL_PreWeldCuttingCheckMenuId, item.CuttingCheckId);
|
||||
}
|
||||
PopulateCuttingCheckDetails(db, data);
|
||||
|
||||
return Tuple.Create(data, total);
|
||||
}
|
||||
@@ -195,6 +199,48 @@ namespace BLL
|
||||
}
|
||||
}
|
||||
|
||||
public static List<Model.PreWeldCuttingCheckItem> GetCuttingCheckItemsByWeldJointId(string weldJointId)
|
||||
{
|
||||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||||
{
|
||||
var data = (from c in db.HJGL_PreWeldCuttingCheck
|
||||
join w in db.HJGL_WeldJoint on c.WeldJointId equals w.WeldJointId
|
||||
join p in db.Person_Persons on c.CheckPerson equals p.PersonId into persons
|
||||
from p in persons.DefaultIfEmpty()
|
||||
where c.WeldJointId == weldJointId
|
||||
orderby c.CheckTime descending, c.CreateTime descending
|
||||
select new Model.PreWeldCuttingCheckItem
|
||||
{
|
||||
CuttingCheckId = c.CuttingCheckId,
|
||||
ProjectId = c.ProjectId,
|
||||
WeldJointId = c.WeldJointId,
|
||||
PipelineCode = w.PipelineCode,
|
||||
WeldJointCode = w.WeldJointCode,
|
||||
CuttingLength = c.CuttingLength,
|
||||
GrooveForm = c.GrooveForm,
|
||||
GrooveAngle = c.GrooveAngle,
|
||||
IsMaterialCodeBatchNoAccurate = c.IsMaterialCodeBatchNoAccurate,
|
||||
IsMaterialQuantityAccurate = c.IsMaterialQuantityAccurate,
|
||||
IsQualified = c.IsQualified,
|
||||
CheckPerson = c.CheckPerson,
|
||||
CheckPersonName = p == null ? string.Empty : p.PersonName,
|
||||
CheckTime = c.CheckTime,
|
||||
CreateUser = c.CreateUser,
|
||||
CreateTime = c.CreateTime,
|
||||
CheckResult = c.CheckResult,
|
||||
UnqualifiedReason = c.UnqualifiedReason,
|
||||
RectifyRequirement = c.RectifyRequirement,
|
||||
Remark = c.Remark,
|
||||
ReviewState = c.ReviewState,
|
||||
SpecialReviewerId = c.SpecialReviewerId,
|
||||
ReviewerId = c.ReviewerId,
|
||||
ReviewTime = c.ReviewTime
|
||||
}).ToList();
|
||||
PopulateCuttingCheckDetails(db, data);
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 按焊口获取组对记录
|
||||
/// </summary>
|
||||
@@ -259,12 +305,69 @@ namespace BLL
|
||||
check.UnqualifiedReason = item.UnqualifiedReason;
|
||||
check.RectifyRequirement = item.RectifyRequirement;
|
||||
check.Remark = item.Remark;
|
||||
bool requiresSpecialReview = !item.IsMaterialCodeBatchNoAccurate;
|
||||
if (requiresSpecialReview && string.IsNullOrWhiteSpace(item.SpecialReviewerId))
|
||||
{
|
||||
throw new ArgumentException("材料编码或批次不准确时必须选择专项审核办理人。");
|
||||
}
|
||||
if (requiresSpecialReview && !db.SitePerson_Person.Any(x => x.ProjectId == check.ProjectId
|
||||
&& x.PersonId == item.SpecialReviewerId && x.States == Const.ProjectPersonStates_1))
|
||||
{
|
||||
throw new ArgumentException("专项审核办理人不属于当前项目或已停用。");
|
||||
}
|
||||
|
||||
check.ReviewState = requiresSpecialReview ? CuttingReviewPending : CuttingReviewCompleted;
|
||||
check.SpecialReviewerId = requiresSpecialReview ? item.SpecialReviewerId : null;
|
||||
check.ReviewerId = null;
|
||||
check.ReviewTime = null;
|
||||
SaveCuttingMaterialSnapshots(db, check, item.Materials);
|
||||
SyncCuttingReviewTodo(db, check, item.CreateUser ?? item.CheckPerson);
|
||||
db.SubmitChanges();
|
||||
SaveInspectionAttachUrl(item.AttachUrl1, Const.HJGL_PreWeldCuttingCheckMenuId, check.CuttingCheckId);
|
||||
return check.CuttingCheckId;
|
||||
}
|
||||
}
|
||||
|
||||
public static string ReviewCuttingCheck(Model.PreWeldCuttingCheckReviewInput item)
|
||||
{
|
||||
if (item == null || string.IsNullOrWhiteSpace(item.CuttingCheckId))
|
||||
{
|
||||
throw new ArgumentException("下料检查记录ID不能为空。");
|
||||
}
|
||||
|
||||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||||
{
|
||||
var check = db.HJGL_PreWeldCuttingCheck.FirstOrDefault(x => x.CuttingCheckId == item.CuttingCheckId);
|
||||
if (check == null)
|
||||
{
|
||||
throw new ArgumentException("未找到下料检查记录。");
|
||||
}
|
||||
if (check.ReviewState != CuttingReviewPending)
|
||||
{
|
||||
throw new InvalidOperationException("该专项审核已办理或无需办理。");
|
||||
}
|
||||
if (string.IsNullOrWhiteSpace(item.ReviewerId) || check.SpecialReviewerId != item.ReviewerId)
|
||||
{
|
||||
throw new InvalidOperationException("当前人员不是该专项审核的办理人。");
|
||||
}
|
||||
|
||||
if (item.Materials != null)
|
||||
{
|
||||
SaveCuttingMaterialSnapshots(db, check, item.Materials);
|
||||
}
|
||||
if (!string.IsNullOrWhiteSpace(item.Remark))
|
||||
{
|
||||
check.Remark = item.Remark;
|
||||
}
|
||||
check.ReviewState = CuttingReviewApproved;
|
||||
check.ReviewerId = item.ReviewerId;
|
||||
check.ReviewTime = item.ReviewTime ?? DateTime.Now;
|
||||
CompleteCuttingReviewTodo(db, check.CuttingCheckId, item.ReviewerId);
|
||||
db.SubmitChanges();
|
||||
return check.CuttingCheckId;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 保存组对检查;传入主键时修改对应记录,否则新增一条记录
|
||||
/// </summary>
|
||||
@@ -711,6 +814,133 @@ namespace BLL
|
||||
}
|
||||
}
|
||||
|
||||
private static void SaveCuttingMaterialSnapshots(Model.SGGLDB db, Model.HJGL_PreWeldCuttingCheck check,
|
||||
IList<Model.PreWeldCuttingMaterialInput> materials)
|
||||
{
|
||||
var currentMaterials = db.HJGL_PipeLineMat
|
||||
.Where(x => x.WeldJointId == check.WeldJointId)
|
||||
.OrderBy(x => x.PipeLineMatId)
|
||||
.ToList();
|
||||
var inputs = materials ?? currentMaterials.Select((x, index) => new Model.PreWeldCuttingMaterialInput
|
||||
{
|
||||
PipeLineMatId = x.PipeLineMatId,
|
||||
MaterialSide = index + 1,
|
||||
ReportedMainCode = x.MaterialCode
|
||||
}).ToList();
|
||||
|
||||
var existing = db.HJGL_PreWeldCuttingCheckMaterial
|
||||
.Where(x => x.CuttingCheckId == check.CuttingCheckId)
|
||||
.ToList();
|
||||
var originalCodeMap = existing.GroupBy(x => x.PipeLineMatId)
|
||||
.ToDictionary(x => x.Key, x => x.First().OriginalMainCode);
|
||||
db.HJGL_PreWeldCuttingCheckMaterial.DeleteAllOnSubmit(existing);
|
||||
|
||||
int side = 0;
|
||||
foreach (var input in inputs)
|
||||
{
|
||||
side++;
|
||||
var material = currentMaterials.FirstOrDefault(x => x.PipeLineMatId == input.PipeLineMatId);
|
||||
if (material == null)
|
||||
{
|
||||
throw new ArgumentException("反馈材料不属于当前焊口。");
|
||||
}
|
||||
string reportedMainCode = string.IsNullOrWhiteSpace(input.ReportedMainCode)
|
||||
? material.MaterialCode
|
||||
: input.ReportedMainCode.Trim();
|
||||
db.HJGL_PreWeldCuttingCheckMaterial.InsertOnSubmit(new Model.HJGL_PreWeldCuttingCheckMaterial
|
||||
{
|
||||
CuttingCheckMaterialId = Guid.NewGuid().ToString(),
|
||||
CuttingCheckId = check.CuttingCheckId,
|
||||
PipeLineMatId = material.PipeLineMatId,
|
||||
MaterialSide = input.MaterialSide > 0 ? input.MaterialSide : side,
|
||||
// 专项审核再次保存时保留首次提交快照,避免原始主编码被当前正式数据覆盖。
|
||||
OriginalMainCode = originalCodeMap.ContainsKey(material.PipeLineMatId)
|
||||
? originalCodeMap[material.PipeLineMatId]
|
||||
: material.MaterialCode,
|
||||
ReportedMainCode = reportedMainCode,
|
||||
IsBatchChanged = !string.Equals(material.MaterialCode, reportedMainCode, StringComparison.OrdinalIgnoreCase)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private static void SyncCuttingReviewTodo(Model.SGGLDB db, Model.HJGL_PreWeldCuttingCheck check, string creator)
|
||||
{
|
||||
var todos = db.Workflow_TodoItems.Where(x => x.FlowId == check.CuttingCheckId
|
||||
&& x.WorkflowName == "下料抽检专项审核").ToList();
|
||||
db.Workflow_TodoItems.DeleteAllOnSubmit(todos);
|
||||
if (check.ReviewState != CuttingReviewPending)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
db.Workflow_TodoItems.InsertOnSubmit(new Model.Workflow_TodoItems
|
||||
{
|
||||
Id = SQLHelper.GetNewID(),
|
||||
SysCode = WorkflowTodoitemsService.SysCode,
|
||||
FlowId = check.CuttingCheckId,
|
||||
RequestName = "下料抽检结果不准确,请专项审核",
|
||||
WorkflowName = "下料抽检专项审核",
|
||||
NodeName = "专项审核",
|
||||
PCUrl = "HJGL/PreWeld/CuttingCheckEdit.aspx?CuttingCheckId=" + check.CuttingCheckId + "&review=1",
|
||||
AppUrl = "/pages/hjgl/preWeld/cuttingCheckReview?cuttingCheckId=" + check.CuttingCheckId,
|
||||
Creator = creator,
|
||||
CreateDateTime = DateTime.Now,
|
||||
Receiver = check.SpecialReviewerId,
|
||||
ReceiveDateTime = DateTime.Now,
|
||||
Status = (int)WorkflowTodoitemsService.Status.待办
|
||||
});
|
||||
}
|
||||
|
||||
private static void CompleteCuttingReviewTodo(Model.SGGLDB db, string cuttingCheckId, string reviewerId)
|
||||
{
|
||||
var todo = db.Workflow_TodoItems.FirstOrDefault(x => x.FlowId == cuttingCheckId
|
||||
&& x.Receiver == reviewerId
|
||||
&& x.WorkflowName == "下料抽检专项审核"
|
||||
&& x.Status == (int)WorkflowTodoitemsService.Status.待办);
|
||||
if (todo != null)
|
||||
{
|
||||
todo.Status = (int)WorkflowTodoitemsService.Status.已办;
|
||||
}
|
||||
}
|
||||
|
||||
private static void PopulateCuttingCheckDetails(Model.SGGLDB db, IList<Model.PreWeldCuttingCheckItem> data)
|
||||
{
|
||||
if (data == null || data.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var ids = data.Select(x => x.CuttingCheckId).ToList();
|
||||
var snapshots = db.HJGL_PreWeldCuttingCheckMaterial
|
||||
.Where(x => ids.Contains(x.CuttingCheckId))
|
||||
.ToList();
|
||||
var personIds = data.SelectMany(x => new[] { x.SpecialReviewerId, x.ReviewerId })
|
||||
.Where(x => !string.IsNullOrEmpty(x)).Distinct().ToList();
|
||||
var personNames = db.Person_Persons.Where(x => personIds.Contains(x.PersonId))
|
||||
.ToDictionary(x => x.PersonId, x => x.PersonName);
|
||||
|
||||
foreach (var item in data)
|
||||
{
|
||||
item.AttachUrl1 = GetInspectionAttachUrl(db, Const.HJGL_PreWeldCuttingCheckMenuId, item.CuttingCheckId);
|
||||
item.ReviewStateText = item.ReviewState == CuttingReviewPending
|
||||
? "待专项审核"
|
||||
: item.ReviewState == CuttingReviewApproved ? "专项审核完成" : "普通完成";
|
||||
string name;
|
||||
item.SpecialReviewerName = personNames.TryGetValue(item.SpecialReviewerId ?? string.Empty, out name) ? name : string.Empty;
|
||||
item.ReviewerName = personNames.TryGetValue(item.ReviewerId ?? string.Empty, out name) ? name : string.Empty;
|
||||
item.Materials = snapshots.Where(x => x.CuttingCheckId == item.CuttingCheckId)
|
||||
.OrderBy(x => x.MaterialSide)
|
||||
.Select(x => new Model.PreWeldCuttingMaterialItem
|
||||
{
|
||||
PipeLineMatId = x.PipeLineMatId,
|
||||
MaterialSide = x.MaterialSide,
|
||||
OriginalMainCode = x.OriginalMainCode,
|
||||
ReportedMainCode = x.ReportedMainCode,
|
||||
IsBatchChanged = x.IsBatchChanged
|
||||
}).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据菜单和记录ID获取检查附件地址
|
||||
/// </summary>
|
||||
|
||||
@@ -0,0 +1,292 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace BLL
|
||||
{
|
||||
/// <summary>
|
||||
/// 焊缝外观检测业务服务。
|
||||
/// </summary>
|
||||
public static class WeldAppearanceCheckService
|
||||
{
|
||||
/// <summary>
|
||||
/// 分页查询焊缝外观检测记录。
|
||||
/// </summary>
|
||||
/// <param name="projectId">项目ID。</param>
|
||||
/// <param name="pipelineCode">管线号查询条件。</param>
|
||||
/// <param name="weldJointCode">焊口号查询条件。</param>
|
||||
/// <param name="qualified">合格状态,1为合格,0为不合格,空为全部。</param>
|
||||
/// <param name="pageIndex">页码,从0开始。</param>
|
||||
/// <param name="pageSize">每页记录数。</param>
|
||||
/// <returns>外观检测记录及总记录数。</returns>
|
||||
public static Tuple<List<Model.WeldAppearanceCheckItem>, int> GetList(string projectId,
|
||||
string pipelineCode, string weldJointCode, string qualified, int pageIndex, int pageSize)
|
||||
{
|
||||
var db = Funs.DB;
|
||||
var query = from c in db.HJGL_WeldAppearanceCheck
|
||||
join w in db.HJGL_WeldJoint on c.WeldJointId equals w.WeldJointId
|
||||
join p in db.Person_Persons on c.CheckPerson equals p.PersonId into persons
|
||||
from p in persons.DefaultIfEmpty()
|
||||
where string.IsNullOrEmpty(projectId) || c.ProjectId == projectId
|
||||
select new { c, w, CheckPersonName = p == null ? string.Empty : p.PersonName };
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(pipelineCode))
|
||||
{
|
||||
query = query.Where(x => x.w.PipelineCode.Contains(pipelineCode));
|
||||
}
|
||||
if (!string.IsNullOrWhiteSpace(weldJointCode))
|
||||
{
|
||||
query = query.Where(x => x.w.WeldJointCode.Contains(weldJointCode));
|
||||
}
|
||||
if (qualified == "1" || qualified == "0")
|
||||
{
|
||||
bool isQualified = qualified == "1";
|
||||
query = query.Where(x => x.c.IsQualified == isQualified);
|
||||
}
|
||||
|
||||
int total = query.Count();
|
||||
var data = query.OrderByDescending(x => x.c.CheckTime)
|
||||
.ThenByDescending(x => x.c.CreateTime)
|
||||
.Skip(pageIndex * pageSize)
|
||||
.Take(pageSize)
|
||||
.Select(x => new Model.WeldAppearanceCheckItem
|
||||
{
|
||||
AppearanceCheckId = x.c.AppearanceCheckId,
|
||||
ProjectId = x.c.ProjectId,
|
||||
WeldJointId = x.c.WeldJointId,
|
||||
PipelineCode = x.w.PipelineCode,
|
||||
WeldJointCode = x.w.WeldJointCode,
|
||||
IsQualified = x.c.IsQualified,
|
||||
QualifiedText = x.c.IsQualified ? "合格" : "不合格",
|
||||
CheckPerson = x.c.CheckPerson,
|
||||
CheckPersonName = x.CheckPersonName,
|
||||
CheckTime = x.c.CheckTime,
|
||||
Remark = x.c.Remark,
|
||||
CreateTime = x.c.CreateTime
|
||||
}).ToList();
|
||||
PopulateAttachUrls(data);
|
||||
return Tuple.Create(data, total);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 分页查询当前项目中已焊接的焊口。
|
||||
/// </summary>
|
||||
/// <param name="projectId">项目ID。</param>
|
||||
/// <param name="pipelineCode">管线号查询条件。</param>
|
||||
/// <param name="weldJointCode">焊口号查询条件。</param>
|
||||
/// <param name="pageIndex">页码,从0开始。</param>
|
||||
/// <param name="pageSize">每页记录数。</param>
|
||||
/// <returns>已焊接焊口列表。</returns>
|
||||
public static List<Model.WeldAppearanceJointItem> GetWeldedJoints(string projectId,
|
||||
string pipelineCode, string weldJointCode, int pageIndex, int pageSize)
|
||||
{
|
||||
var db = Funs.DB;
|
||||
var query = db.View_HJGL_WeldJoint.Where(x => x.ProjectId == projectId && x.WeldingDailyId != null);
|
||||
if (!string.IsNullOrWhiteSpace(pipelineCode))
|
||||
{
|
||||
query = query.Where(x => x.PipelineCode.Contains(pipelineCode));
|
||||
}
|
||||
if (!string.IsNullOrWhiteSpace(weldJointCode))
|
||||
{
|
||||
query = query.Where(x => x.WeldJointCode.Contains(weldJointCode));
|
||||
}
|
||||
return query.OrderBy(x => x.PipelineCode).ThenBy(x => x.WeldJointCode)
|
||||
.Skip(pageIndex * pageSize).Take(pageSize)
|
||||
.Select(x => new Model.WeldAppearanceJointItem
|
||||
{
|
||||
WeldJointId = x.WeldJointId,
|
||||
ProjectId = x.ProjectId,
|
||||
PipelineCode = x.PipelineCode,
|
||||
WeldJointCode = x.WeldJointCode,
|
||||
WeldTypeCode = x.WeldTypeCode,
|
||||
WeldingMethodCode = x.WeldingMethodCode,
|
||||
WeldingDate = x.WeldingDateD
|
||||
}).ToList();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查询焊口基础信息及历史外观检测记录。
|
||||
/// </summary>
|
||||
/// <param name="weldJointId">焊口ID。</param>
|
||||
/// <returns>焊口详情及外观检测历史。</returns>
|
||||
public static Model.WeldAppearanceJointItem GetJointDetail(string weldJointId)
|
||||
{
|
||||
var db = Funs.DB;
|
||||
var joint = db.View_HJGL_WeldJoint.Where(x => x.WeldJointId == weldJointId)
|
||||
.Select(x => new Model.WeldAppearanceJointItem
|
||||
{
|
||||
WeldJointId = x.WeldJointId,
|
||||
ProjectId = x.ProjectId,
|
||||
PipelineCode = x.PipelineCode,
|
||||
WeldJointCode = x.WeldJointCode,
|
||||
WeldTypeCode = x.WeldTypeCode,
|
||||
WeldingMethodCode = x.WeldingMethodCode,
|
||||
WeldingDate = x.WeldingDateD
|
||||
}).FirstOrDefault();
|
||||
if (joint != null)
|
||||
{
|
||||
joint.History = GetHistory(weldJointId);
|
||||
}
|
||||
return joint;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据记录ID查询焊缝外观检测记录。
|
||||
/// </summary>
|
||||
/// <param name="appearanceCheckId">外观检测记录ID。</param>
|
||||
/// <returns>焊缝外观检测记录。</returns>
|
||||
public static Model.WeldAppearanceCheckItem GetById(string appearanceCheckId)
|
||||
{
|
||||
var item = GetHistoryQuery().FirstOrDefault(x => x.AppearanceCheckId == appearanceCheckId);
|
||||
if (item != null)
|
||||
{
|
||||
item.AttachUrl = GetAttachUrl(item.AppearanceCheckId);
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 新增或修改焊缝外观检测记录。
|
||||
/// </summary>
|
||||
/// <param name="item">外观检测结果及附件信息。</param>
|
||||
/// <returns>外观检测记录ID。</returns>
|
||||
public static string Save(Model.WeldAppearanceCheckInput item)
|
||||
{
|
||||
if (item == null || string.IsNullOrWhiteSpace(item.WeldJointId))
|
||||
{
|
||||
throw new ArgumentException("焊口不能为空。");
|
||||
}
|
||||
|
||||
var db = Funs.DB;
|
||||
var joint = db.HJGL_WeldJoint.FirstOrDefault(x => x.WeldJointId == item.WeldJointId);
|
||||
if (joint == null || joint.WeldingDailyId == null)
|
||||
{
|
||||
throw new ArgumentException("只能对已焊接焊口进行外观检测。");
|
||||
}
|
||||
|
||||
string id = string.IsNullOrWhiteSpace(item.AppearanceCheckId)
|
||||
? Guid.NewGuid().ToString()
|
||||
: item.AppearanceCheckId;
|
||||
var check = db.HJGL_WeldAppearanceCheck.FirstOrDefault(x => x.AppearanceCheckId == id);
|
||||
bool hasExistingPhoto = db.AttachFile.Any(x => x.MenuId == Const.HJGL_WeldAppearanceCheckMenuId && x.ToKeyId == id);
|
||||
if (string.IsNullOrWhiteSpace(item.AttachUrl) && !hasExistingPhoto)
|
||||
{
|
||||
throw new ArgumentException("请至少上传一张外观检测照片。");
|
||||
}
|
||||
|
||||
if (check == null)
|
||||
{
|
||||
check = new Model.HJGL_WeldAppearanceCheck
|
||||
{
|
||||
AppearanceCheckId = id,
|
||||
CreateTime = DateTime.Now,
|
||||
CreateUser = string.IsNullOrEmpty(item.CreateUser) ? item.CheckPerson : item.CreateUser
|
||||
};
|
||||
db.HJGL_WeldAppearanceCheck.InsertOnSubmit(check);
|
||||
}
|
||||
else
|
||||
{
|
||||
check.ModifyUser = string.IsNullOrEmpty(item.CreateUser) ? item.CheckPerson : item.CreateUser;
|
||||
check.ModifyTime = DateTime.Now;
|
||||
}
|
||||
|
||||
check.ProjectId = string.IsNullOrEmpty(item.ProjectId) ? joint.ProjectId : item.ProjectId;
|
||||
check.WeldJointId = item.WeldJointId;
|
||||
check.IsQualified = item.IsQualified;
|
||||
check.CheckPerson = item.CheckPerson;
|
||||
check.CheckTime = item.CheckTime ?? DateTime.Now;
|
||||
check.Remark = item.Remark;
|
||||
db.SubmitChanges();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(item.AttachUrl))
|
||||
{
|
||||
UploadFileService.SaveAttachUrl(UploadFileService.GetSourceByAttachUrl(item.AttachUrl, 10, null),
|
||||
item.AttachUrl, Const.HJGL_WeldAppearanceCheckMenuId, id);
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除焊缝外观检测记录及其附件。
|
||||
/// </summary>
|
||||
/// <param name="appearanceCheckId">外观检测记录ID。</param>
|
||||
public static void Delete(string appearanceCheckId)
|
||||
{
|
||||
var db = Funs.DB;
|
||||
var check = db.HJGL_WeldAppearanceCheck.FirstOrDefault(x => x.AppearanceCheckId == appearanceCheckId);
|
||||
if (check == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
db.HJGL_WeldAppearanceCheck.DeleteOnSubmit(check);
|
||||
db.SubmitChanges();
|
||||
CommonService.DeleteAttachFileById(Const.HJGL_WeldAppearanceCheckMenuId, appearanceCheckId);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查询指定焊口的历史外观检测记录。
|
||||
/// </summary>
|
||||
/// <param name="weldJointId">焊口ID。</param>
|
||||
/// <returns>按检测时间倒序排列的历史记录。</returns>
|
||||
private static List<Model.WeldAppearanceCheckItem> GetHistory(string weldJointId)
|
||||
{
|
||||
var data = GetHistoryQuery().Where(x => x.WeldJointId == weldJointId)
|
||||
.OrderByDescending(x => x.CheckTime).ThenByDescending(x => x.CreateTime).ToList();
|
||||
PopulateAttachUrls(data);
|
||||
return data;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 构建焊缝外观检测记录查询。
|
||||
/// </summary>
|
||||
/// <returns>焊缝外观检测记录查询对象。</returns>
|
||||
private static IQueryable<Model.WeldAppearanceCheckItem> GetHistoryQuery()
|
||||
{
|
||||
var db = Funs.DB;
|
||||
return from c in db.HJGL_WeldAppearanceCheck
|
||||
join w in db.HJGL_WeldJoint on c.WeldJointId equals w.WeldJointId
|
||||
join p in db.Person_Persons on c.CheckPerson equals p.PersonId into persons
|
||||
from p in persons.DefaultIfEmpty()
|
||||
select new Model.WeldAppearanceCheckItem
|
||||
{
|
||||
AppearanceCheckId = c.AppearanceCheckId,
|
||||
ProjectId = c.ProjectId,
|
||||
WeldJointId = c.WeldJointId,
|
||||
PipelineCode = w.PipelineCode,
|
||||
WeldJointCode = w.WeldJointCode,
|
||||
IsQualified = c.IsQualified,
|
||||
QualifiedText = c.IsQualified ? "合格" : "不合格",
|
||||
CheckPerson = c.CheckPerson,
|
||||
CheckPersonName = p == null ? string.Empty : p.PersonName,
|
||||
CheckTime = c.CheckTime,
|
||||
Remark = c.Remark,
|
||||
CreateTime = c.CreateTime
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 为外观检测记录补充附件地址。
|
||||
/// </summary>
|
||||
/// <param name="data">外观检测记录。</param>
|
||||
private static void PopulateAttachUrls(IList<Model.WeldAppearanceCheckItem> data)
|
||||
{
|
||||
foreach (var item in data)
|
||||
{
|
||||
item.AttachUrl = GetAttachUrl(item.AppearanceCheckId);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查询外观检测记录的附件地址。
|
||||
/// </summary>
|
||||
/// <param name="id">外观检测记录ID。</param>
|
||||
/// <returns>附件地址。</returns>
|
||||
private static string GetAttachUrl(string id)
|
||||
{
|
||||
var db = Funs.DB;
|
||||
var url = db.AttachFile.Where(x => x.MenuId == Const.HJGL_WeldAppearanceCheckMenuId && x.ToKeyId == id)
|
||||
.Select(x => x.AttachUrl).FirstOrDefault();
|
||||
return string.IsNullOrEmpty(url) ? url : url.Replace('\\', '/');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -478,6 +478,15 @@ namespace BLL
|
||||
/// <param name="welderType">焊工类型 0 全部 1 打底 2 盖面</param>
|
||||
/// <returns>错误信息</returns>
|
||||
public static string SaveWeldingDailyTempDetailByMobile(string weldJointId, string personId, string time, string weldingLocationId, int welderType)
|
||||
{
|
||||
return SaveWeldingDailyTempDetailByMobile(weldJointId, personId, time, weldingLocationId, welderType, null, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 移动端按焊口保存焊接日报待审核明细,并按需同步焊接方法和焊缝类型。
|
||||
/// </summary>
|
||||
public static string SaveWeldingDailyTempDetailByMobile(string weldJointId, string personId, string time,
|
||||
string weldingLocationId, int welderType, string weldingMethodId, string weldTypeId)
|
||||
{
|
||||
string res = string.Empty;
|
||||
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
||||
@@ -506,6 +515,13 @@ namespace BLL
|
||||
|
||||
var weldTask = db.HJGL_WeldTask.FirstOrDefault(x => x.WeldJointId == joint.WeldJointId);
|
||||
var weldJoint = db.HJGL_WeldJoint.FirstOrDefault(x => x.WeldJointId == joint.WeldJointId);
|
||||
|
||||
// 兼容旧版小程序:只有两个参数同时存在时才成对更新,避免焊口工艺信息出现半更新。
|
||||
if (!string.IsNullOrWhiteSpace(weldingMethodId) && !string.IsNullOrWhiteSpace(weldTypeId))
|
||||
{
|
||||
weldJoint.WeldingMethodId = weldingMethodId;
|
||||
weldJoint.WeldTypeId = weldTypeId;
|
||||
}
|
||||
var pending = GetPendingTempDetail(db, weldJointId, weldingDate);
|
||||
|
||||
string coverWelderId = pending != null ? pending.CoverWelderId : weldJoint.CoverWelderId;
|
||||
|
||||
@@ -90,6 +90,9 @@
|
||||
<f:RenderField Width="90px" ColumnID="RealNum" DataField="RealNum" SortField="RealNum"
|
||||
FieldType="String" HeaderText="到货量" TextAlign="Left" HeaderTextAlign="Center">
|
||||
</f:RenderField>
|
||||
<f:RenderField Width="90px" ColumnID="OutputNum" DataField="OutputNum" SortField="OutputNum"
|
||||
FieldType="String" HeaderText="出库量" TextAlign="Left" HeaderTextAlign="Center">
|
||||
</f:RenderField>
|
||||
<f:RenderField Width="90px" ColumnID="StockNum" DataField="StockNum" SortField="StockNum"
|
||||
FieldType="String" HeaderText="库存量" TextAlign="Left" HeaderTextAlign="Center">
|
||||
</f:RenderField>
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
<f:ToolbarFill runat="server"></f:ToolbarFill>
|
||||
<f:Button ID="btnSearch" ToolTip="查询" Icon="SystemSearch" runat="server" Text="查询" OnClick="btnSearch_Click">
|
||||
</f:Button>
|
||||
<f:Button ID="btnOut" OnClick="btnOut_Click" runat="server" Text="导出" ToolTip="导出" Icon="FolderUp"
|
||||
<f:Button ID="btnOut" OnClick="btnOut_Click" runat="server" Text="入库明细导出" ToolTip="导出选中入库单的全部明细" Icon="FolderUp"
|
||||
EnableAjax="false" DisableControlBeforePostBack="false">
|
||||
</f:Button>
|
||||
</Items>
|
||||
|
||||
@@ -266,26 +266,29 @@ namespace FineUIPro.Web.CLGL
|
||||
/// <param name="e"></param>
|
||||
protected void btnOut_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (Grid1.SelectedRowIDArray.Length > 0)
|
||||
if (Grid1.SelectedRowIDArray.Length == 0)
|
||||
{
|
||||
var printModel = TwInputdetailService.GePrintListByInputMasterIds(Grid1.SelectedRowIDArray.ToList());
|
||||
string path = Funs.RootPath + @"File\Excel\Temp\InputDetail.xlsx";
|
||||
path = path.Replace(".xlsx", string.Format("{0:yyyy-MM-dd-HH-mm}", DateTime.Now) + ".xlsx");
|
||||
|
||||
MiniExcel.SaveAs(path, printModel);
|
||||
|
||||
string fileName = "入库明细表.xlsx";
|
||||
FileInfo info = new FileInfo(path);
|
||||
long fileSize = info.Length;
|
||||
System.Web.HttpContext.Current.Response.Clear();
|
||||
System.Web.HttpContext.Current.Response.ContentType = "application/x-zip-compressed";
|
||||
System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
|
||||
System.Web.HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());
|
||||
System.Web.HttpContext.Current.Response.TransmitFile(path, 0, fileSize);
|
||||
System.Web.HttpContext.Current.Response.Flush();
|
||||
System.Web.HttpContext.Current.Response.Close();
|
||||
File.Delete(path);
|
||||
Alert.ShowInTop("请至少选择一张入库单", MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
var printModel = TwInputdetailService.GePrintListByInputMasterIds(Grid1.SelectedRowIDArray.ToList());
|
||||
string path = Funs.RootPath + @"File\Excel\Temp\InputDetail.xlsx";
|
||||
path = path.Replace(".xlsx", string.Format("{0:yyyy-MM-dd-HH-mm}", DateTime.Now) + ".xlsx");
|
||||
|
||||
MiniExcel.SaveAs(path, printModel);
|
||||
|
||||
string fileName = "入库明细表.xlsx";
|
||||
FileInfo info = new FileInfo(path);
|
||||
long fileSize = info.Length;
|
||||
System.Web.HttpContext.Current.Response.Clear();
|
||||
System.Web.HttpContext.Current.Response.ContentType = "application/x-zip-compressed";
|
||||
System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
|
||||
System.Web.HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());
|
||||
System.Web.HttpContext.Current.Response.TransmitFile(path, 0, fileSize);
|
||||
System.Web.HttpContext.Current.Response.Flush();
|
||||
System.Web.HttpContext.Current.Response.Close();
|
||||
File.Delete(path);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -225,8 +225,7 @@ namespace FineUIPro.Web.CLGL
|
||||
string filename = Funs.GetNewFileName();
|
||||
Response.AddHeader("content-disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode("材料库存表" + filename, System.Text.Encoding.UTF8) + ".xls");
|
||||
Response.ContentType = "application/excel";
|
||||
Response.ContentEncoding = System.Text.Encoding.UTF8;
|
||||
this.Grid1.PageSize = 500;
|
||||
Response.ContentEncoding = System.Text.Encoding.UTF8;
|
||||
this.BindGrid();
|
||||
Response.Write(GetGridTableHtml(Grid1));
|
||||
Response.End();
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
</f:Button>
|
||||
<f:Button ID="btnGenOutPlanMaster" Text="生成补料申请单" Icon="ArrowRefresh" runat="server" OnClick="btnGenOutPlanMaster_Click" Hidden="true">
|
||||
</f:Button>
|
||||
<f:Button ID="btnOut" OnClick="btnOut_Click" runat="server" Text="导出" ToolTip="导出" Icon="FolderUp"
|
||||
<f:Button ID="btnOut" OnClick="btnOut_Click" runat="server" Text="出库明细导出" ToolTip="导出选中出库单的全部明细" Icon="FolderUp"
|
||||
EnableAjax="false" DisableControlBeforePostBack="false">
|
||||
</f:Button>
|
||||
</Items>
|
||||
@@ -97,6 +97,7 @@
|
||||
<f:Grid ID="Grid1" ShowBorder="true" ShowHeader="false" Title="申请单"
|
||||
EnableCollapse="true" runat="server" BoxFlex="1" DataKeyNames="Id" PageSize="1000"
|
||||
AllowColumnLocking="true" EnableColumnLines="true" ClicksToEdit="2" DataIDField="Id"
|
||||
EnableCheckBoxSelect="true"
|
||||
AllowSorting="true" SortField="CusBillCode" SortDirection="ASC" OnSort="Grid1_Sort" OnRowCommand="Grid1_RowCommand"
|
||||
EnableTextSelection="True" EnableRowDoubleClickEvent="true" OnRowDoubleClick="Grid1_RowDoubleClick" EnableRowClickEvent="true" OnRowClick="Grid1_RowClick">
|
||||
<Columns>
|
||||
|
||||
@@ -672,30 +672,29 @@ namespace FineUIPro.Web.CLGL
|
||||
|
||||
protected void btnOut_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (Grid1.SelectedRowIDArray.Length > 0)
|
||||
if (Grid1.SelectedRowIDArray.Length == 0)
|
||||
{
|
||||
var sheets = new Dictionary<string, object>
|
||||
{
|
||||
["出库明细"] = TwOutputdetailService.GetPrintListByOutputMasterIds(Grid1.SelectedRowIDArray.ToList()),
|
||||
["管线材料明细"] = TwInoutplandetailRelationService.GetPrintListByOutputMasterIds(Grid1.SelectedRowIDArray.ToList())
|
||||
};
|
||||
string path = Funs.RootPath + @"File\Excel\Temp\OutputDetail.xlsx";
|
||||
path = path.Replace(".xlsx", string.Format("{0:yyyy-MM-dd-HH-mm}", DateTime.Now) + ".xlsx");
|
||||
|
||||
MiniExcel.SaveAs(path, sheets);
|
||||
|
||||
string fileName = "出库明细表.xlsx";
|
||||
FileInfo info = new FileInfo(path);
|
||||
long fileSize = info.Length;
|
||||
System.Web.HttpContext.Current.Response.Clear();
|
||||
System.Web.HttpContext.Current.Response.ContentType = "application/x-zip-compressed";
|
||||
System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
|
||||
System.Web.HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());
|
||||
System.Web.HttpContext.Current.Response.TransmitFile(path, 0, fileSize);
|
||||
System.Web.HttpContext.Current.Response.Flush();
|
||||
System.Web.HttpContext.Current.Response.Close();
|
||||
File.Delete(path);
|
||||
Alert.ShowInTop("请至少选择一张出库单", MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
var printModel = TwOutputdetailService.GetPrintListByOutputMasterIds(Grid1.SelectedRowIDArray.ToList());
|
||||
string path = Funs.RootPath + @"File\Excel\Temp\OutputDetail.xlsx";
|
||||
path = path.Replace(".xlsx", string.Format("{0:yyyy-MM-dd-HH-mm}", DateTime.Now) + ".xlsx");
|
||||
|
||||
MiniExcel.SaveAs(path, printModel);
|
||||
|
||||
string fileName = "出库明细表.xlsx";
|
||||
FileInfo info = new FileInfo(path);
|
||||
long fileSize = info.Length;
|
||||
System.Web.HttpContext.Current.Response.Clear();
|
||||
System.Web.HttpContext.Current.Response.ContentType = "application/x-zip-compressed";
|
||||
System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
|
||||
System.Web.HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());
|
||||
System.Web.HttpContext.Current.Response.TransmitFile(path, 0, fileSize);
|
||||
System.Web.HttpContext.Current.Response.Flush();
|
||||
System.Web.HttpContext.Current.Response.Close();
|
||||
File.Delete(path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1727,6 +1727,8 @@
|
||||
<Content Include="HJGL\WeldingManage\WeldMatMatch.aspx" />
|
||||
<Content Include="HJGL\WeldingManage\WeldMatMatchGet.aspx" />
|
||||
<Content Include="HJGL\WeldingManage\WeldReport.aspx" />
|
||||
<Content Include="HJGL\WeldingManage\WeldAppearanceCheck.aspx" />
|
||||
<Content Include="HJGL\WeldingManage\WeldAppearanceCheckEdit.aspx" />
|
||||
<Content Include="HJGL\WeldingManage\WeldReportEdit.aspx" />
|
||||
<Content Include="HJGL\WeldingManage\WeldTask.aspx" />
|
||||
<Content Include="HJGL\WeldingReport\CheckResult.aspx" />
|
||||
@@ -11726,6 +11728,20 @@
|
||||
<DependentUpon>WeldReport.aspx</DependentUpon>
|
||||
<SubType>ASPXCodeBehind</SubType>
|
||||
</Compile>
|
||||
<Compile Include="HJGL\WeldingManage\WeldAppearanceCheck.aspx.cs">
|
||||
<DependentUpon>WeldAppearanceCheck.aspx</DependentUpon>
|
||||
<SubType>ASPXCodeBehind</SubType>
|
||||
</Compile>
|
||||
<Compile Include="HJGL\WeldingManage\WeldAppearanceCheck.aspx.designer.cs">
|
||||
<DependentUpon>WeldAppearanceCheck.aspx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="HJGL\WeldingManage\WeldAppearanceCheckEdit.aspx.cs">
|
||||
<DependentUpon>WeldAppearanceCheckEdit.aspx</DependentUpon>
|
||||
<SubType>ASPXCodeBehind</SubType>
|
||||
</Compile>
|
||||
<Compile Include="HJGL\WeldingManage\WeldAppearanceCheckEdit.aspx.designer.cs">
|
||||
<DependentUpon>WeldAppearanceCheckEdit.aspx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="HJGL\WeldingManage\WeldReport.aspx.designer.cs">
|
||||
<DependentUpon>WeldReport.aspx</DependentUpon>
|
||||
</Compile>
|
||||
|
||||
@@ -7,6 +7,9 @@
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>材料信息</title>
|
||||
<link href="../../res/css/common.css" rel="stylesheet" type="text/css" />
|
||||
<style type="text/css">
|
||||
.f-grid-row.batch-changed-review, .f-grid-row.batch-changed-review a { background-color: #ffe0e0 !important; color: #c00000 !important; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<form id="form1" runat="server">
|
||||
@@ -105,7 +108,7 @@
|
||||
EnableCollapse="true" runat="server" BoxFlex="1" DataKeyNames="PipeLineMatId"
|
||||
EnableColumnLines="true" DataIDField="PipeLineMatId" AllowSorting="true" EnableCheckBoxSelect="true"
|
||||
SortField="PrefabricatedComponents" SortDirection="ASC" OnSort="Grid1_Sort"
|
||||
EnableRowDoubleClickEvent="true" OnRowDoubleClick="Grid1_RowDoubleClick">
|
||||
EnableRowDoubleClickEvent="true" OnRowDoubleClick="Grid1_RowDoubleClick" OnRowDataBound="MaterialGrid_RowDataBound">
|
||||
<Columns>
|
||||
<f:RowNumberField EnablePagingNumber="true" HeaderText="序号"
|
||||
Width="60px" HeaderTextAlign="Center" TextAlign="Center" />
|
||||
@@ -175,7 +178,7 @@
|
||||
EnableCollapse="true" runat="server" BoxFlex="1" DataKeyNames="PipeLineMatId"
|
||||
EnableColumnLines="true" DataIDField="PipeLineMatId" AllowSorting="true"
|
||||
SortField="PipeLineMatId" SortDirection="ASC" OnSort="Grid2_Sort" EnableCheckBoxSelect="true"
|
||||
EnableRowDoubleClickEvent="true" OnRowDoubleClick="Grid2_RowDoubleClick">
|
||||
EnableRowDoubleClickEvent="true" OnRowDoubleClick="Grid2_RowDoubleClick" OnRowDataBound="MaterialGrid_RowDataBound">
|
||||
<Columns>
|
||||
<f:RowNumberField EnablePagingNumber="true" HeaderText="序号"
|
||||
Width="60px" HeaderTextAlign="Center" TextAlign="Center" />
|
||||
@@ -238,7 +241,7 @@
|
||||
<f:Grid ID="Grid3" ShowBorder="true" ShowHeader="false" Title="散件管理"
|
||||
EnableCollapse="true" runat="server" BoxFlex="1" DataKeyNames="PipeLineMatId"
|
||||
EnableColumnLines="true" DataIDField="PipeLineMatId" AllowSorting="true"
|
||||
SortField="PipeLineMatId" SortDirection="ASC" OnSort="Grid3_Sort" EnableCheckBoxSelect="true"
|
||||
SortField="PipeLineMatId" SortDirection="ASC" OnSort="Grid3_Sort" EnableCheckBoxSelect="true" OnRowDataBound="MaterialGrid_RowDataBound"
|
||||
EnableRowDoubleClickEvent="true" >
|
||||
<Columns>
|
||||
<f:RowNumberField EnablePagingNumber="true" HeaderText="序号"
|
||||
|
||||
@@ -329,12 +329,19 @@ namespace FineUIPro.Web.HJGL.DataImport
|
||||
ISNULL(lib.MaterialDef, libCode.MaterialDef) AS MaterialDef,
|
||||
pipe.Number,pipe.PrefabricatedComponents,
|
||||
CASE pipe.PipeArea WHEN '1' THEN N'工厂预制' WHEN '2' THEN N'现场安装' END AS PipeAreaText,
|
||||
weld.WeldJointCode
|
||||
weld.WeldJointCode, ISNULL(reviewChange.HasChange, 0) AS HasReviewedBatchChange
|
||||
FROM dbo.HJGL_PipeLineMat pipe
|
||||
LEFT JOIN dbo.HJGL_MaterialCodeLib lib ON lib.MaterialCode = pipe.MaterialCode
|
||||
LEFT JOIN HJGL_Pipeline line ON pipe.PipelineId=line.PipelineId
|
||||
OUTER APPLY (SELECT TOP 1 * FROM dbo.HJGL_MaterialCodeLib codeLib WHERE codeLib.ProjectId=line.ProjectId AND codeLib.Code=pipe.MaterialCode2 ORDER BY codeLib.MaterialCode) libCode
|
||||
LEFT JOIN dbo.HJGL_WeldJoint weld ON weld.WeldJointId = pipe.WeldJointId
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1 CAST(CASE WHEN ISNULL(s.ReportedMainCode,'') <> ISNULL(pipe.MaterialCode,'') THEN 1 ELSE 0 END AS BIT) HasChange
|
||||
FROM dbo.HJGL_PreWeldCuttingCheckMaterial s
|
||||
INNER JOIN dbo.HJGL_PreWeldCuttingCheck c ON c.CuttingCheckId=s.CuttingCheckId
|
||||
WHERE s.PipeLineMatId=pipe.PipeLineMatId AND c.ReviewState=2
|
||||
ORDER BY c.ReviewTime DESC, c.CheckTime DESC, c.CuttingCheckId DESC
|
||||
) reviewChange
|
||||
WHERE line.UnitWorkId=@UnitWorkId and pipe.PipeArea='1' and pipe.PrefabricatedComponents !='' ";
|
||||
List<SqlParameter> listStr = new List<SqlParameter>();
|
||||
//if (!string.IsNullOrEmpty(txtMaterialCode.Text.Trim()))
|
||||
@@ -373,12 +380,19 @@ namespace FineUIPro.Web.HJGL.DataImport
|
||||
ISNULL(lib.MaterialDef, libCode.MaterialDef) AS MaterialDef,
|
||||
pipe.Number,
|
||||
CASE pipe.PipeArea WHEN '1' THEN N'工厂预制' WHEN '2' THEN N'现场安装' END AS PipeAreaText,
|
||||
weld.WeldJointCode
|
||||
weld.WeldJointCode, ISNULL(reviewChange.HasChange, 0) AS HasReviewedBatchChange
|
||||
FROM dbo.HJGL_PipeLineMat pipe
|
||||
LEFT JOIN dbo.HJGL_MaterialCodeLib lib ON lib.MaterialCode = pipe.MaterialCode
|
||||
LEFT JOIN HJGL_Pipeline line ON pipe.PipelineId=line.PipelineId
|
||||
OUTER APPLY (SELECT TOP 1 * FROM dbo.HJGL_MaterialCodeLib codeLib WHERE codeLib.ProjectId=line.ProjectId AND codeLib.Code=pipe.MaterialCode2 ORDER BY codeLib.MaterialCode) libCode
|
||||
LEFT JOIN dbo.HJGL_WeldJoint weld ON weld.WeldJointId = pipe.WeldJointId
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1 CAST(CASE WHEN ISNULL(s.ReportedMainCode,'') <> ISNULL(pipe.MaterialCode,'') THEN 1 ELSE 0 END AS BIT) HasChange
|
||||
FROM dbo.HJGL_PreWeldCuttingCheckMaterial s
|
||||
INNER JOIN dbo.HJGL_PreWeldCuttingCheck c ON c.CuttingCheckId=s.CuttingCheckId
|
||||
WHERE s.PipeLineMatId=pipe.PipeLineMatId AND c.ReviewState=2
|
||||
ORDER BY c.ReviewTime DESC, c.CheckTime DESC, c.CuttingCheckId DESC
|
||||
) reviewChange
|
||||
WHERE line.UnitWorkId=@UnitWorkId and pipe.PipeArea='2' ";
|
||||
List<SqlParameter> listStr = new List<SqlParameter>();
|
||||
if (!string.IsNullOrEmpty(pipelineId))
|
||||
@@ -413,12 +427,19 @@ namespace FineUIPro.Web.HJGL.DataImport
|
||||
ISNULL(lib.MaterialDef, libCode.MaterialDef) AS MaterialDef,
|
||||
pipe.Number,pipe.PrefabricatedComponents,
|
||||
CASE pipe.PipeArea WHEN '1' THEN N'工厂预制' WHEN '2' THEN N'现场安装' END AS PipeAreaText,
|
||||
weld.WeldJointCode
|
||||
weld.WeldJointCode, ISNULL(reviewChange.HasChange, 0) AS HasReviewedBatchChange
|
||||
FROM dbo.HJGL_PipeLineMat pipe
|
||||
LEFT JOIN dbo.HJGL_MaterialCodeLib lib ON lib.MaterialCode = pipe.MaterialCode
|
||||
LEFT JOIN HJGL_Pipeline line ON pipe.PipelineId=line.PipelineId
|
||||
OUTER APPLY (SELECT TOP 1 * FROM dbo.HJGL_MaterialCodeLib codeLib WHERE codeLib.ProjectId=line.ProjectId AND codeLib.Code=pipe.MaterialCode2 ORDER BY codeLib.MaterialCode) libCode
|
||||
LEFT JOIN dbo.HJGL_WeldJoint weld ON weld.WeldJointId = pipe.WeldJointId
|
||||
OUTER APPLY (
|
||||
SELECT TOP 1 CAST(CASE WHEN ISNULL(s.ReportedMainCode,'') <> ISNULL(pipe.MaterialCode,'') THEN 1 ELSE 0 END AS BIT) HasChange
|
||||
FROM dbo.HJGL_PreWeldCuttingCheckMaterial s
|
||||
INNER JOIN dbo.HJGL_PreWeldCuttingCheck c ON c.CuttingCheckId=s.CuttingCheckId
|
||||
WHERE s.PipeLineMatId=pipe.PipeLineMatId AND c.ReviewState=2
|
||||
ORDER BY c.ReviewTime DESC, c.CheckTime DESC, c.CuttingCheckId DESC
|
||||
) reviewChange
|
||||
WHERE line.UnitWorkId=@UnitWorkId and pipe.PipeArea='1' and (pipe.PrefabricatedComponents is null or pipe.PrefabricatedComponents='') ";
|
||||
List<SqlParameter> listStr = new List<SqlParameter>();
|
||||
//if (!string.IsNullOrEmpty(txtMaterialCode.Text.Trim()))
|
||||
@@ -450,6 +471,19 @@ namespace FineUIPro.Web.HJGL.DataImport
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// 最新专项审核反馈主编码与当前材料主编码不一致时整行标红。
|
||||
/// </summary>
|
||||
protected void MaterialGrid_RowDataBound(object sender, GridRowEventArgs e)
|
||||
{
|
||||
var row = e.DataItem as DataRowView;
|
||||
if (row != null && row.Row.Table.Columns.Contains("HasReviewedBatchChange")
|
||||
&& Convert.ToBoolean(row["HasReviewedBatchChange"]))
|
||||
{
|
||||
e.RowCssClass = "batch-changed-review";
|
||||
}
|
||||
}
|
||||
|
||||
#region 分页排序
|
||||
|
||||
#region 排序
|
||||
|
||||
@@ -112,6 +112,9 @@
|
||||
<f:RenderField HeaderText="完成状态" ColumnID="IsWeldOK" DataField="IsWeldOK"
|
||||
SortField="IsWeldOK" FieldType="String" HeaderTextAlign="Center" Width="100px">
|
||||
</f:RenderField>
|
||||
<f:RenderField HeaderText="焊缝是否合格" ColumnID="WeldAppearanceResult" DataField="WeldAppearanceResult"
|
||||
SortField="WeldAppearanceResult" FieldType="String" HeaderTextAlign="Center" Width="120px">
|
||||
</f:RenderField>
|
||||
<f:RenderField HeaderText="单位名称" ColumnID="UnitName" DataField="UnitName"
|
||||
SortField="UnitName" FieldType="String" HeaderTextAlign="Center" Width="180px">
|
||||
</f:RenderField>
|
||||
|
||||
@@ -626,6 +626,7 @@ namespace FineUIPro.Web.HJGL.InfoQuery
|
||||
管线号 = x.PipelineCode,
|
||||
焊口号 = x.WeldJointCode,
|
||||
完成状态 = x.IsWeldOK,
|
||||
焊缝是否合格 = x.WeldAppearanceResult,
|
||||
单位名称 = x.UnitName,
|
||||
流水段 = x.FlowingSection,
|
||||
任务单编号 = x.TaskCode,
|
||||
@@ -709,6 +710,7 @@ namespace FineUIPro.Web.HJGL.InfoQuery
|
||||
{
|
||||
焊口号 = x.WeldJointCode,
|
||||
完成状态 = x.IsWeldOK,
|
||||
焊缝是否合格 = x.WeldAppearanceResult,
|
||||
单位名称 = x.UnitName,
|
||||
流水段 = x.FlowingSection,
|
||||
任务单编号 = x.TaskCode,
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
</f:FormRow>
|
||||
<f:FormRow>
|
||||
<Items>
|
||||
<f:TextBox ID="txtPipelineComponentCode" Label="组件编号" ShowRedStar="true" Readonly="true"
|
||||
<f:TextBox ID="txtPipelineComponentCode" Label="组件编号" ShowRedStar="true"
|
||||
Required="true" runat="server" FocusOnPageLoad="true" LabelWidth="120px">
|
||||
</f:TextBox>
|
||||
</Items>
|
||||
|
||||
@@ -68,6 +68,12 @@
|
||||
<f:RenderField Width="120px" ColumnID="CheckResult" DataField="CheckResult" FieldType="String"
|
||||
HeaderText="检查结果" HeaderTextAlign="Center" TextAlign="Center">
|
||||
</f:RenderField>
|
||||
<f:RenderField Width="140px" ColumnID="ReviewStateText" DataField="ReviewStateText" FieldType="String"
|
||||
HeaderText="专项审核状态" HeaderTextAlign="Center" TextAlign="Center">
|
||||
</f:RenderField>
|
||||
<f:RenderField Width="120px" ColumnID="SpecialReviewerName" DataField="SpecialReviewerName" FieldType="String"
|
||||
HeaderText="专项审核办理人" HeaderTextAlign="Center" TextAlign="Center">
|
||||
</f:RenderField>
|
||||
<f:RenderField Width="180px" ColumnID="CreateTime" DataField="CreateTime" FieldType="Date"
|
||||
RendererArgument="yyyy-MM-dd HH:mm" HeaderText="创建时间" HeaderTextAlign="Center" TextAlign="Center">
|
||||
</f:RenderField>
|
||||
|
||||
@@ -52,6 +52,18 @@
|
||||
</f:CheckBox>
|
||||
</Items>
|
||||
</f:FormRow>
|
||||
<f:FormRow>
|
||||
<Items>
|
||||
<f:DropDownList ID="ddlSpecialReviewer" runat="server" Label="专项审核办理人" LabelWidth="170px" EnableEdit="true">
|
||||
</f:DropDownList>
|
||||
</Items>
|
||||
</f:FormRow>
|
||||
<f:FormRow>
|
||||
<Items>
|
||||
<f:TextArea ID="txtMaterialFeedback" runat="server" Label="两侧主编码反馈" LabelWidth="170px" Enabled="false">
|
||||
</f:TextArea>
|
||||
</Items>
|
||||
</f:FormRow>
|
||||
<f:FormRow>
|
||||
<Items>
|
||||
<f:DropDownList ID="ddlCheckResult" runat="server" Label="检查结果" LabelWidth="170px" Required="true"
|
||||
@@ -107,6 +119,8 @@
|
||||
<f:Button ID="btnSave" Text="保存" Icon="SystemSave" runat="server" ValidateForms="SimpleForm1"
|
||||
OnClick="btnSave_Click">
|
||||
</f:Button>
|
||||
<f:Button ID="btnReview" Text="审核" Icon="SystemSave" runat="server" Hidden="true" OnClick="btnReview_Click">
|
||||
</f:Button>
|
||||
<f:Button ID="btnClose" EnablePostBack="false" Text="关闭" runat="server" Icon="SystemClose">
|
||||
</f:Button>
|
||||
</Items>
|
||||
|
||||
@@ -20,10 +20,12 @@ namespace FineUIPro.Web.HJGL.PreWeld
|
||||
CuttingCheckId = Request.Params["CuttingCheckId"];
|
||||
BindWeldJoint();
|
||||
BindCheckPerson();
|
||||
BindSpecialReviewer();
|
||||
ddlCheckResult.SelectedValue = "合格";
|
||||
if (!string.IsNullOrEmpty(CuttingCheckId))
|
||||
{
|
||||
BindData();
|
||||
btnReview.Hidden = Request.Params["review"] != "1";
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -57,6 +59,14 @@ namespace FineUIPro.Web.HJGL.PreWeld
|
||||
Person_PersonsService.InitUserProjectIdUnitIdRoleIdDropDownList(drpCheckPerson, CurrUser.LoginProjectId, null, null, true);
|
||||
}
|
||||
|
||||
private void BindSpecialReviewer()
|
||||
{
|
||||
ddlSpecialReviewer.DataTextField = "BaseInfoName";
|
||||
ddlSpecialReviewer.DataValueField = "BaseInfoId";
|
||||
ddlSpecialReviewer.DataSource = APIPreWeldInspectionService.GetSpecialReviewers(CurrUser.LoginProjectId);
|
||||
ddlSpecialReviewer.DataBind();
|
||||
}
|
||||
|
||||
private void BindData()
|
||||
{
|
||||
var model = PreWeldInspectionService.GetCuttingCheckById(CuttingCheckId);
|
||||
@@ -83,6 +93,17 @@ namespace FineUIPro.Web.HJGL.PreWeld
|
||||
txtUnqualifiedReason.Text = model.UnqualifiedReason;
|
||||
txtRectifyRequirement.Text = model.RectifyRequirement;
|
||||
txtRemark.Text = model.Remark;
|
||||
if (!string.IsNullOrEmpty(model.SpecialReviewerId))
|
||||
{
|
||||
ddlSpecialReviewer.SelectedValue = model.SpecialReviewerId;
|
||||
}
|
||||
var detail = PreWeldInspectionService.GetCuttingCheckItemsByWeldJointId(model.WeldJointId)
|
||||
.FirstOrDefault(x => x.CuttingCheckId == CuttingCheckId);
|
||||
if (detail != null && detail.Materials != null)
|
||||
{
|
||||
txtMaterialFeedback.Text = string.Join("\r\n", detail.Materials.Select(x => string.Format(
|
||||
"第{0}侧:{1} → {2}", x.MaterialSide, x.OriginalMainCode, x.ReportedMainCode)));
|
||||
}
|
||||
}
|
||||
|
||||
protected void btnSave_Click(object sender, EventArgs e)
|
||||
@@ -109,7 +130,8 @@ namespace FineUIPro.Web.HJGL.PreWeld
|
||||
CreateUser = CurrUser.PersonId,
|
||||
UnqualifiedReason = txtUnqualifiedReason.Text.Trim(),
|
||||
RectifyRequirement = txtRectifyRequirement.Text.Trim(),
|
||||
Remark = txtRemark.Text.Trim()
|
||||
Remark = txtRemark.Text.Trim(),
|
||||
SpecialReviewerId = ddlSpecialReviewer.SelectedValue
|
||||
};
|
||||
|
||||
CuttingCheckId = APIPreWeldInspectionService.SaveCuttingCheck(item);
|
||||
@@ -117,6 +139,19 @@ namespace FineUIPro.Web.HJGL.PreWeld
|
||||
PageContext.RegisterStartupScript(ActiveWindow.GetHideRefreshReference());
|
||||
}
|
||||
|
||||
protected void btnReview_Click(object sender, EventArgs e)
|
||||
{
|
||||
APIPreWeldInspectionService.ReviewCuttingCheck(new Model.PreWeldCuttingCheckReviewInput
|
||||
{
|
||||
CuttingCheckId = CuttingCheckId,
|
||||
ReviewerId = CurrUser.PersonId,
|
||||
ReviewTime = DateTime.Now,
|
||||
Remark = txtRemark.Text.Trim()
|
||||
});
|
||||
ShowNotify("专项审核已完成!", MessageBoxIcon.Success);
|
||||
PageContext.RegisterStartupScript(ActiveWindow.GetHideRefreshReference());
|
||||
}
|
||||
|
||||
protected void btnAttachUrl_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (string.IsNullOrEmpty(CuttingCheckId))
|
||||
|
||||
@@ -95,6 +95,10 @@ namespace FineUIPro.Web.HJGL.PreWeld
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.CheckBox chkMaterialQuantity;
|
||||
|
||||
protected global::FineUIPro.DropDownList ddlSpecialReviewer;
|
||||
|
||||
protected global::FineUIPro.TextArea txtMaterialFeedback;
|
||||
|
||||
/// <summary>
|
||||
/// ddlCheckResult 控件。
|
||||
/// </summary>
|
||||
@@ -176,6 +180,8 @@ namespace FineUIPro.Web.HJGL.PreWeld
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.Button btnSave;
|
||||
|
||||
protected global::FineUIPro.Button btnReview;
|
||||
|
||||
/// <summary>
|
||||
/// btnClose 控件。
|
||||
/// </summary>
|
||||
|
||||
@@ -523,7 +523,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage
|
||||
&& x.PipelineId == item.PipelineId
|
||||
&& x.PrefabricatedComponents == item.PrefabricatedComponents
|
||||
&& x.PipeArea == item.PipeArea
|
||||
&& (string.IsNullOrEmpty(item.MaterialCode) || x.MaterialCode == item.MaterialCode)
|
||||
// && (string.IsNullOrEmpty(item.MaterialCode) || x.MaterialCode == item.MaterialCode)
|
||||
select x;
|
||||
if (pipeLineMat.Count() == 0 || pipeLineMat == null)
|
||||
{
|
||||
@@ -533,12 +533,13 @@ namespace FineUIPro.Web.HJGL.WeldingManage
|
||||
else
|
||||
{
|
||||
var oldPipeLineMat = pipeLineMat.First();
|
||||
item.PipeLineMatId = oldPipeLineMat.PipeLineMatId;
|
||||
if (string.IsNullOrEmpty(item.MaterialCode))
|
||||
oldPipeLineMat.Number=item.Number;
|
||||
oldPipeLineMat.MaterialCode2 = item.MaterialCode2;
|
||||
if (!string.IsNullOrEmpty(item.MaterialCode))
|
||||
{
|
||||
item.MaterialCode = oldPipeLineMat.MaterialCode;
|
||||
oldPipeLineMat.MaterialCode = item.MaterialCode;
|
||||
}
|
||||
BLL.PipelineMatService.UpdatePipeLineMat(item);
|
||||
BLL.PipelineMatService.UpdatePipeLineMat(oldPipeLineMat);
|
||||
}
|
||||
BLL.HJGL_PipelineComponentService.SyncPipelineComponentByMatId(item.PipeLineMatId);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WeldAppearanceCheck.aspx.cs" Inherits="FineUIPro.Web.HJGL.WeldingManage.WeldAppearanceCheck" %>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head runat="server">
|
||||
<title>焊缝外观检测记录</title>
|
||||
<link href="../../res/css/common.css" rel="stylesheet" type="text/css" />
|
||||
<link href="../../res/css/viewer.min.css" rel="stylesheet" />
|
||||
<script src="../../res/js/viewer.min.js" type="text/javascript"></script>
|
||||
<style type="text/css">
|
||||
.img {
|
||||
cursor: zoom-in;
|
||||
object-fit: cover;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<form id="form1" runat="server">
|
||||
<f:PageManager ID="PageManager1" AutoSizePanelID="Panel1" runat="server" />
|
||||
<f:Panel ID="Panel1" runat="server" Margin="5px" BodyPadding="5px" ShowBorder="false"
|
||||
ShowHeader="false" Layout="VBox">
|
||||
<Items>
|
||||
<f:Grid ID="Grid1" runat="server" BoxFlex="1" ShowBorder="true" ShowHeader="false"
|
||||
EnableColumnLines="true" DataKeyNames="AppearanceCheckId" DataIDField="AppearanceCheckId"
|
||||
AllowPaging="true" IsDatabasePaging="true" PageSize="15"
|
||||
OnPageIndexChange="Grid1_PageIndexChange" EnableRowDoubleClickEvent="true"
|
||||
OnRowDoubleClick="Grid1_RowDoubleClick">
|
||||
<Toolbars>
|
||||
<f:Toolbar runat="server">
|
||||
<Items>
|
||||
<f:TextBox ID="txtPipelineCode" runat="server" Label="管线号" Width="250px"
|
||||
LabelWidth="70px" />
|
||||
<f:TextBox ID="txtWeldJointCode" runat="server" Label="焊口号" Width="220px"
|
||||
LabelWidth="70px" />
|
||||
<f:DropDownList ID="ddlQualified" runat="server" Label="是否合格" Width="190px"
|
||||
LabelWidth="80px">
|
||||
<f:ListItem Text="全部" Value="" />
|
||||
<f:ListItem Text="合格" Value="1" />
|
||||
<f:ListItem Text="不合格" Value="0" />
|
||||
</f:DropDownList>
|
||||
<f:Button ID="btnQuery" runat="server" Text="查询" Icon="SystemSearch"
|
||||
OnClick="btnQuery_Click" />
|
||||
<f:ToolbarFill runat="server" />
|
||||
<f:Button ID="btnNew" runat="server" Text="新增" Icon="Add"
|
||||
OnClick="btnNew_Click" />
|
||||
<f:Button ID="btnEdit" runat="server" Text="修改" Icon="Pencil"
|
||||
OnClick="btnEdit_Click" />
|
||||
<f:Button ID="btnDelete" runat="server" Text="删除" Icon="Delete"
|
||||
ConfirmText="确认删除选中的外观检测记录?" OnClick="btnDelete_Click" />
|
||||
</Items>
|
||||
</f:Toolbar>
|
||||
</Toolbars>
|
||||
<Columns>
|
||||
<f:RowNumberField Width="60px" HeaderText="序号" TextAlign="Center" />
|
||||
<f:RenderField Width="220px" DataField="PipelineCode" HeaderText="管线号" />
|
||||
<f:RenderField Width="130px" DataField="WeldJointCode" HeaderText="焊口号" />
|
||||
<f:RenderField Width="100px" DataField="QualifiedText" HeaderText="外观是否合格"
|
||||
TextAlign="Center" />
|
||||
<f:RenderField Width="120px" DataField="CheckPersonName" HeaderText="检测人"
|
||||
TextAlign="Center" />
|
||||
<f:RenderField Width="170px" DataField="CheckTime" FieldType="Date"
|
||||
RendererArgument="yyyy-MM-dd HH:mm" HeaderText="检测时间" TextAlign="Center" />
|
||||
<f:TemplateField ColumnID="AttachUrl" MinWidth="120px" HeaderText="照片"
|
||||
HeaderTextAlign="Center" TextAlign="Center">
|
||||
<ItemTemplate>
|
||||
<asp:Label ID="lbAttachUrl" runat="server"
|
||||
Text='<%# ConvertImageUrlByImage(Eval("AttachUrl")) %>'></asp:Label>
|
||||
</ItemTemplate>
|
||||
</f:TemplateField>
|
||||
<f:RenderField Width="300px" DataField="Remark" HeaderText="备注" />
|
||||
</Columns>
|
||||
</f:Grid>
|
||||
</Items>
|
||||
</f:Panel>
|
||||
<f:Window ID="Window1" Title="焊缝外观检测" Hidden="true" EnableIFrame="true"
|
||||
EnableMaximize="true" Target="Top" runat="server" OnClose="Window1_Close" IsModal="true"
|
||||
Width="760px" Height="560px" />
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
var gridImageSelector = '#<%= Grid1.ClientID %> img.img';
|
||||
|
||||
F.ready(function () {
|
||||
$(document).off('click.weldappearance', gridImageSelector)
|
||||
.on('click.weldappearance', gridImageSelector, function () {
|
||||
var imageUrl = $(this).attr('src');
|
||||
if (!imageUrl) {
|
||||
return;
|
||||
}
|
||||
|
||||
var container = document.createElement('div');
|
||||
var image = document.createElement('img');
|
||||
container.style.display = 'none';
|
||||
image.src = imageUrl;
|
||||
container.appendChild(image);
|
||||
document.body.appendChild(container);
|
||||
|
||||
var viewer = new Viewer(image);
|
||||
viewer.show();
|
||||
viewer.on('hidden', function () {
|
||||
document.body.removeChild(container);
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,85 @@
|
||||
using BLL;
|
||||
using System;
|
||||
using System.Web;
|
||||
|
||||
namespace FineUIPro.Web.HJGL.WeldingManage
|
||||
{
|
||||
public partial class WeldAppearanceCheck : PageBase
|
||||
{
|
||||
protected void Page_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (!IsPostBack) BindGrid();
|
||||
}
|
||||
|
||||
private void BindGrid()
|
||||
{
|
||||
var result = WeldAppearanceCheckService.GetList(CurrUser.LoginProjectId, txtPipelineCode.Text.Trim(),
|
||||
txtWeldJointCode.Text.Trim(), ddlQualified.SelectedValue, Grid1.PageIndex, Grid1.PageSize);
|
||||
Grid1.RecordCount = result.Item2;
|
||||
Grid1.DataSource = result.Item1;
|
||||
Grid1.DataBind();
|
||||
}
|
||||
|
||||
protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e) { Grid1.PageIndex = e.NewPageIndex; BindGrid(); }
|
||||
protected void btnQuery_Click(object sender, EventArgs e) { Grid1.PageIndex = 0; BindGrid(); }
|
||||
protected void Window1_Close(object sender, WindowCloseEventArgs e) { BindGrid(); }
|
||||
|
||||
/// <summary>
|
||||
/// 将附件地址转换为列表缩略图。
|
||||
/// </summary>
|
||||
/// <param name="photoUrl">以逗号分隔的照片地址。</param>
|
||||
/// <returns>照片缩略图HTML。</returns>
|
||||
protected string ConvertImageUrlByImage(object photoUrl)
|
||||
{
|
||||
if (photoUrl == null || string.IsNullOrWhiteSpace(photoUrl.ToString()))
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
string html = "<table cellpadding='5' cellspacing='5' style=\"width: 100%\">";
|
||||
foreach (string item in photoUrl.ToString().Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries))
|
||||
{
|
||||
string imageUrl = "../../" + item.Trim().Replace('\\', '/');
|
||||
html += "<tr><td align='center'><img class='img' width='100' height='100' src='"
|
||||
+ HttpUtility.HtmlAttributeEncode(imageUrl) + "' alt='外观检测照片' /></td></tr>";
|
||||
}
|
||||
return html + "</table>";
|
||||
}
|
||||
|
||||
protected void btnNew_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (HasPower(Const.BtnAdd)) PageContext.RegisterStartupScript(Window1.GetShowReference("WeldAppearanceCheckEdit.aspx"));
|
||||
}
|
||||
|
||||
protected void btnEdit_Click(object sender, EventArgs e) { OpenSelectedRecord(); }
|
||||
protected void Grid1_RowDoubleClick(object sender, GridRowClickEventArgs e) { OpenSelectedRecord(); }
|
||||
|
||||
protected void btnDelete_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (!EnsureSelected() || !HasPower(Const.BtnDelete)) return;
|
||||
WeldAppearanceCheckService.Delete(Grid1.SelectedRowID);
|
||||
BindGrid();
|
||||
}
|
||||
|
||||
private void OpenSelectedRecord()
|
||||
{
|
||||
if (!EnsureSelected() || !HasPower(Const.BtnModify)) return;
|
||||
PageContext.RegisterStartupScript(Window1.GetShowReference("WeldAppearanceCheckEdit.aspx?AppearanceCheckId=" + Grid1.SelectedRowID));
|
||||
}
|
||||
|
||||
private bool EnsureSelected()
|
||||
{
|
||||
if (Grid1.SelectedRowIndexArray.Length > 0) return true;
|
||||
Alert.ShowInTop("请选择一条记录!", MessageBoxIcon.Warning);
|
||||
return false;
|
||||
}
|
||||
|
||||
private bool HasPower(string button)
|
||||
{
|
||||
bool hasPower = CommonService.GetAllButtonPowerList(CurrUser.LoginProjectId, CurrUser.PersonId,
|
||||
Const.HJGL_WeldAppearanceCheckMenuId, button);
|
||||
if (!hasPower) Alert.ShowInTop("您没有这个权限,请与管理员联系!", MessageBoxIcon.Warning);
|
||||
return hasPower;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <自动生成>
|
||||
// 此代码由工具生成。
|
||||
//
|
||||
// 对此文件的更改可能导致不正确的行为,如果
|
||||
// 重新生成代码,则所做更改将丢失。
|
||||
// </自动生成>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace FineUIPro.Web.HJGL.WeldingManage
|
||||
{
|
||||
|
||||
|
||||
public partial class WeldAppearanceCheck
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// form1 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
|
||||
|
||||
/// <summary>
|
||||
/// PageManager1 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.PageManager PageManager1;
|
||||
|
||||
/// <summary>
|
||||
/// Panel1 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.Panel Panel1;
|
||||
|
||||
/// <summary>
|
||||
/// Grid1 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.Grid Grid1;
|
||||
|
||||
/// <summary>
|
||||
/// txtPipelineCode 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.TextBox txtPipelineCode;
|
||||
|
||||
/// <summary>
|
||||
/// txtWeldJointCode 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.TextBox txtWeldJointCode;
|
||||
|
||||
/// <summary>
|
||||
/// ddlQualified 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.DropDownList ddlQualified;
|
||||
|
||||
/// <summary>
|
||||
/// btnQuery 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.Button btnQuery;
|
||||
|
||||
/// <summary>
|
||||
/// btnNew 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.Button btnNew;
|
||||
|
||||
/// <summary>
|
||||
/// btnEdit 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.Button btnEdit;
|
||||
|
||||
/// <summary>
|
||||
/// btnDelete 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.Button btnDelete;
|
||||
|
||||
/// <summary>
|
||||
/// lbAttachUrl 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Label lbAttachUrl;
|
||||
|
||||
/// <summary>
|
||||
/// Window1 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.Window Window1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WeldAppearanceCheckEdit.aspx.cs" Inherits="FineUIPro.Web.HJGL.WeldingManage.WeldAppearanceCheckEdit" %>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head runat="server">
|
||||
<title>编辑焊缝外观检测</title>
|
||||
<base target="_self" />
|
||||
<link href="../../res/css/common.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<form id="form1" runat="server">
|
||||
<f:PageManager ID="PageManager1" AutoSizePanelID="SimpleForm1" runat="server" />
|
||||
<f:Form ID="SimpleForm1" ShowBorder="false" ShowHeader="false" AutoScroll="true"
|
||||
BodyPadding="10px" runat="server" RedStarPosition="BeforeText">
|
||||
<Rows>
|
||||
<f:FormRow>
|
||||
<Items>
|
||||
<f:DropDownList ID="ddlWeldJoint" runat="server" Label="已焊接焊口" Required="true"
|
||||
ShowRedStar="true" EnableEdit="true" LabelWidth="130px" />
|
||||
</Items>
|
||||
</f:FormRow>
|
||||
<f:FormRow>
|
||||
<Items>
|
||||
<f:DropDownList ID="ddlQualified" runat="server" Label="外观是否合格" Required="true"
|
||||
ShowRedStar="true" LabelWidth="130px">
|
||||
<f:ListItem Text="合格" Value="1" />
|
||||
<f:ListItem Text="不合格" Value="0" />
|
||||
</f:DropDownList>
|
||||
</Items>
|
||||
</f:FormRow>
|
||||
<f:FormRow>
|
||||
<Items>
|
||||
<f:DropDownList ID="ddlCheckPerson" runat="server" Label="检测人" Required="true"
|
||||
ShowRedStar="true" EnableEdit="true" LabelWidth="130px" />
|
||||
</Items>
|
||||
</f:FormRow>
|
||||
<f:FormRow>
|
||||
<Items>
|
||||
<f:DatePicker ID="dpCheckTime" runat="server" Label="检测时间" Required="true"
|
||||
ShowRedStar="true" LabelWidth="130px" />
|
||||
</Items>
|
||||
</f:FormRow>
|
||||
<f:FormRow>
|
||||
<Items>
|
||||
<f:TextArea ID="txtRemark" runat="server" Label="备注" MaxLength="500"
|
||||
LabelWidth="130px" />
|
||||
</Items>
|
||||
</f:FormRow>
|
||||
<f:FormRow>
|
||||
<Items>
|
||||
<f:Button ID="btnAttach" runat="server" Text="上传/查看照片(必填)" Icon="TableCell"
|
||||
OnClick="btnAttach_Click" />
|
||||
</Items>
|
||||
</f:FormRow>
|
||||
</Rows>
|
||||
<Toolbars>
|
||||
<f:Toolbar runat="server" Position="Bottom" ToolbarAlign="Right">
|
||||
<Items>
|
||||
<f:Button ID="btnSave" runat="server" Text="保存" Icon="SystemSave"
|
||||
ValidateForms="SimpleForm1" OnClick="btnSave_Click" />
|
||||
<f:Button ID="btnClose" runat="server" Text="关闭" Icon="SystemClose"
|
||||
EnablePostBack="false" />
|
||||
</Items>
|
||||
</f:Toolbar>
|
||||
</Toolbars>
|
||||
</f:Form>
|
||||
<f:Window ID="WindowAtt" Title="外观检测照片" Hidden="true" EnableIFrame="true"
|
||||
EnableMaximize="true" Target="Parent" runat="server" IsModal="true" Width="720px"
|
||||
Height="440px" />
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,85 @@
|
||||
using BLL;
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
namespace FineUIPro.Web.HJGL.WeldingManage
|
||||
{
|
||||
public partial class WeldAppearanceCheckEdit : PageBase
|
||||
{
|
||||
private string AppearanceCheckId
|
||||
{
|
||||
get { return (string)ViewState["AppearanceCheckId"]; }
|
||||
set { ViewState["AppearanceCheckId"] = value; }
|
||||
}
|
||||
|
||||
protected void Page_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (IsPostBack) return;
|
||||
btnClose.OnClientClick = ActiveWindow.GetHideReference();
|
||||
AppearanceCheckId = Request.Params["AppearanceCheckId"] ?? Guid.NewGuid().ToString();
|
||||
BindWeldJoints();
|
||||
Person_PersonsService.InitUserProjectIdUnitIdRoleIdDropDownList(ddlCheckPerson, CurrUser.LoginProjectId, null, null, true);
|
||||
var model = WeldAppearanceCheckService.GetById(AppearanceCheckId);
|
||||
if (model == null)
|
||||
{
|
||||
ddlQualified.SelectedValue = "1";
|
||||
ddlCheckPerson.SelectedValue = CurrUser.PersonId;
|
||||
dpCheckTime.SelectedDate = DateTime.Now;
|
||||
return;
|
||||
}
|
||||
ddlWeldJoint.SelectedValue = model.WeldJointId;
|
||||
ddlQualified.SelectedValue = model.IsQualified ? "1" : "0";
|
||||
ddlCheckPerson.SelectedValue = model.CheckPerson;
|
||||
dpCheckTime.SelectedDate = model.CheckTime;
|
||||
txtRemark.Text = model.Remark;
|
||||
}
|
||||
|
||||
private void BindWeldJoints()
|
||||
{
|
||||
var data = WeldAppearanceCheckService.GetWeldedJoints(CurrUser.LoginProjectId, null, null, 0, 10000)
|
||||
.Select(x => new { x.WeldJointId, Name = x.PipelineCode + " / " + x.WeldJointCode }).ToList();
|
||||
ddlWeldJoint.DataTextField = "Name";
|
||||
ddlWeldJoint.DataValueField = "WeldJointId";
|
||||
ddlWeldJoint.DataSource = data;
|
||||
ddlWeldJoint.DataBind();
|
||||
}
|
||||
|
||||
protected void btnSave_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (!CommonService.GetAllButtonPowerList(CurrUser.LoginProjectId, CurrUser.PersonId,
|
||||
Const.HJGL_WeldAppearanceCheckMenuId, Const.BtnSave))
|
||||
{
|
||||
Alert.ShowInTop("您没有这个权限,请与管理员联系!", MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
WeldAppearanceCheckService.Save(new Model.WeldAppearanceCheckInput
|
||||
{
|
||||
AppearanceCheckId = AppearanceCheckId,
|
||||
ProjectId = CurrUser.LoginProjectId,
|
||||
WeldJointId = ddlWeldJoint.SelectedValue,
|
||||
IsQualified = ddlQualified.SelectedValue == "1",
|
||||
CheckPerson = ddlCheckPerson.SelectedValue,
|
||||
CheckTime = dpCheckTime.SelectedDate,
|
||||
Remark = txtRemark.Text.Trim(),
|
||||
CreateUser = CurrUser.PersonId
|
||||
});
|
||||
ShowNotify("保存成功!", MessageBoxIcon.Success);
|
||||
PageContext.RegisterStartupScript(ActiveWindow.GetHideRefreshReference());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Alert.ShowInTop(ex.Message, MessageBoxIcon.Warning);
|
||||
}
|
||||
}
|
||||
|
||||
protected void btnAttach_Click(object sender, EventArgs e)
|
||||
{
|
||||
PageContext.RegisterStartupScript(WindowAtt.GetShowReference(string.Format(
|
||||
"../../AttachFile/webuploader.aspx?toKeyId={0}&path=FileUpload/HJGL/WeldingManage/WeldAppearanceCheck&menuId={1}&edit=1",
|
||||
AppearanceCheckId, Const.HJGL_WeldAppearanceCheckMenuId)));
|
||||
}
|
||||
}
|
||||
}
|
||||
+125
@@ -0,0 +1,125 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <自动生成>
|
||||
// 此代码由工具生成。
|
||||
//
|
||||
// 对此文件的更改可能导致不正确的行为,如果
|
||||
// 重新生成代码,则所做更改将丢失。
|
||||
// </自动生成>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace FineUIPro.Web.HJGL.WeldingManage
|
||||
{
|
||||
|
||||
|
||||
public partial class WeldAppearanceCheckEdit
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// form1 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
|
||||
|
||||
/// <summary>
|
||||
/// PageManager1 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.PageManager PageManager1;
|
||||
|
||||
/// <summary>
|
||||
/// SimpleForm1 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.Form SimpleForm1;
|
||||
|
||||
/// <summary>
|
||||
/// ddlWeldJoint 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.DropDownList ddlWeldJoint;
|
||||
|
||||
/// <summary>
|
||||
/// ddlQualified 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.DropDownList ddlQualified;
|
||||
|
||||
/// <summary>
|
||||
/// ddlCheckPerson 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.DropDownList ddlCheckPerson;
|
||||
|
||||
/// <summary>
|
||||
/// dpCheckTime 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.DatePicker dpCheckTime;
|
||||
|
||||
/// <summary>
|
||||
/// txtRemark 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.TextArea txtRemark;
|
||||
|
||||
/// <summary>
|
||||
/// btnAttach 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.Button btnAttach;
|
||||
|
||||
/// <summary>
|
||||
/// btnSave 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.Button btnSave;
|
||||
|
||||
/// <summary>
|
||||
/// btnClose 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.Button btnClose;
|
||||
|
||||
/// <summary>
|
||||
/// WindowAtt 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.Window WindowAtt;
|
||||
}
|
||||
}
|
||||
@@ -91,7 +91,7 @@
|
||||
</f:Button>
|
||||
<f:Button ID="btnStatisticsMat" ToolTip="匹配材料" Icon="TabGo" runat="server" OnClick="btnStatisticsMat_Click" Hidden="true">
|
||||
</f:Button>
|
||||
<f:Button ID="btnExportPartialComponents" Text="导出部分已焊组件" ToolTip="按当前区域导出所选单位工程的部分已焊组件"
|
||||
<f:Button ID="btnExportPartialComponents" Text="导出全部组件" ToolTip="按当前区域导出所选单位工程的全部组件"
|
||||
Icon="TableGo" runat="server" OnClick="btnExportPartialComponents_Click" EnableAjax="false"
|
||||
DisableControlBeforePostBack="true" EnablePostBack="true">
|
||||
</f:Button>
|
||||
|
||||
@@ -728,7 +728,7 @@ namespace FineUIPro.Web.HJGL.WeldingManage
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 按当前材料区域导出所选单位工程下全部部分已焊接组件。
|
||||
/// 按当前材料区域导出所选单位工程下全部组件。
|
||||
/// </summary>
|
||||
protected void btnExportPartialComponents_Click(object sender, EventArgs e)
|
||||
{
|
||||
@@ -748,24 +748,40 @@ namespace FineUIPro.Web.HJGL.WeldingManage
|
||||
drpWarehouse.SelectedValue);
|
||||
if (!components.Any())
|
||||
{
|
||||
ShowNotify("当前单位工程和区域下没有部分已焊接组件!", MessageBoxIcon.Warning);
|
||||
ShowNotify("当前单位工程和区域下没有可导出的组件!", MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
var exportData = components.Select(x => new
|
||||
// 列顺序保持未焊口数后追加未焊达因量、材料编码、数量,便于后续导入使用;每个材料编码单独导出一行。
|
||||
var exportData = components.SelectMany(x =>
|
||||
{
|
||||
单位工程 = x.UnitWorkName,
|
||||
区域 = x.PipeAreaText,
|
||||
管线号 = x.PipelineCode,
|
||||
预制组件号 = x.PrefabricatedComponents,
|
||||
总焊口数 = x.TotalWeldJointCount,
|
||||
已焊口数 = x.WeldedWeldJointCount,
|
||||
未焊口数 = x.UnweldedWeldJointCount,
|
||||
组件匹配率 = x.ComponentMatchRateString
|
||||
List<string> materialCodes = SplitExportValues(x.MaterialCode);
|
||||
List<string> materialQuantities = SplitExportValues(x.MaterialQuantity);
|
||||
int materialRowCount = Math.Max(materialCodes.Count, materialQuantities.Count);
|
||||
if (materialRowCount == 0)
|
||||
{
|
||||
materialRowCount = 1;
|
||||
}
|
||||
|
||||
return Enumerable.Range(0, materialRowCount).Select(index => new
|
||||
{
|
||||
单位工程 = x.UnitWorkName,
|
||||
区域 = x.PipeAreaText,
|
||||
管线号 = x.PipelineCode,
|
||||
预制组件号 = x.PrefabricatedComponents,
|
||||
总焊口数 = x.TotalWeldJointCount,
|
||||
已焊口数 = x.WeldedWeldJointCount,
|
||||
未焊口数 = x.UnweldedWeldJointCount,
|
||||
未焊达因量 = x.UnweldedDin ?? 0,
|
||||
材料编码 = index < materialCodes.Count ? materialCodes[index] : string.Empty,
|
||||
数量 = index < materialQuantities.Count ? materialQuantities[index] : string.Empty,
|
||||
组件匹配率 = x.ComponentMatchRateString,
|
||||
组件状态 = GetComponentStatus(x.TotalWeldJointCount, x.UnweldedWeldJointCount)
|
||||
});
|
||||
}).ToList();
|
||||
|
||||
string areaText = PipeArea == PipelineService.PipeArea_SHOP ? "工厂预制" : "现场安装";
|
||||
string fileName = GetSafeFileName(unitWork.UnitWorkName) + "_" + areaText + "_部分已焊组件_" + DateTime.Now.ToString("yyyyMMdd") + ".xlsx";
|
||||
string fileName = GetSafeFileName(unitWork.UnitWorkName) + "_" + areaText + "_全部组件_" + DateTime.Now.ToString("yyyyMMdd") + ".xlsx";
|
||||
string tempDirectory = Path.Combine(Funs.RootPath, @"File\Excel\Temp");
|
||||
Directory.CreateDirectory(tempDirectory);
|
||||
string filePath = Path.Combine(tempDirectory, Guid.NewGuid().ToString("N") + ".xlsx");
|
||||
@@ -794,6 +810,29 @@ namespace FineUIPro.Web.HJGL.WeldingManage
|
||||
return safeFileName;
|
||||
}
|
||||
|
||||
private static List<string> SplitExportValues(string values)
|
||||
{
|
||||
return string.IsNullOrEmpty(values)
|
||||
? new List<string>()
|
||||
: values.Split(new[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries)
|
||||
.Select(x => x.Trim())
|
||||
.ToList();
|
||||
}
|
||||
|
||||
private static string GetComponentStatus(int totalWeldJointCount, int unweldedWeldJointCount)
|
||||
{
|
||||
// 以总焊口数和未焊口数判断组件进度:全部未焊为未开始、无未焊口为已完成,其余为进行中。
|
||||
if (unweldedWeldJointCount == totalWeldJointCount)
|
||||
{
|
||||
return "未开始";
|
||||
}
|
||||
if (unweldedWeldJointCount == 0)
|
||||
{
|
||||
return "已完成";
|
||||
}
|
||||
return "进行中";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 按树节点获取可加入本次匹配的管线。单位工程节点会展开到其下所有试压包,再套用当前仓库和页面筛选条件。
|
||||
/// </summary>
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
<TreeNode id="D1B5A8B7-5D2A-4C51-9B7E-6A2F15B7F002" Text="管道下料检查记录" NavigateUrl="HJGL/PreWeld/CuttingCheck.aspx"></TreeNode>
|
||||
<TreeNode id="D1B5A8B7-5D2A-4C51-9B7E-6A2F15B7F003" Text="组对检查记录" NavigateUrl="HJGL/PreWeld/FitupCheck.aspx"></TreeNode>
|
||||
<TreeNode id="5TYHMD2F-2582-4DEB-905E-6E9DCFEFBGHO" Text="焊接日报" NavigateUrl="HJGL/WeldingManage/WeldReport.aspx"></TreeNode>
|
||||
<TreeNode id="A4C8F8A1-1A27-4B63-A6DF-3F8AAE67C901" Text="焊缝外观检测记录" NavigateUrl="HJGL/WeldingManage/WeldAppearanceCheck.aspx"></TreeNode>
|
||||
</TreeNode>
|
||||
<TreeNode id="3363C60A-E1ED-445B-BC93-DF2BE04D9759" Text="无损检测管理" NavigateUrl=""><TreeNode id="3ACE25CE-C5CE-4CEC-AD27-0D5CF1DF2F01" Text="点口管理" NavigateUrl="HJGL/PointTrust/PointBatch.aspx"></TreeNode>
|
||||
<TreeNode id="0CA58EC2-7934-49B3-A2C3-327FAD27C541" Text="无损检测委托单" NavigateUrl="HJGL/PointTrust/TrustBatch.aspx"></TreeNode>
|
||||
|
||||
@@ -108,6 +108,16 @@
|
||||
/// </summary>
|
||||
public int welderType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 焊接方法ID;兼容旧版小程序,可不传
|
||||
/// </summary>
|
||||
public string WeldingMethodId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 焊缝类型ID;兼容旧版小程序,可不传
|
||||
/// </summary>
|
||||
public string WeldTypeId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 焊前附件路径
|
||||
/// </summary>
|
||||
|
||||
@@ -102,6 +102,20 @@ namespace Model
|
||||
/// </summary>
|
||||
public class PreWeldMaterialItem
|
||||
{
|
||||
/// <summary>
|
||||
/// 管线材料ID
|
||||
/// </summary>
|
||||
public string PipeLineMatId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 焊口侧序号
|
||||
/// </summary>
|
||||
public int MaterialSide { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 材料主编码
|
||||
/// </summary>
|
||||
public string MainCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 材料编码
|
||||
@@ -221,6 +235,16 @@ namespace Model
|
||||
/// 备注
|
||||
/// </summary>
|
||||
public string Remark { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 专项审核办理人;材料编码或批次不准确时必填
|
||||
/// </summary>
|
||||
public string SpecialReviewerId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 两侧材料主编码反馈
|
||||
/// </summary>
|
||||
public List<PreWeldCuttingMaterialInput> Materials { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -332,6 +356,37 @@ namespace Model
|
||||
/// 备注
|
||||
/// </summary>
|
||||
public string Remark { get; set; }
|
||||
|
||||
public int ReviewState { get; set; }
|
||||
public string ReviewStateText { get; set; }
|
||||
public string SpecialReviewerId { get; set; }
|
||||
public string SpecialReviewerName { get; set; }
|
||||
public string ReviewerId { get; set; }
|
||||
public string ReviewerName { get; set; }
|
||||
public DateTime? ReviewTime { get; set; }
|
||||
public List<PreWeldCuttingMaterialItem> Materials { get; set; }
|
||||
}
|
||||
|
||||
public class PreWeldCuttingMaterialInput
|
||||
{
|
||||
public string PipeLineMatId { get; set; }
|
||||
public int MaterialSide { get; set; }
|
||||
public string ReportedMainCode { get; set; }
|
||||
}
|
||||
|
||||
public class PreWeldCuttingMaterialItem : PreWeldCuttingMaterialInput
|
||||
{
|
||||
public string OriginalMainCode { get; set; }
|
||||
public bool IsBatchChanged { get; set; }
|
||||
}
|
||||
|
||||
public class PreWeldCuttingCheckReviewInput
|
||||
{
|
||||
public string CuttingCheckId { get; set; }
|
||||
public string ReviewerId { get; set; }
|
||||
public DateTime? ReviewTime { get; set; }
|
||||
public string Remark { get; set; }
|
||||
public List<PreWeldCuttingMaterialInput> Materials { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Model
|
||||
{
|
||||
public class WeldAppearanceCheckInput
|
||||
{
|
||||
public string AppearanceCheckId { get; set; }
|
||||
public string ProjectId { get; set; }
|
||||
public string WeldJointId { get; set; }
|
||||
public bool IsQualified { get; set; }
|
||||
public string CheckPerson { get; set; }
|
||||
public DateTime? CheckTime { get; set; }
|
||||
public string Remark { get; set; }
|
||||
public string AttachUrl { get; set; }
|
||||
public string CreateUser { get; set; }
|
||||
}
|
||||
|
||||
public class WeldAppearanceCheckItem
|
||||
{
|
||||
public string AppearanceCheckId { get; set; }
|
||||
public string ProjectId { get; set; }
|
||||
public string WeldJointId { get; set; }
|
||||
public string PipelineCode { get; set; }
|
||||
public string WeldJointCode { get; set; }
|
||||
public bool IsQualified { get; set; }
|
||||
public string QualifiedText { get; set; }
|
||||
public string CheckPerson { get; set; }
|
||||
public string CheckPersonName { get; set; }
|
||||
public DateTime CheckTime { get; set; }
|
||||
public string Remark { get; set; }
|
||||
public string AttachUrl { get; set; }
|
||||
public DateTime CreateTime { get; set; }
|
||||
}
|
||||
|
||||
public class WeldAppearanceJointItem
|
||||
{
|
||||
public string WeldJointId { get; set; }
|
||||
public string ProjectId { get; set; }
|
||||
public string PipelineCode { get; set; }
|
||||
public string WeldJointCode { get; set; }
|
||||
public string WeldTypeCode { get; set; }
|
||||
public string WeldingMethodCode { get; set; }
|
||||
public DateTime? WeldingDate { get; set; }
|
||||
public List<WeldAppearanceCheckItem> History { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -19,6 +19,7 @@ namespace Model
|
||||
public decimal StockNum { get; set; }
|
||||
public decimal NeedNum { get; set; }
|
||||
public decimal RealNum { get; set; }
|
||||
public decimal OutputNum { get; set; }
|
||||
public decimal MatchRate { get; set; }
|
||||
public string MatchRateString { get; set; }
|
||||
}
|
||||
|
||||
@@ -52,7 +52,7 @@ namespace Model
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 单位工程下部分已焊接组件的导出汇总。
|
||||
/// 单位工程下组件导出汇总。
|
||||
/// </summary>
|
||||
public class Tw_PartialWeldedComponentOutput
|
||||
{
|
||||
@@ -66,6 +66,12 @@ namespace Model
|
||||
public int TotalWeldJointCount { get; set; }
|
||||
public int WeldedWeldJointCount { get; set; }
|
||||
public int UnweldedWeldJointCount { get; set; }
|
||||
/// <summary>未焊焊口的达因量。</summary>
|
||||
public decimal? UnweldedDin { get; set; }
|
||||
/// <summary>组件材料编码,多个编码使用换行分隔。</summary>
|
||||
public string MaterialCode { get; set; }
|
||||
/// <summary>与材料编码按顺序对应的组件材料数量。</summary>
|
||||
public string MaterialQuantity { get; set; }
|
||||
public decimal? ComponentMatchRate { get; set; }
|
||||
public string ComponentMatchRateString { get; set; }
|
||||
}
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
using System;
|
||||
using System.Data.Linq;
|
||||
using System.Data.Linq.Mapping;
|
||||
|
||||
namespace Model
|
||||
{
|
||||
public partial class SGGLDB
|
||||
{
|
||||
public Table<HJGL_PreWeldCuttingCheckMaterial> HJGL_PreWeldCuttingCheckMaterial
|
||||
{
|
||||
get { return GetTable<HJGL_PreWeldCuttingCheckMaterial>(); }
|
||||
}
|
||||
|
||||
public Table<HJGL_WeldAppearanceCheck> HJGL_WeldAppearanceCheck
|
||||
{
|
||||
get { return GetTable<HJGL_WeldAppearanceCheck>(); }
|
||||
}
|
||||
}
|
||||
|
||||
public partial class HJGL_PreWeldCuttingCheck
|
||||
{
|
||||
[Column(DbType = "Int NOT NULL")]
|
||||
public int ReviewState { get; set; }
|
||||
|
||||
[Column(DbType = "NVarChar(50)")]
|
||||
public string SpecialReviewerId { get; set; }
|
||||
|
||||
[Column(DbType = "NVarChar(50)")]
|
||||
public string ReviewerId { get; set; }
|
||||
|
||||
[Column(DbType = "DateTime")]
|
||||
public DateTime? ReviewTime { get; set; }
|
||||
}
|
||||
|
||||
[Table(Name = "dbo.HJGL_PreWeldCuttingCheckMaterial")]
|
||||
public class HJGL_PreWeldCuttingCheckMaterial
|
||||
{
|
||||
[Column(IsPrimaryKey = true, CanBeNull = false, DbType = "NVarChar(50) NOT NULL")]
|
||||
public string CuttingCheckMaterialId { get; set; }
|
||||
|
||||
[Column(CanBeNull = false, DbType = "NVarChar(50) NOT NULL")]
|
||||
public string CuttingCheckId { get; set; }
|
||||
|
||||
[Column(CanBeNull = false, DbType = "NVarChar(50) NOT NULL")]
|
||||
public string PipeLineMatId { get; set; }
|
||||
|
||||
[Column(DbType = "Int NOT NULL")]
|
||||
public int MaterialSide { get; set; }
|
||||
|
||||
[Column(DbType = "NVarChar(100)")]
|
||||
public string OriginalMainCode { get; set; }
|
||||
|
||||
[Column(DbType = "NVarChar(100)")]
|
||||
public string ReportedMainCode { get; set; }
|
||||
|
||||
[Column(DbType = "Bit NOT NULL")]
|
||||
public bool IsBatchChanged { get; set; }
|
||||
}
|
||||
|
||||
[Table(Name = "dbo.HJGL_WeldAppearanceCheck")]
|
||||
public class HJGL_WeldAppearanceCheck
|
||||
{
|
||||
[Column(IsPrimaryKey = true, CanBeNull = false, DbType = "NVarChar(50) NOT NULL")]
|
||||
public string AppearanceCheckId { get; set; }
|
||||
|
||||
[Column(CanBeNull = false, DbType = "NVarChar(50) NOT NULL")]
|
||||
public string ProjectId { get; set; }
|
||||
|
||||
[Column(CanBeNull = false, DbType = "NVarChar(50) NOT NULL")]
|
||||
public string WeldJointId { get; set; }
|
||||
|
||||
[Column(DbType = "Bit NOT NULL")]
|
||||
public bool IsQualified { get; set; }
|
||||
|
||||
[Column(CanBeNull = false, DbType = "NVarChar(50) NOT NULL")]
|
||||
public string CheckPerson { get; set; }
|
||||
|
||||
[Column(DbType = "DateTime NOT NULL")]
|
||||
public DateTime CheckTime { get; set; }
|
||||
|
||||
[Column(DbType = "NVarChar(500)")]
|
||||
public string Remark { get; set; }
|
||||
|
||||
[Column(DbType = "NVarChar(50)")]
|
||||
public string CreateUser { get; set; }
|
||||
|
||||
[Column(DbType = "DateTime NOT NULL")]
|
||||
public DateTime CreateTime { get; set; }
|
||||
|
||||
[Column(DbType = "NVarChar(50)")]
|
||||
public string ModifyUser { get; set; }
|
||||
|
||||
[Column(DbType = "DateTime")]
|
||||
public DateTime? ModifyTime { get; set; }
|
||||
}
|
||||
|
||||
public partial class View_HJGL_WeldJoint
|
||||
{
|
||||
[Column(DbType = "Bit")]
|
||||
public bool? WeldAppearanceIsQualified { get; set; }
|
||||
|
||||
[Column(DbType = "NVarChar(10) NOT NULL", CanBeNull = false)]
|
||||
public string WeldAppearanceResult { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -128,6 +128,7 @@
|
||||
<Compile Include="APIItem\HSSE\HazardRegisterItem.cs" />
|
||||
<Compile Include="APIItem\HJGL\HJGL_PreWeldingDailyItem.cs" />
|
||||
<Compile Include="APIItem\HJGL\PreWeldInspectionItem.cs" />
|
||||
<Compile Include="APIItem\HJGL\WeldAppearanceCheckItem.cs" />
|
||||
<Compile Include="APIItem\HJGL\ViewHJGLWeldJointExtend.cs" />
|
||||
<Compile Include="APIItem\HJGL\HotProcessHardItem.cs" />
|
||||
<Compile Include="APIItem\HJGL\NDETrustItem.cs" />
|
||||
@@ -280,6 +281,7 @@
|
||||
<Compile Include="HSSE\PuPayCraftAmountInput.cs" />
|
||||
<Compile Include="HSSE\WorkPostStatisticItem.cs" />
|
||||
<Compile Include="HSSE\HSSE_HazardTemplate.cs" />
|
||||
<Compile Include="HJGL\HJGLQualityExtensions.cs" />
|
||||
<Compile Include="Model.cs" />
|
||||
<Compile Include="ModelProc.cs" />
|
||||
<Compile Include="Num.cs" />
|
||||
|
||||
@@ -47,5 +47,42 @@ namespace WebAPI.Controllers.HJGL.WeldingManage
|
||||
|
||||
return responeData;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前项目可选择的专项审核办理人。
|
||||
/// </summary>
|
||||
public Model.ResponeData GetSpecialReviewers(string projectId)
|
||||
{
|
||||
var responeData = new Model.ResponeData();
|
||||
try
|
||||
{
|
||||
responeData.data = APIPreWeldInspectionService.GetSpecialReviewers(projectId);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
responeData.code = 0;
|
||||
responeData.message = ex.Message;
|
||||
}
|
||||
return responeData;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 办结下料抽检专项审核。
|
||||
/// </summary>
|
||||
[HttpPost]
|
||||
public Model.ResponeData ReviewRecord([FromBody] Model.PreWeldCuttingCheckReviewInput item)
|
||||
{
|
||||
var responeData = new Model.ResponeData();
|
||||
try
|
||||
{
|
||||
responeData.data = APIPreWeldInspectionService.ReviewCuttingCheck(item);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
responeData.code = 0;
|
||||
responeData.message = ex.Message;
|
||||
}
|
||||
return responeData;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
using BLL;
|
||||
using System;
|
||||
using System.Web.Http;
|
||||
|
||||
namespace WebAPI.Controllers.HJGL.WeldingManage
|
||||
{
|
||||
/// <summary>
|
||||
/// 焊缝外观检测接口。
|
||||
/// </summary>
|
||||
public class WeldAppearanceCheckController : ApiController
|
||||
{
|
||||
/// <summary>
|
||||
/// 分页查询当前项目中已焊接的焊口。
|
||||
/// </summary>
|
||||
/// <param name="projectId">项目ID。</param>
|
||||
/// <param name="pipelineCode">管线号查询条件。</param>
|
||||
/// <param name="weldJointCode">焊口号查询条件。</param>
|
||||
/// <param name="pageIndex">页码,从0开始。</param>
|
||||
/// <param name="pageSize">每页记录数。</param>
|
||||
/// <returns>已焊接焊口列表。</returns>
|
||||
public Model.ResponeData GetWeldedJoints(string projectId, string pipelineCode = "", string weldJointCode = "", int pageIndex = 0, int pageSize = 20)
|
||||
{
|
||||
var responeData = new Model.ResponeData();
|
||||
try
|
||||
{
|
||||
responeData.data = WeldAppearanceCheckService.GetWeldedJoints(
|
||||
projectId, pipelineCode, weldJointCode, pageIndex, pageSize);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
responeData.code = 0;
|
||||
responeData.message = ex.Message;
|
||||
}
|
||||
|
||||
return responeData;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查询焊口基础信息及历史外观检测记录。
|
||||
/// </summary>
|
||||
/// <param name="weldJointId">焊口ID。</param>
|
||||
/// <returns>焊口详情及外观检测历史。</returns>
|
||||
public Model.ResponeData GetJointDetail(string weldJointId)
|
||||
{
|
||||
var responeData = new Model.ResponeData();
|
||||
try
|
||||
{
|
||||
responeData.data = WeldAppearanceCheckService.GetJointDetail(weldJointId);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
responeData.code = 0;
|
||||
responeData.message = ex.Message;
|
||||
}
|
||||
|
||||
return responeData;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 保存焊缝外观检测记录。
|
||||
/// </summary>
|
||||
/// <param name="item">外观检测结果、检测人、检测时间及照片信息。</param>
|
||||
/// <returns>外观检测记录ID。</returns>
|
||||
[HttpPost]
|
||||
public Model.ResponeData SaveRecord([FromBody] Model.WeldAppearanceCheckInput item)
|
||||
{
|
||||
var responeData = new Model.ResponeData();
|
||||
try
|
||||
{
|
||||
responeData.data = WeldAppearanceCheckService.Save(item);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
responeData.code = 0;
|
||||
responeData.message = ex.Message;
|
||||
}
|
||||
|
||||
return responeData;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -216,6 +216,7 @@
|
||||
<Compile Include="Controllers\HJGL\WeldingManage\PipeJointController.cs" />
|
||||
<Compile Include="Controllers\HJGL\WeldingManage\AntiCorrosionCheckController.cs" />
|
||||
<Compile Include="Controllers\HJGL\WeldingManage\PreWeldCuttingCheckController.cs" />
|
||||
<Compile Include="Controllers\HJGL\WeldingManage\WeldAppearanceCheckController.cs" />
|
||||
<Compile Include="Controllers\HJGL\WeldingManage\PreWeldFitupCheckController.cs" />
|
||||
<Compile Include="Controllers\HJGL\WeldingManage\PreWeldingDailyController.cs" />
|
||||
<Compile Include="Controllers\HJGL\WeldingManage\ReportQueryController.cs" />
|
||||
|
||||
Reference in New Issue
Block a user