Merge remote-tracking branch 'origin/master'

highway
wws 1 year ago
commit b8e783e6a7

@ -137,6 +137,12 @@ public class DevicePDAController {
return devicePDAService.updateMaintenanceRecords(equRepairWorkOrder);
}
//传故障类型
// @GetMapping(value = "/queryEquFaultTypeTree")
// public AjaxResult queryEquFaultTypeTree(EquRepairWorkOrder equRepairWorkOrder) {
// return devicePDAService.queryEquFaultTypeTree(equRepairWorkOrder);
// }
/**
*
* @param pdadto

@ -74,6 +74,14 @@ public class EquFaultType extends BaseEntity {
// 创建日期结束
private String createTimeEnd;
//故障大类
// 字典名
private String dictLabel;
// 字典值
private String dictValue;
public List<Date> getCreateTimeArray() {
return createTimeArray;
}
@ -193,6 +201,22 @@ public class EquFaultType extends BaseEntity {
return delFlag;
}
public void setDictValue(String dictValue) {
this.dictValue = dictValue;
}
public String getDictValue() {
return dictValue;
}
public void setDictLabel(String dictLabel) {
this.dictLabel = dictLabel;
}
public String getDictLabel() {
return dictLabel;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

@ -165,6 +165,15 @@ public class EquOrder extends BaseEntity {
/** 维护类型名称 */
private String itemTypeName;
/** 主键 */
private String id;
public void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
//标准列表
public List<EquOrderStandard> getStandardList() {
return standardList;

@ -61,6 +61,10 @@ public class EquOutsourceWork extends BaseEntity {
@Excel(name = "委外用时")
private String workCostTime;
/** 委外状态 */
@Excel(name = "委外状态")
private String workStatus;
/** 备用字段1 */
@Excel(name = "备用字段1")
private String attr1;
@ -185,6 +189,13 @@ public class EquOutsourceWork extends BaseEntity {
return workCostTime;
}
public void setWorkStatus(String workStatus) {
this.workStatus = workStatus;
}
public String getWorkStatus() {
return workStatus;
}
public void setAttr1(String attr1) {
this.attr1 = attr1;
}

@ -122,18 +122,18 @@ public class EquRepairWorkOrder extends BaseEntity {
/** 维修开始时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "维修开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private String workStartTime;
private Date workStartTime;
/** 维修结束时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "维修结束时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private String workEndTime;
private Date workEndTime;
//维修停机真正开始时间
private String actualDownStartTime;
private Date actualDownStartTime;
//维修停机真正结束时间
private String actualDownEndTime;
private Date actualDownEndTime;
// 设备
/** 设备名称 */
@ -186,7 +186,7 @@ public class EquRepairWorkOrder extends BaseEntity {
/** 报修人 */
private String orderRepairmanCode;
/** 联系方式 */
/** 报修人联系方式 */
private String orderConnection;
//班组
@ -545,17 +545,17 @@ public class EquRepairWorkOrder extends BaseEntity {
}
//维修工单 新增字段 维修开始结束时间
public void setWorkStartTime(String workStartTime) {
public void setWorkStartTime(Date workStartTime) {
this.workStartTime = workStartTime;
}
public String getWorkStartTime() {
public Date getWorkStartTime() {
return workStartTime;
}
public void setWorkEndTime(String workEndTime) {
public void setWorkEndTime(Date workEndTime) {
this.workEndTime = workEndTime;
}
public String getWorkEndTime() {
public Date getWorkEndTime() {
return workEndTime;
}
@ -604,16 +604,16 @@ public class EquRepairWorkOrder extends BaseEntity {
}
//计划停机开始时间、结束时间
public String getActualDownStartTime() {
public Date getActualDownStartTime() {
return actualDownStartTime;
}
public void setActualDownStartTime(String actualDownStartTime) {
public void setActualDownStartTime(Date actualDownStartTime) {
this.actualDownStartTime = actualDownStartTime;
}
public String getActualDownEndTime() {
public Date getActualDownEndTime() {
return actualDownEndTime;
}
public void setActualDownEndTime(String actualDownEndTime) {
public void setActualDownEndTime(Date actualDownEndTime) {
this.actualDownEndTime = actualDownEndTime;
}

@ -3,6 +3,7 @@ package com.op.device.mapper;
import java.util.List;
import com.op.device.domain.EquFaultType;
import com.op.device.domain.EquRepairWorkOrder;
/**
* Mapper
@ -64,4 +65,7 @@ public interface EquFaultTypeMapper {
* @return
*/
int selectSerialNumber();
//故障报修第一级
List<EquFaultType> selectFirstLevelList(EquRepairWorkOrder equRepairWorkOrder);
}

@ -121,13 +121,6 @@ public interface EquOrderMapper {
*/
List<EquOrder> selectTodayTask(PDADTO pdadto);
/**
* PC
* @param
* @return
*/
List<EquOrder> selectEquOrderDetailsList(EquOrder equOrder);
/**
*
* @param equipmentCode
@ -148,4 +141,18 @@ public interface EquOrderMapper {
* @return
*/
void updateEquOrderRepairCode(EquOrder equOrder);
/**
* PC
* @param
* @return
*/
List<EquOrder> selectCheckListByWorkCode(EquOrder equOrder);
/**
* PC
* @param
* @return
*/
List<EquOrder> selectCheckListByRepairCode(EquOrder equOrder);
}

@ -91,6 +91,9 @@ public interface IDevicePDAService {
*/
public AjaxResult updateMaintenanceRecords(EquRepairWorkOrder equRepairWorkOrder);
//获取设备故障类型
// public AjaxResult queryEquFaultTypeTree(EquRepairWorkOrder equRepairWorkOrder);
//待处理
AjaxResult getMaintenancePendRecords(EquRepairWorkOrder equRepairWorkOrder);

@ -23,10 +23,7 @@ import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.*;
import static com.op.common.core.web.domain.AjaxResult.error;
import static com.op.common.core.web.domain.AjaxResult.success;
@ -63,6 +60,9 @@ public class DevicePDAServiceImpl implements IDevicePDAService {
@Autowired
private EquFileMapper equFileMapper;
@Autowired
private EquFaultTypeMapper equFaultTypeMapper;
/**
* list-
@ -272,7 +272,7 @@ public class DevicePDAServiceImpl implements IDevicePDAService {
equTeamUser.setUserName(SecurityUtils.getUsername());
EquTeamUser equTeamUserList = equRepairOrderMapper.getRepairPhoneNumber(equTeamUser);
equRepairOrder.setOrderConnection(equTeamUserList.getPhonenumber());
equRepairOrder.setOrderRepairmanName(equTeamUserList.getNickName());
// 报修来源
if (equOrder.getPlanType().equals("inspection")){
equRepairOrder.setOrderSource("巡检");
@ -421,7 +421,7 @@ public class DevicePDAServiceImpl implements IDevicePDAService {
}
/**
*
*
*
* @param equRepairWorkOrder
* @return
@ -481,7 +481,11 @@ public class DevicePDAServiceImpl implements IDevicePDAService {
public AjaxResult updateDowntime(EquRepairWorkOrder equRepairWorkOrder) {
try {
//不停机 那么实际停机开始时间和实际停机结束时间都没有
//如果停机 那么实际停机时间就是传入的时间 停机时间必须选择校验
//如果停机 那么实际停机时间就是传入的时间
equRepairWorkOrder.setWorkStartTime(DateUtils.getNowDate());
if(equRepairWorkOrder.getWorkDownMachine().equals("1")){
equRepairWorkOrder.setActualDownStartTime(DateUtils.getNowDate());
}
equRepairWorkOrder.setUpdateBy(SecurityUtils.getUsername());
equRepairWorkOrder.setUpdateTime(DateUtils.getNowDate());
//维修中
@ -525,11 +529,12 @@ public class DevicePDAServiceImpl implements IDevicePDAService {
EquOrder equOrder = new EquOrder();
equOrder.setWorkCode(list.getWorkCode());
//检查项
List<EquOrder> checkLists = equOrderMapper.selectEquOrderDetailsList(equOrder);
List<EquOrder> checkLists = equOrderMapper.selectCheckListByWorkCode(equOrder);
//每个检查项对应的检测标准
for(EquOrder equOrder1 :checkLists){
EquOrderStandard equOrderStandard = new EquOrderStandard();
equOrderStandard.setOrderCode(equOrder1.getOrderCode());
equOrderStandard.setParentCode(equOrder1.getId());
List<EquOrderStandard> standardLists = equOrderStandardMapper.selectPdaEquOrderList(equOrderStandard);
for(EquOrderStandard standardList :standardLists){
//每个检查标准里面的照片
@ -569,6 +574,16 @@ public class DevicePDAServiceImpl implements IDevicePDAService {
@DS("#header.poolName")
public AjaxResult updateMaintenanceRecords(EquRepairWorkOrder equRepairWorkOrder) {
try {
//判断是否停机
EquRepairWorkOrder list = equRepairWorkOrderMapper.selectEquRepairWorkOrderByWorkId(equRepairWorkOrder.getWorkId());
if(list.getWorkDownMachine().equals("1")){
//维修结束时间、维修真正停机时间
equRepairWorkOrder.setActualDownEndTime(DateUtils.getNowDate());
equRepairWorkOrder.setWorkEndTime(DateUtils.getNowDate());
//维修完成
equRepairWorkOrder.setWorkStatus("1");
}
//更新每一项点检/巡检检查项信息
List<EquOrder> checkLists = equRepairWorkOrder.getDetailList();
for(EquOrder checkList:checkLists){
@ -601,6 +616,7 @@ public class DevicePDAServiceImpl implements IDevicePDAService {
}
equOrderMapper.updateEquOrder(checkList);
}
//新建申领单 缺少code
List<EquSpareApply> equSpareApplies = equRepairWorkOrder.getApplyList();
for(EquSpareApply equSpareApply:equSpareApplies){
@ -610,7 +626,7 @@ public class DevicePDAServiceImpl implements IDevicePDAService {
equSpareApply.setApplyTime(DateUtils.getNowDate());
equSpareApplyMapper.insertEquSpareApply(equSpareApply);
}
//维修人员名字????前端能够提供吗???
//图片
//先删除每个维修工单对应图片
equRepairWorkOrderMapper.deleteBaseFileBySourceId(equRepairWorkOrder.getWorkId());
@ -635,9 +651,33 @@ public class DevicePDAServiceImpl implements IDevicePDAService {
equRepairWorkOrder.setUpdateBy(SecurityUtils.getUsername());
equRepairWorkOrder.setUpdateTime(DateUtils.getNowDate());
equRepairWorkOrderMapper.updateEquRepairWorkOrder(equRepairWorkOrder);
//需要更新设备状态????这里没做
return success("提交成功,维修完成!");
} catch (Exception e) {
return error();
}
}
/**
*
*
* @param equRepairWorkOrder
* @return
*/
// @Override
// @DS("#header.poolName")
// public AjaxResult queryEquFaultTypeTree(EquRepairWorkOrder equRepairWorkOrder) {
// // 查询一级数据
// List<EquFaultType> firstLevel = equFaultTypeMapper.selectFirstLevelList(equRepairWorkOrder);
// // 一级list
// List<EquFaultTypeTree> firstTree = new ArrayList<>();
// // 判空
// if (!CollectionUtils.isEmpty(firstLevel)) {
// for(EquFaultType equFaultType : firstLevel){
//
// }
// }
//
// return treeAll;
// }
}

@ -2,6 +2,7 @@ package com.op.device.service.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import com.op.common.core.context.SecurityContextHolder;
import com.op.common.core.domain.R;
import com.op.common.core.utils.DateUtils;
import com.op.common.core.utils.uuid.IdUtils;
@ -73,6 +74,10 @@ public class DeviceTaskServiceImpl implements IDeviceTaskService {
@Autowired
private EquOutsourceWorkMapper equOutsourceWorkMapper;
@Autowired
private EquSpareApplyMapper equSpareApplyMapper;
@Autowired
private SparePartsLedgerMapper sparePartsLedgerMapper;
/**
*
* **/
@ -245,6 +250,7 @@ public class DeviceTaskServiceImpl implements IDeviceTaskService {
private int createOrderPlan(EquPlan plan){
Date nowtime = DateUtils.getNowDate();
String createBy = "job";
String factory = plan.getFactoryCode();
int sce = 0;
/**equ_plan->equ_order********************************************************************/
EquOrder order = new EquOrder();
@ -264,20 +270,39 @@ public class DeviceTaskServiceImpl implements IDeviceTaskService {
/**equ_order**/
sce = equOrderMapper.insertEquOrder(order);
System.out.println(plan.getPlanCode()+"========equ_order:"+sce);
/**equ_plan_equ_spare->equ_order_equ_spare*************************************************************/
/**equ_plan_equ_spare->equ_spare_apply*************************************************************/
EquPlanEquSpare equPlanEquSpare = new EquPlanEquSpare();
equPlanEquSpare.setParentCode(plan.getPlanEquId());
List<EquPlanEquSpare> spares = equPlanEquSpareMapper.selectEquPlanEquSpareList(equPlanEquSpare);
for(EquPlanEquSpare spare:spares){
spare.setId(IdUtils.fastSimpleUUID());
spare.setCreateTime(nowtime);
spare.setCreateBy(createBy);
spare.setDelFlag("0");
spare.setCode(orderCode);
// 获取流水单号
int applySerialNum = equSpareApplyMapper.selectSerialNumber();
for (EquPlanEquSpare spare : spares) {
EquSpareApply apply = new EquSpareApply();
apply.setApplyId(IdUtils.fastSimpleUUID());
apply.setApplyCode("A"+DateUtils.dateTimeNow(DateUtils.YYYYMMDD)+String.format("%03d",applySerialNum));
applySerialNum++;
apply.setSpareCode(spare.getMaterialCode());
apply.setSpareName(spare.getMaterialDesc());
apply.setSpareModel(spare.getSpareType());
apply.setSpareQuantity(spare.getApplyNum());
apply.setFactoryCode(factory);
apply.setApplyPeople("job");
apply.setParentCode(orderCode);
apply.setCreateBy("job");
apply.setCreateTime(nowtime);
apply.setSpareUseEquipment(plan.getEquipmentCode());
apply.setApplyTime(nowtime);
// 插入备件信息
equSpareApplyMapper.insertEquSpareApply(apply);
// TODO 减少备件仓库中备件数量
sparePartsLedgerMapper.updateSpareNumReduce(apply);
}
if(!CollectionUtils.isEmpty(spares)){
sce = equOrderEquSpareMapper.insertEquOrderEquSpares(spares);
System.out.println(plan.getPlanCode()+"========equ_order_equ_spare:"+sce);
System.out.println(plan.getPlanCode()+"========equ_spare_apply:"+sce);
}
/**equ_plan_detail->equ_order_detail*******************************************************/

@ -288,6 +288,7 @@ public class EquOrderServiceImpl implements IEquOrderService {
equTeamUser.setUserName(SecurityUtils.getUsername());
EquTeamUser equTeamUserList = equRepairOrderMapper.getRepairPhoneNumber(equTeamUser);
equRepairOrder.setOrderConnection(equTeamUserList.getPhonenumber());
equRepairOrder.setOrderRepairmanName(equTeamUserList.getNickName());
// 报修来源
if (equOrder.getPlanType().equals("inspection")) {

@ -72,11 +72,12 @@ public class EquRepairOrderServiceImpl implements IEquRepairOrderService {
//报修单号
equOrder.setRepairCode(list.getOrderCode());
//检查项
List<EquOrder> checkLists = equOrderMapper.selectEquOrderDetailsList(equOrder);
List<EquOrder> checkLists = equOrderMapper.selectCheckListByRepairCode(equOrder);
//每个检查项对应的检测标准
for(EquOrder equOrder1 :checkLists){
EquOrderStandard equOrderStandard = new EquOrderStandard();
equOrderStandard.setOrderCode(equOrder1.getOrderCode());
equOrderStandard.setParentCode(equOrder1.getId());
List<EquOrderStandard> standardLists = equOrderStandardMapper.selectPdaEquOrderList(equOrderStandard);
for(EquOrderStandard standardList :standardLists){
//每个检查标准里面的照片

@ -68,11 +68,12 @@ public class EquRepairWorkOrderServiceImpl implements IEquRepairWorkOrderService
EquOrder equOrder = new EquOrder();
equOrder.setWorkCode(list.getWorkCode());
//检查项
List<EquOrder> checkLists = equOrderMapper.selectEquOrderDetailsList(equOrder);
List<EquOrder> checkLists = equOrderMapper.selectCheckListByWorkCode(equOrder);
//每个检查项对应的检测标准
for(EquOrder equOrder1 :checkLists){
EquOrderStandard equOrderStandard = new EquOrderStandard();
equOrderStandard.setOrderCode(equOrder1.getOrderCode());
equOrderStandard.setParentCode(equOrder1.getId());
List<EquOrderStandard> standardLists = equOrderStandardMapper.selectPdaEquOrderList(equOrderStandard);
for(EquOrderStandard standardList :standardLists){
//每个检查标准里面的照片

@ -19,6 +19,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<!--故障大类-->
<result property="dictLabel" column="dict_label"/>
<result property="dictValue" column="dict_value"/>
</resultMap>
<sql id="selectEquFaultTypeVo">
@ -125,4 +130,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{faultId}
</foreach>
</delete>
<select id="selectFirstLevelList" resultMap="EquFaultTypeResult">
SELECT
dict_label AS dictLabel
dict_value AS dictValue
FROM sys_dict_data
WHERE dict_type = 'device_fault_type'
</select>
</mapper>

@ -40,6 +40,7 @@
<result property="repairCode" column="repair_code" />
<result property="workCode" column="work_code" />
<result property="id" column="id" />
<result property="itemName" column="item_name" />
<result property="itemMethod" column="item_method" />
<result property="itemType" column="item_type" />
@ -286,23 +287,39 @@
</delete>
<!-- 手持维修查询检查项-->
<select id="selectEquOrderDetailsList" parameterType="EquOrder" resultMap="EquOrderResult">
<select id="selectCheckListByWorkCode" parameterType="EquOrder" resultMap="EquOrderResult">
select
eo.order_id,
eo.order_code,
eo.repair_code,
eo.work_code,
eod.id,
eod.item_name,
eod.item_method,
eod.item_type,
eod.item_type_name
from equ_order eo
left join equ_order_detail eod on eo.order_code = eod.order_code
<where>
<if test="workCode != null "> and eo.work_code = #{workCode}</if>
<if test="repairCode != null "> and eo.repair_code = #{repairCode}</if>
and eo.del_flag = '0'
</where>
where eo.work_code = #{workCode}
and eo.del_flag = '0'
</select>
<!-- 手持报修查询检查项-->
<select id="selectCheckListByRepairCode" parameterType="EquOrder" resultMap="EquOrderResult">
select
eo.order_id,
eo.order_code,
eo.repair_code,
eo.work_code,
eod.id,
eod.item_name,
eod.item_method,
eod.item_type,
eod.item_type_name
from equ_order eo
left join equ_order_detail eod on eo.order_code = eod.order_code
where eo.repair_code = #{repairCode}
and eo.del_flag = '0'
</select>

@ -223,23 +223,19 @@
<!--手持查询维修工单接口 /PC查询点检巡检信息接口-->
<select id="selectPdaEquOrderList" parameterType="EquOrderStandard" resultMap="EquOrderStandardResult">
select
eos.id,
eos.order_code,
eos.standard_name,
<!--eod.item_method,-->
eos.detail_up_limit,
eos.detail_down_limit,
eos.detail_unit,
eos.detail_reach,
eos.actual_value,
eos.standard_type
eos.id,
eos.order_code,
eos.standard_name,
eos.detail_up_limit,
eos.detail_down_limit,
eos.detail_unit,
eos.detail_reach,
eos.actual_value,
eos.standard_type
from equ_order_standard eos
left join equ_order eo on eos.order_code = eo.order_code
<where>
<if test="orderCode != null "> and eo.order_code = #{orderCode}</if>
and eo.del_flag = '0'
and eos.detail_reach = '0'
</where>
where parent_code = #{parentCode}
and order_code = #{orderCode}
and eos.detail_reach = '0'
</select>
<insert id="insertBaseFileBatch">

@ -17,6 +17,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="equipmentCode" column="equipment_code" />
<result property="workCost" column="work_cost" />
<result property="workCostTime" column="work_cost_time" />
<result property="workStatus" column="work_status" />
<result property="attr1" column="attr1" />
<result property="attr2" column="attr2" />
<result property="attr3" column="attr3" />
@ -35,7 +36,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectEquOutsourceWorkVo">
select work_id, work_code,order_code, repair_code, work_person, work_outsourcing_unit, work_connection, work_reason, work_type, equipment_code, work_cost, work_cost_time, attr1, attr2, attr3, del_flag, create_by, create_time, update_by, update_time, factory_code from equ_outsource_work
select work_id, work_code,order_code, repair_code, work_person, work_outsourcing_unit, work_connection, work_reason, work_type, equipment_code, work_cost, work_cost_time,work_status, attr1, attr2, attr3, del_flag, create_by, create_time, update_by, update_time, factory_code from equ_outsource_work
</sql>
<select id="selectEquOutsourceWorkList" parameterType="EquOutsourceWork" resultMap="EquOutsourceWorkResult">
@ -52,6 +53,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
eow.equipment_code,
eow.work_cost,
eow.work_cost_time,
eow.work_status,
eow.attr1,
eow.attr2,
eow.attr3,
@ -111,6 +113,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="equipmentCode != null">equipment_code,</if>
<if test="workCost != null">work_cost,</if>
<if test="workCostTime != null">work_cost_time,</if>
<if test="workStatus != null">work_status,</if>
<if test="attr1 != null">attr1,</if>
<if test="attr2 != null">attr2,</if>
<if test="attr3 != null">attr3,</if>
@ -134,6 +137,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="equipmentCode != null">#{equipmentCode},</if>
<if test="workCost != null">#{workCost},</if>
<if test="workCostTime != null">#{workCostTime},</if>
<if test="workStatus != null">#{workStatus},</if>
<if test="attr1 != null">#{attr1},</if>
<if test="attr2 != null">#{attr2},</if>
<if test="attr3 != null">#{attr3},</if>
@ -160,6 +164,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="equipmentCode != null">equipment_code = #{equipmentCode},</if>
<if test="workCost != null">work_cost = #{workCost},</if>
<if test="workCostTime != null">work_cost_time = #{workCostTime},</if>
<if test="workStatus != null">work_status = #{workStatus},</if>
<if test="attr1 != null">attr1 = #{attr1},</if>
<if test="attr2 != null">attr2 = #{attr2},</if>
<if test="attr3 != null">attr3 = #{attr3},</if>

@ -21,8 +21,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="workDownMachine" column="work_down_machine" />
<result property="workReason" column="work_reason" />
<result property="workFaultDesc" column="work_fault_desc" />
<result property="workStartTime" column="work_start_time" />
<result property="workEndTime" column="work_end_time" />
<result property="actualDownStartTime" column="actual_down_start_time" />
<result property="actualDownEndTime" column="actual_down_end_time" />
<result property="workConnection" column="work_connection" />
<result property="workCostTime" column="work_cost_time" />
<result property="workCost" column="work_cost" />
<result property="workStatus" column="work_status" />
@ -103,6 +109,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
erwo.work_fault_desc,
erwo.work_start_time,
erwo.work_end_time,
erwo.actual_down_start_time,
erwo.actual_down_end_time,
erwo.work_connection,
erwo.work_cost_time,
erwo.work_cost,
erwo.work_status,
@ -178,6 +187,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
erwo.work_fault_desc,
erwo.work_start_time,
erwo.work_end_time,
erwo.actual_down_start_time,
erwo.actual_down_end_time,
erwo.work_connection,
erwo.work_cost_time,
erwo.work_cost,
erwo.work_status,
@ -223,6 +235,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
erwo.work_fault_desc,
erwo.work_start_time,
erwo.work_end_time,
erwo.actual_down_start_time,
erwo.actual_down_end_time,
erwo.work_connection,
erwo.work_cost_time,
erwo.work_cost,
erwo.work_status,
@ -282,6 +297,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="workFaultDesc != null">work_fault_desc,</if>
<if test="workStartTime != null">work_start_time,</if>
<if test="workEndTime != null">work_end_time,</if>
<if test="actualDownStartTime != null">actual_down_start_time,</if>
<if test="actualDownEndTime != null">actual_down_end_time,</if>
<if test="workConnection != null">work_connection,</if>
<if test="workCostTime != null">work_cost_time,</if>
<if test="workCost != null">work_cost,</if>
<if test="workStatus != null">work_status,</if>
@ -315,6 +333,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="workFaultDesc != null">#{workFaultDesc},</if>
<if test="workStartTime != null">#{workStartTime},</if>
<if test="workEndTime != null">#{workEndTime},</if>
<if test="actualDownStartTime != null">#{actualDownStartTime},</if>
<if test="actualDownEndTime != null">#{actualDownEndTime},</if>
<if test="workConnection != null">#{workConnection},</if>
<if test="workCostTime != null">#{workCostTime},</if>
<if test="workCost != null">#{workCost},</if>
<if test="workStatus != null">#{workStatus},</if>
@ -351,6 +372,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="workFaultDesc != null">work_fault_desc = #{workFaultDesc},</if>
<if test="workStartTime != null">work_start_time = #{workStartTime},</if>
<if test="workEndTime != null">work_end_time = #{workEndTime},</if>
<if test="actualDownStartTime != null">actual_down_start_time = #{actualDownStartTime},</if>
<if test="actualDownEndTime != null">actual_down_end_time = #{actualDownEndTime},</if>
<if test="workConnection != null">work_connection = #{workConnection},</if>
<if test="workCostTime != null">work_cost_time = #{workCostTime},</if>
<if test="workCost != null">work_cost = #{workCost},</if>
<if test="workStatus != null">work_status = #{workStatus},</if>

@ -7,9 +7,7 @@ import javax.servlet.http.HttpServletResponse;
import com.op.common.core.utils.DateUtils;
import com.op.common.security.utils.SecurityUtils;
import com.op.quality.domain.QcBomComponent;
import com.op.quality.domain.QcCheckTaskDetail;
import com.op.quality.domain.QcSupplier;
import com.op.quality.domain.*;
import com.op.system.api.domain.SysRole;
import com.op.system.api.domain.SysUser;
import org.apache.commons.lang.StringUtils;
@ -25,7 +23,6 @@ import org.springframework.web.bind.annotation.RestController;
import com.op.common.log.annotation.Log;
import com.op.common.log.enums.BusinessType;
import com.op.common.security.annotation.RequiresPermissions;
import com.op.quality.domain.QcCheckTaskIncome;
import com.op.quality.service.IQcCheckTaskIncomeService;
import com.op.common.core.web.controller.BaseController;
import com.op.common.core.web.domain.AjaxResult;
@ -219,4 +216,10 @@ public class QcCheckTaskIncomeController extends BaseController {
return toAjax(qcCheckTaskIncomeService.commitCheckResult(qcCheckTaskIncome));
}
/**不良类型**/
@PutMapping("/getDefectList")
public List<QcDefectType> getDefectList(@RequestBody QcDefectType qcDefectType) {
return qcCheckTaskIncomeService.getDefectList(qcDefectType);
}
}

@ -9,6 +9,7 @@ import java.util.*;
import javax.servlet.http.HttpServletResponse;
import com.op.common.core.utils.DateUtils;
import com.op.system.api.domain.quality.ChartDTO;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@ -75,7 +76,7 @@ public class QcStaticTableController extends BaseController {
*/
@RequiresPermissions("quality:gcTableProduce:list")
@GetMapping("/getProduceChartData")
public QcStaticTable getProduceList(QcStaticTable qcStaticTable) {
public QcStaticTable getProduceChartData(QcStaticTable qcStaticTable) {
QcStaticTable resultdto = new QcStaticTable();
//默认时间范围T 00:00:00~T+1 00:00:00
if(StringUtils.isEmpty(qcStaticTable.getYmArrayStart())){
@ -88,18 +89,22 @@ public class QcStaticTableController extends BaseController {
//xAxis;
if(qcStaticTable.getYmArrayStart().equals(qcStaticTable.getYmArrayEnd())){
/**月内每日**/
List<String> days = this.getXNames(qcStaticTable.getYmArrayStart(),qcStaticTable.getYmArrayEnd(),"ymd");
List<String> days = this.getXNames(qcStaticTable.getYmArrayStart()+"-01",
qcStaticTable.getYmArrayEnd()+"-01","ymd");
resultdto.setxAxis(days);
}else{
/**年内各月**/
List<String> months = this.getXNames(qcStaticTable.getYmArrayStart(),qcStaticTable.getYmArrayEnd(),"ym");
resultdto.setxAxis(months);
}
//series;//legend.data
List<QcStaticTable> seriesdtos= qcStaticTableService.getProduceChartData(qcStaticTable);
ChartDTO chartDTO = new ChartDTO();
for(QcStaticTable seriesdto:seriesdtos){
chartDTO.setName(seriesdto.getMaterialName());
chartDTO.setType("line");
}
List<QcStaticTable> seriesdto= qcStaticTableService.selectQcStaticTableList(qcStaticTable);
//legend.data
//series;
resultdto.setSeries(null);
return resultdto;
@ -110,30 +115,32 @@ public class QcStaticTableController extends BaseController {
List<String> days = new ArrayList<String>();
DateFormat dateFormat = null;
try {
Calendar tempStart = null;
Calendar tempEnd = null;
if("ymd".equals(type)){
dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date start = dateFormat.parse(startMonth);//开始
Date end = dateFormat.parse(endMonth);//结束
tempStart = Calendar.getInstance();
tempStart.setTime(start);
tempEnd = Calendar.getInstance();
tempEnd.setTime(end);
tempEnd.add(Calendar.MONTH, 1);
}else{
dateFormat = new SimpleDateFormat("yyyy-MM");
}
Date start = dateFormat.parse(startMonth);//开始
Date end = dateFormat.parse(endMonth);//结束
Date start = dateFormat.parse(startMonth);//开始
Date end = dateFormat.parse(endMonth);//结束
tempStart = Calendar.getInstance();
tempStart.setTime(start);
String endTimeStr1 = endMonth;
String[] endTime2 = endTimeStr1.split(" ");
String endTime3 = endTime2[1].split(":")[1];
if(Integer.parseInt(endTime3)!=0){
Calendar calendar = Calendar.getInstance();
calendar.setTime(end);
calendar.add(Calendar.MONTH, 1);
end = calendar.getTime();
tempEnd = Calendar.getInstance();
tempEnd.setTime(end);
tempEnd.add(Calendar.MONTH, 1);
}
Calendar tempStart = Calendar.getInstance();
tempStart.setTime(start);
Calendar tempEnd = Calendar.getInstance();
tempEnd.setTime(end);
while (tempStart.before(tempEnd)) {
days.add(dateFormat.format(tempStart.getTime()));
if("ymd".equals(type)) {

@ -94,6 +94,15 @@ public class QcCheckTaskDetail extends BaseEntity {
private Integer sampleNum;
private List<String> actualValues;
private String typeProjectId;
private String defectCode;
public String getDefectCode() {
return defectCode;
}
public void setDefectCode(String defectCode) {
this.defectCode = defectCode;
}
public String getTypeProjectId() {
return typeProjectId;

@ -44,6 +44,9 @@ public class QcCheckTaskIncome extends BaseEntity {
@Excel(name = "收货数量")
private BigDecimal quality;
@Excel(name = "不合格数量")
private BigDecimal noOkQuality;
/** 单位 */
@Excel(name = "单位")
private String unit;
@ -120,6 +123,14 @@ public class QcCheckTaskIncome extends BaseEntity {
private String typeCode;
private String checkType;
public BigDecimal getNoOkQuality() {
return noOkQuality;
}
public void setNoOkQuality(BigDecimal noOkQuality) {
this.noOkQuality = noOkQuality;
}
public String getCheckType() {
return checkType;
}

@ -128,6 +128,61 @@ public class QcCheckTaskProduce extends BaseEntity {
private String typeCode;
private String checkType;
@Excel(name = "抽样数量")
private BigDecimal sampleQuality;
@Excel(name = "不合格数量")
private BigDecimal noOkQuality;
@Excel(name = "A类不合格数量")
private BigDecimal aNoOkquality;
@Excel(name = "B类不合格数量")
private BigDecimal bNoOkquality;
@Excel(name = "C类不合格数量")
private BigDecimal cNoOkquality;
public BigDecimal getaNoOkquality() {
return aNoOkquality;
}
public void setaNoOkquality(BigDecimal aNoOkquality) {
this.aNoOkquality = aNoOkquality;
}
public BigDecimal getbNoOkquality() {
return bNoOkquality;
}
public void setbNoOkquality(BigDecimal bNoOkquality) {
this.bNoOkquality = bNoOkquality;
}
public BigDecimal getcNoOkquality() {
return cNoOkquality;
}
public void setcNoOkquality(BigDecimal cNoOkquality) {
this.cNoOkquality = cNoOkquality;
}
public BigDecimal getSampleQuality() {
return sampleQuality;
}
public void setSampleQuality(BigDecimal sampleQuality) {
this.sampleQuality = sampleQuality;
}
public BigDecimal getNoOkQuality() {
return noOkQuality;
}
public void setNoOkQuality(BigDecimal noOkQuality) {
this.noOkQuality = noOkQuality;
}
public String getTypeCode() {
return typeCode;
}

@ -4,6 +4,7 @@ import com.op.common.core.annotation.Excel;
import com.op.common.core.web.domain.BaseEntity;
import com.op.system.api.domain.quality.ChartDTO;
import java.math.BigDecimal;
import java.util.List;
/**
@ -42,6 +43,69 @@ public class QcStaticTable extends BaseEntity {
private List<String> legendData;
private List<String> xAxis;
private List<ChartDTO> series;
private String materialCode;
private String materialName;
private String sampleQuality;
private BigDecimal aNoOkquality;
private BigDecimal bNoOkquality;
private BigDecimal cNoOkquality;
private BigDecimal defectRate;//不良率
public BigDecimal getDefectRate() {
return defectRate;
}
public void setDefectRate(BigDecimal defectRate) {
this.defectRate = defectRate;
}
public String getMaterialCode() {
return materialCode;
}
public void setMaterialCode(String materialCode) {
this.materialCode = materialCode;
}
public String getMaterialName() {
return materialName;
}
public void setMaterialName(String materialName) {
this.materialName = materialName;
}
public String getSampleQuality() {
return sampleQuality;
}
public void setSampleQuality(String sampleQuality) {
this.sampleQuality = sampleQuality;
}
public BigDecimal getaNoOkquality() {
return aNoOkquality;
}
public void setaNoOkquality(BigDecimal aNoOkquality) {
this.aNoOkquality = aNoOkquality;
}
public BigDecimal getbNoOkquality() {
return bNoOkquality;
}
public void setbNoOkquality(BigDecimal bNoOkquality) {
this.bNoOkquality = bNoOkquality;
}
public BigDecimal getcNoOkquality() {
return cNoOkquality;
}
public void setcNoOkquality(BigDecimal cNoOkquality) {
this.cNoOkquality = cNoOkquality;
}
public String getYmArrayStart() {
return ymArrayStart;

@ -3,6 +3,7 @@ package com.op.quality.mapper;
import java.util.List;
import com.op.quality.domain.QcCheckUnqualified;
import com.op.quality.domain.QcDefectType;
import org.apache.ibatis.annotations.Mapper;
/**
@ -60,4 +61,6 @@ public interface QcCheckUnqualifiedMapper {
* @return
*/
public int deleteQcCheckUnqualifiedByIds(String[] ids);
public List<QcDefectType> getDefectList(QcDefectType qcDefectType);
}

@ -30,4 +30,6 @@ public interface QcStaticTableMapper {
@MapKey("supplierCode")
public Map<String, QcStaticTable> selectNumMap(@Param("qc")QcStaticTable qcStaticTable,
@Param("codes")List<QcStaticTable> tabledtos);
List<QcStaticTable> getProduceChartData(QcStaticTable qcStaticTable);
}

@ -2,10 +2,7 @@ package com.op.quality.service;
import java.util.List;
import com.op.quality.domain.QcBomComponent;
import com.op.quality.domain.QcCheckTaskDetail;
import com.op.quality.domain.QcCheckTaskIncome;
import com.op.quality.domain.QcSupplier;
import com.op.quality.domain.*;
import com.op.system.api.domain.SysUser;
/**
@ -78,4 +75,6 @@ public interface IQcCheckTaskIncomeService {
int commitActualValue(QcCheckTaskDetail qcCheckTaskDetail);
int commitCheckResult(QcCheckTaskIncome qcCheckTaskIncome);
List<QcDefectType> getDefectList(QcDefectType qcDefectType);
}

@ -19,4 +19,5 @@ public interface IQcStaticTableService {
*/
public List<QcStaticTable> selectQcStaticTableList(QcStaticTable qcStaticTable);
public List<QcStaticTable> getProduceChartData(QcStaticTable qcStaticTable);
}

@ -279,4 +279,10 @@ public class QcCheckTaskIncomeServiceImpl implements IQcCheckTaskIncomeService {
return n ;
}
@Override
@DS("#header.poolName")
public List<QcDefectType> getDefectList(QcDefectType qcDefectType) {
return qcCheckUnqualifiedMapper.getDefectList(qcDefectType);
}
}

@ -104,4 +104,22 @@ public class QcStaticTableServiceImpl implements IQcStaticTableService {
return tabledtos;
}
/**
* = (A*1+B*0.65+C*0.35)/
* @param qcStaticTable
* @return
*/
@Override
@DS("#header.poolName")
public List<QcStaticTable> getProduceChartData(QcStaticTable qcStaticTable) {
List<QcStaticTable> dtos = qcStaticTableMapper.getProduceChartData(qcStaticTable);
for(QcStaticTable dto:dtos){
BigDecimal defectRate = (dto.getaNoOkquality().add(dto.getbNoOkquality()).multiply(new BigDecimal("0.65"))
.add(dto.getcNoOkquality()).multiply(new BigDecimal(0.35)))
.divide(new BigDecimal(dto.getSampleQuality()));
dto.setDefectRate(defectRate);
}
return dtos;
}
}

@ -166,6 +166,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="factoryCode != null and factoryCode != ''">factory_code = #{factoryCode},</if>
<if test="delFlag != null">del_flag = #{delFlag},</if>
<if test="defectCode != null">defect_code = #{defectCode},</if>
</trim>
where record_id = #{recordId}
</update>

@ -12,6 +12,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="materialCode" column="material_code" />
<result property="materialName" column="material_name" />
<result property="quality" column="quality" />
<result property="noOkQuality" column="noOk_quality" />
<result property="unit" column="unit" />
<result property="supplierCode" column="supplier_code" />
<result property="supplierName" column="supplier_name" />
@ -40,7 +41,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select record_id, check_no, income_batch_no, order_no, material_code, material_name, quality, unit,
supplier_code, supplier_name, income_time, check_loc, check_status, check_man_code,
check_man_name, check_time, check_result, status, attr1, attr2, attr3, attr4, create_by,
create_time, update_by, update_time, factory_code, del_flag , check_type
create_time, update_by, update_time, factory_code, del_flag , check_type,noOk_quality
from qc_check_task
</sql>
@ -49,7 +50,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
qct.order_no, qct.material_code, qct.material_name, qct.quality, qct.unit,
qct.supplier_code, qct.supplier_name, qct.income_time, qct.check_loc, qct.check_status,
qct.check_man_code, qct.check_man_name,qct.check_time, qct.check_result, qct.status,
qct.create_by,qct.create_time, qct.update_by, qct.update_time,qct.check_type,
qct.create_by,qct.create_time, qct.update_by, qct.update_time,qct.check_type,qct.noOk_quality,
q.type_code
from qc_check_task qct
left join qc_check_type q on q.id = qct.check_type
@ -148,6 +149,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="materialCode != null">material_code,</if>
<if test="materialName != null">material_name,</if>
<if test="quality != null">quality,</if>
<if test="noOkQuality != null">noOk_quality,</if>
<if test="unit != null">unit,</if>
<if test="supplierCode != null">supplier_code,</if>
<if test="supplierName != null">supplier_name,</if>
@ -179,6 +181,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="materialCode != null">#{materialCode},</if>
<if test="materialName != null">#{materialName},</if>
<if test="quality != null">#{quality},</if>
<if test="noOkQuality != null">#{noOkQuality},</if>
<if test="unit != null">#{unit},</if>
<if test="supplierCode != null">#{supplierCode},</if>
<if test="supplierName != null">#{supplierName},</if>
@ -213,6 +216,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="materialCode != null">material_code = #{materialCode},</if>
<if test="materialName != null">material_name = #{materialName},</if>
<if test="quality != null">quality = #{quality},</if>
<if test="noOkQuality != null">noOk_quality = #{noOkQuality},</if>
<if test="unit != null">unit = #{unit},</if>
<if test="supplierCode != null">supplier_code = #{supplierCode},</if>
<if test="supplierName != null">supplier_name = #{supplierName},</if>

@ -12,6 +12,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="materialCode" column="material_code" />
<result property="materialName" column="material_name" />
<result property="quality" column="quality" />
<result property="sampleQuality" column="sample_quality" />
<result property="noOkQuality" column="noOk_quality" />
<result property="unit" column="unit" />
<result property="supplierCode" column="supplier_code" />
<result property="supplierName" column="supplier_name" />
@ -41,7 +43,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
quality, unit, supplier_code, supplier_name, income_time, check_loc, check_status,
check_man_code, check_man_name, check_time, check_result, status, attr1,
attr2, attr3, attr4, create_by, create_time, update_by, update_time,
factory_code, del_flag , check_type
factory_code, del_flag , check_type,sample_quality,noOk_quality,
aNoOkquality,bNoOkquality,cNoOkquality
from qc_check_task
</sql>
@ -50,7 +53,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
qct.order_no, qct.material_code, qct.material_name, qct.quality, qct.unit,
qct.supplier_code, qct.supplier_name, qct.income_time, qct.check_loc, qct.check_status,
qct.check_man_code, qct.check_man_name,qct.check_time, qct.check_result, qct.status,
qct.create_by,qct.create_time, qct.update_by, qct.update_time,qct.check_type,
qct.create_by,qct.create_time, qct.update_by, qct.update_time,
qct.check_type,qct.sample_quality,qct.noOk_quality,
qct.aNoOkquality,qct.bNoOkquality,qct.cNoOkquality,
q.type_code
from qc_check_task qct
left join qc_check_type q on q.id = qct.check_type
@ -113,6 +118,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="materialCode != null">material_code,</if>
<if test="materialName != null">material_name,</if>
<if test="quality != null">quality,</if>
<if test="sampleQuality != null">sample_quality,</if>
<if test="noOkQuality != null">noOk_quality,</if>
<if test="aNoOkquality != null">aNoOkquality,</if>
<if test="bNoOkquality != null">bNoOkquality,</if>
<if test="cNoOkquality != null">cNoOkquality,</if>
<if test="unit != null">unit,</if>
<if test="supplierCode != null">supplier_code,</if>
<if test="supplierName != null">supplier_name,</if>
@ -144,6 +154,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="materialCode != null">#{materialCode},</if>
<if test="materialName != null">#{materialName},</if>
<if test="quality != null">#{quality},</if>
<if test="sampleQuality != null">#{sampleQuality},</if>
<if test="noOkQuality != null">#{noOkQuality},</if>
<if test="aNoOkquality != null">#{aNoOkquality},</if>
<if test="bNoOkquality != null">#{bNoOkquality},</if>
<if test="cNoOkquality != null">#{cNoOkquality},</if>
<if test="unit != null">#{unit},</if>
<if test="supplierCode != null">#{supplierCode},</if>
<if test="supplierName != null">#{supplierName},</if>
@ -178,6 +193,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="materialCode != null">material_code = #{materialCode},</if>
<if test="materialName != null">material_name = #{materialName},</if>
<if test="quality != null">quality = #{quality},</if>
<if test="sampleQuality != null">sample_quality = #{sampleQuality},</if>
<if test="noOkQuality != null">noOk_quality = #{noOkQuality},</if>
<if test="aNoOkquality != null">aNoOkquality = #{aNoOkquality},</if>
<if test="bNoOkquality != null"> bNoOkquality = #{bNoOkquality},</if>
<if test="cNoOkquality != null">cNoOkquality = #{cNoOkquality},</if>
<if test="unit != null">unit = #{unit},</if>
<if test="supplierCode != null">supplier_code = #{supplierCode},</if>
<if test="supplierName != null">supplier_name = #{supplierName},</if>

@ -67,8 +67,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
left join qc_check_type qtn on qtn.id = qct.check_type
where qcu.id = #{id}
</select>
<select id="getDefectList" resultType="com.op.quality.domain.QcDefectType">
select defect_code defectCode,
defect_subclass defectSubclass
from qc_defect_type
where defect_type = #{defectType} and del_flag='0'
</select>
<insert id="insertQcCheckUnqualified" parameterType="QcCheckUnqualified">
<insert id="insertQcCheckUnqualified" parameterType="QcCheckUnqualified">
insert into qc_check_unqualified
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">id,</if>

@ -56,5 +56,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</if>
group by qct.supplier_code,qct.supplier_name
</select>
<select id="getProduceChartData" resultType="com.op.quality.domain.QcStaticTable">
select material_code materialCode,
material_name materialName,
sample_quality sampleQuality,
aNoOkquality,
bNoOkquality,
cNoOkquality
from qc_check_task
where del_flag = '0'
</select>
</mapper>

Loading…
Cancel
Save