Browse Source

工单评分增加流转

ouyj 4 months ago
parent
commit
fb68acb832

+ 28 - 1
ygtx-gxt/src/main/java/com/ygtx/gxt/domain/GxtRepairOrderFlow.java

@@ -28,7 +28,7 @@ public class GxtRepairOrderFlow extends BaseEntity
     @Excel(name = "工单编码")
     private String orderCode;
 
-    /** 操作类型:create-创建工单,assign-下发工单,accept-接单,process-处理工单,pause-暂停,suspend-挂起,restart-重启,approve-审批,complete-完成工单,create_to_assign-创建并下发工单,to_approve-申请挂起工单,approved-挂起审批通过,rejected-挂起审批驳回,rating-工单评分,restart-设备恢复运行,archive-工单归档,to_archive-工单待归档,invalid-作废工单 */
+    /** 操作类型:create-创建工单,assign-下发工单,accept-接单,process-处理工单,pause-暂停,suspend-挂起,restart-重启,approve-审批,complete-完成工单,create_to_assign-创建并下发工单,to_approve-申请挂起工单,approved-挂起审批通过,rejected-挂起审批驳回,rating-工单评分,restart-设备恢复运行,archive-工单归档,to_archive-工单待归档,invalid-作废工单 ,selfRating-工单自评 ,reviewRating-工单复评,finalRating-工单终评 ,confirmRating-评分确认 ,feedbackRating-评分反馈 */
     //@Excel(name = "操作类型:create-创建工单,assign-下发工单,accept-接单,process-处理工单,pause-暂停,suspend-挂起,restart-重启,approve-审批,complete-完成工单,create_to_assign-创建并下发工单,to_approve-申请挂起工单,approved-挂起审批通过,rejected-挂起审批驳回,rating-工单评分")
     private String actionType;
 
@@ -57,6 +57,14 @@ public class GxtRepairOrderFlow extends BaseEntity
     @Excel(name = "操作备注")
     private String actionRemark;
 
+    /** 原评分状态 */
+    @Excel(name = "原评分状态")
+    private String fromScoreStatus;
+
+    /** 目标评分状态 */
+    @Excel(name = "目标评分状态")
+    private String toScoreStatus;
+    
     public void setId(Long id) 
     {
         this.id = id;
@@ -157,6 +165,25 @@ public class GxtRepairOrderFlow extends BaseEntity
         return actionRemark;
     }
 
+    public void setFromScoreStatus(String fromScoreStatus) 
+    {
+        this.fromScoreStatus = fromScoreStatus;
+    }
+
+    public String getFromScoreStatus() 
+    {
+        return fromScoreStatus;
+    }
+
+    public void setToScoreStatus(String toScoreStatus) 
+    {
+        this.toScoreStatus = toScoreStatus;
+    }
+
+    public String getToScoreStatus() 
+    {
+        return toScoreStatus;
+    }
 
     @Override
     public String toString() {

+ 29 - 1
ygtx-gxt/src/main/java/com/ygtx/gxt/domain/GxtWorkOrderFlow.java

@@ -28,7 +28,7 @@ public class GxtWorkOrderFlow extends BaseEntity
     @Excel(name = "工单编码")
     private String orderCode;
 
-    /** 操作类型:create-创建,assign-派单,accept-接单,process-处理,pause-暂停,suspend-挂起,restart-重启,approve-审批,complete-完成 */
+    /** 操作类型:create-创建,assign-派单,accept-接单,process-处理,pause-暂停,suspend-挂起,restart-重启,approve-审批,complete-完成, ,selfRating-工单自评 ,reviewRating-工单复评,finalRating-工单终评 ,confirmRating-评分确认 ,feedbackRating-评分反馈  */
     @Excel(name = "操作类型", readConverterExp = "create=创建,assign=派单,accept=接单,process=处理,pause=暂停,suspend=挂起,restart=重启,approve=审批,complete=完成")
     private String actionType;
 
@@ -55,6 +55,14 @@ public class GxtWorkOrderFlow extends BaseEntity
     /** 操作备注 */
     private String actionRemark;
 
+    /** 原评分状态 */
+    @Excel(name = "原评分状态")
+    private String fromScoreStatus;
+
+    /** 目标评分状态 */
+    @Excel(name = "目标评分状态")
+    private String toScoreStatus;
+
     public void setId(Long id)
     {
         this.id = id;
@@ -155,6 +163,26 @@ public class GxtWorkOrderFlow extends BaseEntity
         return actionRemark;
     }
 
+    public void setFromScoreStatus(String fromScoreStatus) 
+    {
+        this.fromScoreStatus = fromScoreStatus;
+    }
+
+    public String getFromScoreStatus() 
+    {
+        return fromScoreStatus;
+    }
+
+    public void setToScoreStatus(String toScoreStatus) 
+    {
+        this.toScoreStatus = toScoreStatus;
+    }
+
+    public String getToScoreStatus() 
+    {
+        return toScoreStatus;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

+ 147 - 5
ygtx-gxt/src/main/java/com/ygtx/gxt/service/impl/GxtOrderScoreServiceImpl.java

@@ -461,6 +461,7 @@ public class GxtOrderScoreServiceImpl implements IGxtOrderScoreService {
     public int selfEvaluation(OrderScoreInfo orderScoreInfo) {
         try {
             if (orderScoreInfo.getOrderType() == 1) {
+                GxtRepairOrder oldOrder = gxtRepairOrderService.selectGxtRepairOrderById(orderScoreInfo.getId());
                 // 维修工单自评
                 GxtRepairOrder order = new GxtRepairOrder();
                 order.setId(orderScoreInfo.getId());
@@ -492,8 +493,24 @@ public class GxtOrderScoreServiceImpl implements IGxtOrderScoreService {
                     gxtRepairOrderService.updateRepairOrderPersonList(personList);
                 }
 
+                // 添加工单流转记录
+                GxtRepairOrderFlow flow = new GxtRepairOrderFlow();
+                flow.setOrderId(orderScoreInfo.getId());
+                flow.setOrderCode(orderScoreInfo.getWorkOrderProjectNo());
+                flow.setActionType("selfRating");
+                flow.setFromStatus(oldOrder.getWorkOrderStatus());
+                flow.setToStatus(oldOrder.getWorkOrderStatus());
+                flow.setFromScoreStatus(oldOrder.getScoringStatus());
+                flow.setToScoreStatus(order.getScoringStatus());
+                flow.setOperatorId(SecurityUtils.getUserId());
+                flow.setOperatorName(SecurityUtils.getLoginUser().getUser().getNickName());
+                flow.setActionTime(DateUtils.getNowDate());
+                flow.setActionRemark("提交自评");
+                repairOrderFlowService.insertGxtRepairOrderFlow(flow);
+
                 return result;
             } else if (orderScoreInfo.getOrderType() == 2) {
+                GxtWorkOrder oldOrder = gxtWorkOrderService.selectGxtWorkOrderById(orderScoreInfo.getId());
                 // 维保工单自评
                 GxtWorkOrder order = new GxtWorkOrder();
                 order.setId(orderScoreInfo.getId());
@@ -529,6 +546,21 @@ public class GxtOrderScoreServiceImpl implements IGxtOrderScoreService {
                     gxtWorkOrderService.updateWorkOrderPersonList(personList);
                 }
 
+                // 添加工单流转记录
+                GxtWorkOrderFlow flow = new GxtWorkOrderFlow();
+                flow.setOrderId(orderScoreInfo.getId());
+                flow.setOrderCode(orderScoreInfo.getWorkOrderProjectNo());
+                flow.setActionType("selfRating");
+                flow.setFromStatus(oldOrder.getWorkOrderStatus());
+                flow.setToStatus(oldOrder.getWorkOrderStatus());
+                flow.setFromScoreStatus(oldOrder.getScoringStatus());
+                flow.setToScoreStatus(order.getScoringStatus());
+                flow.setOperatorId(SecurityUtils.getUserId());
+                flow.setOperatorName(SecurityUtils.getLoginUser().getUser().getNickName());
+                flow.setActionTime(DateUtils.getNowDate());
+                flow.setActionRemark("提交自评");
+                gxtWorkOrderFlowService.insertGxtWorkOrderFlow(flow);
+
                 return result;
             }
             return 0;
@@ -548,6 +580,7 @@ public class GxtOrderScoreServiceImpl implements IGxtOrderScoreService {
     public int review(OrderScoreInfo orderScoreInfo) {
         try {
             if (orderScoreInfo.getOrderType() == 1) {
+                GxtRepairOrder oldOrder = gxtRepairOrderService.selectGxtRepairOrderById(orderScoreInfo.getId());
                 // 维修工单复评
                 GxtRepairOrder order = new GxtRepairOrder();
                 order.setId(orderScoreInfo.getId());
@@ -583,9 +616,25 @@ public class GxtOrderScoreServiceImpl implements IGxtOrderScoreService {
                     gxtRepairOrderService.updateRepairOrderPersonList(personList);
                 }
 
+                // 添加工单流转记录
+                GxtRepairOrderFlow flow = new GxtRepairOrderFlow();
+                flow.setOrderId(orderScoreInfo.getId());
+                flow.setOrderCode(orderScoreInfo.getWorkOrderProjectNo());
+                flow.setActionType("reviewRating");
+                flow.setFromStatus(oldOrder.getWorkOrderStatus());
+                flow.setToStatus(oldOrder.getWorkOrderStatus());
+                flow.setFromScoreStatus(oldOrder.getScoringStatus());
+                flow.setToScoreStatus(order.getScoringStatus());
+                flow.setOperatorId(SecurityUtils.getUserId());
+                flow.setOperatorName(SecurityUtils.getLoginUser().getUser().getNickName());
+                flow.setActionTime(DateUtils.getNowDate());
+                flow.setActionRemark("提交复评");
+                repairOrderFlowService.insertGxtRepairOrderFlow(flow);
+
                 return result;
             } else if (orderScoreInfo.getOrderType() == 2) {
                 // 维保工单复评
+                GxtWorkOrder oldOrder = gxtWorkOrderService.selectGxtWorkOrderById(orderScoreInfo.getId());
                 GxtWorkOrder order = new GxtWorkOrder();
                 order.setId(orderScoreInfo.getId());
                 order.setItemCompletionFactor(orderScoreInfo.getItemCompletionFactor());
@@ -620,6 +669,21 @@ public class GxtOrderScoreServiceImpl implements IGxtOrderScoreService {
                     gxtWorkOrderService.updateWorkOrderPersonList(personList);
                 }
 
+                // 添加工单流转记录
+                GxtWorkOrderFlow flow = new GxtWorkOrderFlow();
+                flow.setOrderId(orderScoreInfo.getId());
+                flow.setOrderCode(orderScoreInfo.getWorkOrderProjectNo());
+                flow.setActionType("reviewRating");
+                flow.setFromStatus(oldOrder.getWorkOrderStatus());
+                flow.setToStatus(oldOrder.getWorkOrderStatus());
+                flow.setFromScoreStatus(oldOrder.getScoringStatus());
+                flow.setToScoreStatus(order.getScoringStatus());
+                flow.setOperatorId(SecurityUtils.getUserId());
+                flow.setOperatorName(SecurityUtils.getLoginUser().getUser().getNickName());
+                flow.setActionTime(DateUtils.getNowDate());
+                flow.setActionRemark("提交复评");
+                gxtWorkOrderFlowService.insertGxtWorkOrderFlow(flow);
+
                 return result;
             }
             return 0;
@@ -640,6 +704,7 @@ public class GxtOrderScoreServiceImpl implements IGxtOrderScoreService {
         try {
             if (orderScoreInfo.getOrderType() == 1) {
                 // 维修工单终评
+                GxtRepairOrder oldOrder = gxtRepairOrderService.selectGxtRepairOrderById(orderScoreInfo.getId());
                 // 更新人员评分信息
                 if (orderScoreInfo.getScorePersonList() != null) {
                     List<GxtRepairOrderPerson> personList = new ArrayList<>();
@@ -674,9 +739,24 @@ public class GxtOrderScoreServiceImpl implements IGxtOrderScoreService {
 
                 gxtRepairOrderService.updateGxtRepairOrderForScore(order);
 
+                // 添加工单流转记录
+                GxtRepairOrderFlow flow = new GxtRepairOrderFlow();
+                flow.setOrderId(orderScoreInfo.getId());
+                flow.setOrderCode(orderScoreInfo.getWorkOrderProjectNo());
+                flow.setActionType("finalRating");
+                flow.setFromStatus(oldOrder.getWorkOrderStatus());
+                flow.setToStatus(oldOrder.getWorkOrderStatus());
+                flow.setFromScoreStatus(oldOrder.getScoringStatus());
+                flow.setToScoreStatus(order.getScoringStatus());
+                flow.setOperatorId(SecurityUtils.getUserId());
+                flow.setOperatorName(SecurityUtils.getLoginUser().getUser().getNickName());
+                flow.setActionTime(DateUtils.getNowDate());
+                flow.setActionRemark("提交终评");
+                repairOrderFlowService.insertGxtRepairOrderFlow(flow);
+
                 if("archived".equals(order.getWorkOrderStatus())){
                     // 添加归档流程记录
-                    GxtRepairOrderFlow flow = new GxtRepairOrderFlow();
+                    flow = new GxtRepairOrderFlow();
                     flow.setOrderId(order.getId());
                     flow.setOrderCode(orderScoreInfo.getWorkOrderProjectNo());
                     flow.setActionType("archive");
@@ -688,10 +768,10 @@ public class GxtOrderScoreServiceImpl implements IGxtOrderScoreService {
                     flow.setActionRemark("系统自动归档工单");
                     repairOrderFlowService.insertGxtRepairOrderFlow(flow);
                 }
-
                 return 1;
             } else if (orderScoreInfo.getOrderType() == 2) {
                 // 维保工单终评
+                GxtWorkOrder oldOrder = gxtWorkOrderService.selectGxtWorkOrderById(orderScoreInfo.getId());
                 // 更新人员评分信息
                 if (orderScoreInfo.getScorePersonList() != null) {
                     List<GxtWorkOrderPerson> personList = new ArrayList<>();
@@ -725,9 +805,25 @@ public class GxtOrderScoreServiceImpl implements IGxtOrderScoreService {
                 }
 
                 gxtWorkOrderService.updateGxtWorkOrderForScore(order);
+
+                // 添加工单流转记录
+                GxtWorkOrderFlow flow = new GxtWorkOrderFlow();
+                flow.setOrderId(orderScoreInfo.getId());
+                flow.setOrderCode(orderScoreInfo.getWorkOrderProjectNo());
+                flow.setActionType("finalRating");
+                flow.setFromStatus(oldOrder.getWorkOrderStatus());
+                flow.setToStatus(oldOrder.getWorkOrderStatus());
+                flow.setFromScoreStatus(oldOrder.getScoringStatus());
+                flow.setToScoreStatus(order.getScoringStatus());
+                flow.setOperatorId(SecurityUtils.getUserId());
+                flow.setOperatorName(SecurityUtils.getLoginUser().getUser().getNickName());
+                flow.setActionTime(DateUtils.getNowDate());
+                flow.setActionRemark("提交终评");
+                gxtWorkOrderFlowService.insertGxtWorkOrderFlow(flow);
+
                 if("archived".equals(order.getWorkOrderStatus())){
                     // 添加归档流程记录
-                    GxtWorkOrderFlow flow = new GxtWorkOrderFlow();
+                    flow = new GxtWorkOrderFlow();
                     flow.setOrderId(order.getId());
                     flow.setOrderCode(orderScoreInfo.getWorkOrderProjectNo());
                     flow.setActionType("archive");
@@ -800,9 +896,32 @@ public class GxtOrderScoreServiceImpl implements IGxtOrderScoreService {
                     
                     gxtRepairOrderService.updateGxtRepairOrderForScore(statusOrder);
 
+                    // 添加工单流转记录
+                    GxtRepairOrderFlow flow = new GxtRepairOrderFlow();
+                    flow.setOrderId(orderScoreInfo.getId());
+                    flow.setOrderCode(orderSearch.getWorkOrderProjectNo());
+                    if (orderScoreInfo.getConfirmStatus() == 1) {
+                        flow.setActionType("confirmRating");
+                    }else if (orderScoreInfo.getConfirmStatus() == 2) {
+                        flow.setActionType("feedbackRating");
+                    }
+                    flow.setFromStatus(orderSearch.getWorkOrderStatus());
+                    flow.setToStatus(orderSearch.getWorkOrderStatus());
+                    flow.setFromScoreStatus(orderSearch.getScoringStatus());
+                    flow.setToScoreStatus(statusOrder.getScoringStatus());
+                    flow.setOperatorId(SecurityUtils.getUserId());
+                    flow.setOperatorName(SecurityUtils.getLoginUser().getUser().getNickName());
+                    flow.setActionTime(DateUtils.getNowDate());
+                    if (orderScoreInfo.getConfirmStatus() == 1) {
+                        flow.setActionRemark("提交确认");
+                    }else if (orderScoreInfo.getConfirmStatus() == 2) {
+                        flow.setActionRemark("提交反馈");
+                    }
+                    repairOrderFlowService.insertGxtRepairOrderFlow(flow);
+
                     if("archived".equals(statusOrder.getWorkOrderStatus())){
                         // 添加归档流程记录
-                        GxtRepairOrderFlow flow = new GxtRepairOrderFlow();
+                        flow = new GxtRepairOrderFlow();
                         flow.setOrderId(orderSearch.getId());
                         flow.setOrderCode(orderSearch.getWorkOrderProjectNo());
                         flow.setActionType("archive");
@@ -819,6 +938,7 @@ public class GxtOrderScoreServiceImpl implements IGxtOrderScoreService {
                 return result;
             } else if (orderScoreInfo.getOrderType() == 2) {
                 // 维保工单确认
+                GxtWorkOrder oldOrder = gxtWorkOrderService.selectGxtWorkOrderById(orderScoreInfo.getId());
                 GxtWorkOrder order = new GxtWorkOrder();
                 order.setId(orderScoreInfo.getId());
                 order.setConfirmStatus(orderScoreInfo.getConfirmStatus());
@@ -844,8 +964,30 @@ public class GxtOrderScoreServiceImpl implements IGxtOrderScoreService {
                     }
                     
                     gxtWorkOrderService.updateGxtWorkOrderForScore(statusOrder);
-                }
 
+                    // 添加工单流转记录
+                    GxtWorkOrderFlow flow = new GxtWorkOrderFlow();
+                    flow.setOrderId(orderScoreInfo.getId());
+                    flow.setOrderCode(oldOrder.getWorkOrderProjectNo());
+                    if (orderScoreInfo.getConfirmStatus() == 1) {
+                        flow.setActionType("confirmRating");
+                    }else if (orderScoreInfo.getConfirmStatus() == 2) {
+                        flow.setActionType("feedbackRating");
+                    }
+                    flow.setFromStatus(oldOrder.getWorkOrderStatus());
+                    flow.setToStatus(oldOrder.getWorkOrderStatus());
+                    flow.setFromScoreStatus(oldOrder.getScoringStatus());
+                    flow.setToScoreStatus(statusOrder.getScoringStatus());
+                    flow.setOperatorId(SecurityUtils.getUserId());
+                    flow.setOperatorName(SecurityUtils.getLoginUser().getUser().getNickName());
+                    flow.setActionTime(DateUtils.getNowDate());
+                    if (orderScoreInfo.getConfirmStatus() == 1) {
+                        flow.setActionRemark("提交确认");
+                    }else if (orderScoreInfo.getConfirmStatus() == 2) {
+                        flow.setActionRemark("提交反馈");
+                    }
+                    gxtWorkOrderFlowService.insertGxtWorkOrderFlow(flow);
+                }
                 return result;
             }
             return 0;

+ 11 - 1
ygtx-gxt/src/main/resources/mapper/gxt/GxtRepairOrderFlowMapper.xml

@@ -15,12 +15,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="operatorName"    column="operator_name"    />
         <result property="actionTime"    column="action_time"    />
         <result property="actionRemark"    column="action_remark"    />
+        <result property="fromScoreStatus"    column="from_score_status"    />
+        <result property="toScoreStatus"    column="to_score_status"    />
         <result property="createBy"    column="create_by"    />
         <result property="createTime"    column="create_time"    />
     </resultMap>
 
     <sql id="selectGxtRepairOrderFlowVo">
-        select id, order_id, order_code, action_type, from_status, to_status, operator_id, operator_name, action_time, action_remark, create_by, create_time from gxt_repair_order_flow
+        select id, order_id, order_code, action_type, from_status, to_status, operator_id, operator_name, action_time, action_remark, from_score_status, to_score_status, create_by, create_time from gxt_repair_order_flow
     </sql>
 
     <select id="selectGxtRepairOrderFlowList" parameterType="GxtRepairOrderFlow" resultMap="GxtRepairOrderFlowResult">
@@ -35,6 +37,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="operatorName != null  and operatorName != ''"> and operator_name like concat('%', #{operatorName}, '%')</if>
             <if test="actionTime != null "> and action_time = #{actionTime}</if>
             <if test="actionRemark != null  and actionRemark != ''"> and action_remark = #{actionRemark}</if>
+            <if test="fromScoreStatus != null and fromScoreStatus != ''"> and from_score_status = #{fromScoreStatus}</if>
+            <if test="toScoreStatus != null and toScoreStatus != ''"> and to_score_status = #{toScoreStatus}</if>
         </where>
     </select>
     
@@ -60,6 +64,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="operatorName != null">operator_name,</if>
             <if test="actionTime != null">action_time,</if>
             <if test="actionRemark != null">action_remark,</if>
+            <if test="fromScoreStatus != null">from_score_status,</if>
+            <if test="toScoreStatus != null">to_score_status,</if>
             <if test="createBy != null">create_by,</if>
             <if test="createTime != null">create_time,</if>
          </trim>
@@ -73,6 +79,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="operatorName != null">#{operatorName},</if>
             <if test="actionTime != null">#{actionTime},</if>
             <if test="actionRemark != null">#{actionRemark},</if>
+            <if test="fromScoreStatus != null">#{fromScoreStatus},</if>
+            <if test="toScoreStatus != null">#{toScoreStatus},</if>
             <if test="createBy != null">#{createBy},</if>
             <if test="createTime != null">#{createTime},</if>
          </trim>
@@ -90,6 +98,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="operatorName != null">operator_name = #{operatorName},</if>
             <if test="actionTime != null">action_time = #{actionTime},</if>
             <if test="actionRemark != null">action_remark = #{actionRemark},</if>
+            <if test="fromScoreStatus != null">from_score_status = #{fromScoreStatus},</if>
+            <if test="toScoreStatus != null">to_score_status = #{toScoreStatus},</if>
             <if test="createBy != null">create_by = #{createBy},</if>
             <if test="createTime != null">create_time = #{createTime},</if>
         </trim>

+ 12 - 2
ygtx-gxt/src/main/resources/mapper/gxt/GxtWorkOrderFlowMapper.xml

@@ -15,12 +15,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="operatorName"    column="operator_name"    />
         <result property="actionTime"    column="action_time"    />
         <result property="actionRemark"    column="action_remark"    />
+        <result property="fromScoreStatus"    column="from_score_status"    />
+        <result property="toScoreStatus"    column="to_score_status"    />
         <result property="createBy"    column="create_by"    />
         <result property="createTime"    column="create_time"    />
     </resultMap>
 
     <sql id="selectGxtWorkOrderFlowVo">
-        select id, order_id, order_code, action_type, from_status, to_status, operator_id, operator_name, action_time, action_remark, create_by, create_time
+        select id, order_id, order_code, action_type, from_status, to_status, operator_id, operator_name, action_time, action_remark, from_score_status, to_score_status, create_by, create_time
         from gxt_work_order_flow
     </sql>
 
@@ -33,6 +35,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="fromStatus != null  and fromStatus != ''"> and from_status = #{fromStatus}</if>
             <if test="toStatus != null  and toStatus != ''"> and to_status = #{toStatus}</if>
             <if test="operatorId != null"> and operator_id = #{operatorId}</if>
+            <if test="fromScoreStatus != null and fromScoreStatus != ''"> and from_score_status = #{fromScoreStatus}</if>
+            <if test="toScoreStatus != null and toScoreStatus != ''"> and to_score_status = #{toScoreStatus}</if>
         </where>
         order by create_time asc
     </select>
@@ -60,6 +64,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="operatorName != null">operator_name,</if>
             <if test="actionTime != null">action_time,</if>
             <if test="actionRemark != null">action_remark,</if>
+            <if test="fromScoreStatus != null">from_score_status,</if>
+            <if test="toScoreStatus != null">to_score_status,</if>
             <if test="createBy != null">create_by,</if>
             <if test="createTime != null">create_time,</if>
          </trim>
@@ -73,6 +79,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="operatorName != null">#{operatorName},</if>
             <if test="actionTime != null">#{actionTime},</if>
             <if test="actionRemark != null">#{actionRemark},</if>
+            <if test="fromScoreStatus != null">#{fromScoreStatus},</if>
+            <if test="toScoreStatus != null">#{toScoreStatus},</if>
             <if test="createBy != null">#{createBy},</if>
             <if test="createTime != null">#{createTime},</if>
          </trim>
@@ -90,6 +98,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="operatorName != null">operator_name = #{operatorName},</if>
             <if test="actionTime != null">action_time = #{actionTime},</if>
             <if test="actionRemark != null">action_remark = #{actionRemark},</if>
+            <if test="fromScoreStatus != null">from_score_status = #{fromScoreStatus},</if>
+            <if test="toScoreStatus != null">to_score_status = #{toScoreStatus},</if>
             <if test="createBy != null">create_by = #{createBy},</if>
             <if test="createTime != null">create_time = #{createTime},</if>
         </trim>
@@ -106,4 +116,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{id}
         </foreach>
     </delete>
-</mapper>
+</mapper>

+ 196 - 75
ygtx-ui/src/views/gxt/orderScore/index.vue

@@ -161,81 +161,127 @@
     />
 
     <!-- 查看详情对话框 -->
-    <el-dialog title="工单评分详情" v-model="viewDialogVisible" width="800px" append-to-body>
-      <el-form label-width="120px" label-position="top">
-        <el-row :gutter="20">
-          <el-col :span="12">
-              <el-form-item label="工单编码">{{ viewForm.workOrderProjectNo }}</el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="风机编号">{{ viewForm.pcsDeviceName }}</el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="场站">{{ viewForm.pcsStationName }}</el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="工作负责人">{{ viewForm.teamLeaderName }}</el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="工作结束时间">{{ parseTime(viewForm.realEndTime, '{y}-{m}-{d} {h}:{i}') }}</el-form-item>
-          </el-col>
-          <el-col :span="12">
-              <el-form-item label="工单类型">
-                <dict-tag :options="gxt_order_type" :value="viewForm.orderType" />
-              </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="状态">
-              <dict-tag :options="gxt_scoring_status" :value="viewForm.scoringStatus" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="检修类型" v-if="viewForm.orderType === 1">
-              <dict-tag :options="gxt_maintenance_type" :value="viewForm.maintenanceType" />
-            </el-form-item>
-            <el-form-item label="维保类型" v-if="viewForm.orderType === 2">
-              <dict-tag :options="gxt_inspection_type" :value="viewForm.inspectionType" />
-            </el-form-item>
-          </el-col>
+    <el-dialog title="工单评分详情" v-model="viewDialogVisible" width="1000px" append-to-body>
+      <el-row :gutter="20">
+        <!-- 工单信息 -->
+        <el-col :span="8">
+          <div class="info-section">
+            <h3 class="section-title">工单信息</h3>
+            <div class="info-content">
+              <el-form label-width="100px" label-position="top">
+                <el-row :gutter="20">
+                  <el-col :span="24">
+                    <el-form-item label="工单编码">{{ viewForm.workOrderProjectNo }}</el-form-item>
+                  </el-col>
+                  <el-col :span="24">
+                    <el-form-item label="工单类型">
+                      <dict-tag :options="gxt_order_type" :value="viewForm.orderType" />
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="24">
+                    <el-form-item label="状态">
+                      <dict-tag :options="gxt_scoring_status" :value="viewForm.scoringStatus" />
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="24">
+                    <el-form-item label="风机编号">{{ viewForm.pcsDeviceName }}</el-form-item>
+                  </el-col>
+                  <el-col :span="24">
+                    <el-form-item label="场站">{{ viewForm.pcsStationName }}</el-form-item>
+                  </el-col>
+                  <el-col :span="24">
+                    <el-form-item label="工作结束时间">{{ parseTime(viewForm.realEndTime, '{y}-{m}-{d} {h}:{i}') }}</el-form-item>
+                  </el-col>
+                  <el-col :span="24">
+                    <el-form-item label="工作负责人">{{ viewForm.teamLeaderName }}</el-form-item>
+                  </el-col>
+                </el-row>
+              </el-form>
+            </div>
+          </div>
+        </el-col>
+
+        <!-- 处理信息 -->
+        <el-col :span="8">
+          <div class="info-section">
+            <h3 class="section-title">处理信息</h3>
+            <div class="info-content">
+              <el-form label-width="100px" label-position="top">
+                <el-row :gutter="20">
+                  <el-col :span="24">
+                    <el-form-item :label="viewForm.orderType === 1 ? '检修类型' : '维保类型'">
+                      <dict-tag v-if="viewForm.orderType === 1" :options="gxt_maintenance_type" :value="viewForm.maintenanceType" />
+                      <dict-tag v-else :options="gxt_inspection_type" :value="viewForm.inspectionType" />
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="24" v-if="viewForm.orderType === 2">
+                    <el-form-item label="分项完成系数">{{ viewForm.itemCompletionFactor }}</el-form-item>
+                  </el-col>
+                  <el-col :span="24" v-if="viewForm.orderType === 2">
+                    <el-form-item label="分项完成系数和">{{ viewForm.itemCompletionFactorSum }}</el-form-item>
+                  </el-col>
+                  <el-col :span="24">
+                    <el-form-item :label="viewForm.orderType === 1 ? '维修总结' : '维保总结'">{{ viewForm.workSummary }}</el-form-item>
+                  </el-col>
+                </el-row>
+              </el-form>
+            </div>
+          </div>
+        </el-col>
+
+        <!-- 工单流转记录 -->
+        <el-col :span="8">
+          <div class="info-section">
+            <h3 class="section-title">工单流转</h3>
+            <div class="flow-history">
+              <el-timeline>
+                <el-timeline-item type="primary"
+                                  v-for="(flow, index) in flowList"
+                                  :key="index"
+                                  :timestamp="parseTime(flow.actionTime, '{y}-{m}-{d} {h}:{i}')"
+                >
+                  <div class="flow-item">
+                    <h4>
+                      <dict-tag :options="gxt_repair_order_flow_action_type" :value="flow.actionType" />
+                    </h4>
+                    <p>{{ flow.operatorName }}</p>
+                  </div>
+                </el-timeline-item>
+              </el-timeline>
+            </div>
+          </div>
+        </el-col>
+      </el-row>
+      
+      <el-form label-position="top">
+        <el-row>
           <el-col :span="24">
-            <el-form label-width="120px" label-position="top">
-              <el-form-item :label="viewForm.orderType === 1 ? '维修总结' : '维保总结'">{{ viewForm.workSummary }}</el-form-item>
-            </el-form>
+            <el-form-item label="得分明细">
+              <el-table :data="viewForm.scorePersonList" border style="width: 100%;">
+                <el-table-column label="检修员" align="center" prop="nickName">
+                  <template #default="scope">
+                    <span>{{ scope.row.nickName }}<span v-if="scope.row.isLeader == 1"> (工作负责人)</span></span>
+                  </template>
+                </el-table-column>
+                <el-table-column label="自评得分" align="center" prop="selfScore">
+                  <template #default="scope">
+                    <span>{{ scope.row.selfScore !== null && scope.row.selfScore !== undefined ? parseFloat(scope.row.selfScore).toFixed(2) : '' }}</span>
+                  </template>
+                </el-table-column>
+                <el-table-column label="复评得分" align="center" prop="reviewScore">
+                  <template #default="scope">
+                    <span>{{ scope.row.reviewScore !== null && scope.row.reviewScore !== undefined ? parseFloat(scope.row.reviewScore).toFixed(2) : '' }}</span>
+                  </template>
+                </el-table-column>
+                <el-table-column label="终评得分" align="center" prop="finalScore">
+                  <template #default="scope">
+                    <span>{{ scope.row.finalScore !== null && scope.row.finalScore !== undefined ? parseFloat(scope.row.finalScore).toFixed(2) : '' }}</span>
+                  </template>
+                </el-table-column>
+              </el-table>
+            </el-form-item>
           </el-col>
         </el-row>
-
-        <el-form-item label="得分明细">
-          <el-table :data="viewForm.scorePersonList" border style="width: 100%;">
-            <el-table-column label="检修员" align="center" prop="nickName"  style="width: 50%;">
-              <template #default="scope">
-                <span>{{ scope.row.nickName }}<span v-if="scope.row.isLeader == 1"> (工作负责人)</span></span>
-              </template>
-            </el-table-column>
-            <el-table-column label="自评得分" align="center" prop="selfScore">
-              <template #default="scope">
-                <span>{{ scope.row.selfScore !== null && scope.row.selfScore !== undefined ? parseFloat(scope.row.selfScore).toFixed(2) : '' }}</span>
-              </template>
-            </el-table-column>
-            <el-table-column label="复评得分" align="center" prop="reviewScore">
-              <template #default="scope">
-                <span>{{ scope.row.reviewScore !== null && scope.row.reviewScore !== undefined ? parseFloat(scope.row.reviewScore).toFixed(2) : '' }}</span>
-              </template>
-            </el-table-column>
-            <el-table-column label="终评得分" align="center" prop="finalScore">
-              <template #default="scope">
-                <span>{{ scope.row.finalScore !== null && scope.row.finalScore !== undefined ? parseFloat(scope.row.finalScore).toFixed(2) : '' }}</span>
-              </template>
-            </el-table-column>
-<!--            <el-table-column label="确认状态" align="center" prop="confirmStatus">
-              <template #default="scope">
-                <span v-if="scope.row.confirmStatus === 0 || scope.row.confirmStatus === null">未确认</span>
-                <span v-else-if="scope.row.confirmStatus === 1">已确认</span>
-                <span v-else-if="scope.row.confirmStatus === 2">已反馈</span>
-                <span v-else>未知状态</span>
-              </template>
-            </el-table-column>-->
-          </el-table>
-        </el-form-item>
       </el-form>
       <template #footer>
         <div class="dialog-footer">
@@ -804,7 +850,7 @@ import { listInspectionTypesByFanType } from "@/api/gxt/fanInspectionScore";
 import useUserStore from '@/store/modules/user'
 
 const { proxy } = getCurrentInstance();
-const { gxt_maintenance_type, gxt_work_order_status, gxt_order_priority_type,gxt_repair_order_flow_action_type,gxt_order_suspend_reason,gxt_order_type,gxt_scoring_status,gxt_inspection_type } = proxy.useDict("gxt_maintenance_type", "gxt_work_order_status", "gxt_order_priority_type","gxt_repair_order_flow_action_type","gxt_order_suspend_reason","gxt_order_type","gxt_scoring_status","gxt_inspection_type")
+const { gxt_maintenance_type, gxt_work_order_status, gxt_order_priority_type,gxt_repair_order_flow_action_type,gxt_order_suspend_reason,gxt_order_type,gxt_scoring_status,gxt_inspection_type,gxt_work_order_flow_action_type } = proxy.useDict("gxt_maintenance_type", "gxt_work_order_status", "gxt_order_priority_type","gxt_repair_order_flow_action_type","gxt_order_suspend_reason","gxt_order_type","gxt_scoring_status","gxt_inspection_type","gxt_work_order_flow_action_type")
 
 const userStore = useUserStore();
 
@@ -818,6 +864,7 @@ const multiple = ref(true);
 const total = ref(0);
 const tableHeight = ref(window.innerHeight - 300);
 const isEditScore = ref(true);
+const flowList = ref([]); // 添加流转记录列表
 
 // 对话框显示控制
 const viewDialogVisible = ref(false);
@@ -1050,9 +1097,11 @@ function handleView(row) {
     if (row.orderType === 1) {
       // 维修工单
       viewForm.value.scorePersonList = response.data.repairOrderPersonList || [];
+      flowList.value = response.data.repairOrderFlowList || [];
     } else if (row.orderType === 2) {
       // 维保工单
       viewForm.value.scorePersonList = response.data.workOrderPersonList || [];
+      flowList.value = response.data.workOrderFlowList || [];
     }
     viewDialogVisible.value = true;
   });
@@ -1068,10 +1117,10 @@ function closeViewDialog() {
 function handleSelfEvaluation(row) {
   getOrderScore(row.orderType, row.id).then(response => {
     const data = response.data;
-    
+
     // 重置维保类型选项
     inspectionTypeOptions.value = [];
-    
+
     selfEvaluationForm.value = {
       orderType: row.orderType,
       id: row.id,
@@ -1747,4 +1796,76 @@ function handleMaintenanceCenterChange(selectedCenter) {
   margin-left: -5px;
   margin-right: -5px;
 }
+
+.info-section {
+  padding: 16px 0;
+  height: 100%;
+  box-sizing: border-box;
+}
+
+.section-title {
+  font-weight: bold;
+  font-size: 16px;
+  margin-bottom: 15px;
+  padding-bottom: 10px;
+  border-bottom: 1px solid #ebeef5;
+}
+.info-content {
+  height: calc(100% - 30px);
+  overflow-y: auto;
+  overflow-x: hidden; /* 防止横向滚动 */
+  padding: 0 10px; /* 添加内边距防止内容贴边 */
+}
+
+.info-item {
+  margin-bottom: 12px;
+}
+
+.info-item label {
+  display: block;
+  font-size: 12px;
+  color: #999;
+  margin-bottom: 4px;
+}
+
+.info-item p {
+  font-size: 14px;
+  color: #333;
+  margin: 0;
+  line-height: 1.4;
+}
+
+.flow-history {
+  height: 100%;
+  padding: 0 10px; /* 添加内边距防止内容贴边 */
+}
+
+.flow-history .el-timeline {
+  margin-left: 0;
+  padding-left: 0;
+}
+
+.flow-item {
+  /*padding: 10px;
+  border-radius: 4px;*/
+}
+
+.flow-item h4 {
+  margin: 0 0 5px 0;
+  font-size: 14px;
+  font-weight: bold;
+}
+
+.flow-item p {
+  margin: 0;
+  font-size: 12px;
+  line-height: 1.4;
+  color: #606266;
+}
+
+.content-text {
+  white-space: pre-wrap;
+  word-break: break-word;
+  line-height: 1.5;
+}
 </style>