package cn.iocoder.yudao.module.tickets.controller.admin;


import cn.iocoder.yudao.common.RecordTypeEnum;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.security.core.LoginUser;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.base.service.RepairRecordsService;
import cn.iocoder.yudao.module.tickets.entity.DlRepairTickets;
import cn.iocoder.yudao.module.tickets.entity.DlRepairTitem;
import cn.iocoder.yudao.module.tickets.service.DlRepairTicketsService;
import cn.iocoder.yudao.module.tickets.service.DlRepairTitemService;
import cn.iocoder.yudao.module.tickets.vo.AddProjVO;
import cn.iocoder.yudao.module.tickets.vo.DlRepairTitemReqVO;
import cn.iocoder.yudao.module.tickets.vo.DlRepairTitemRespVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;

import static cn.iocoder.yudao.framework.common.pojo.CommonResult.ok;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;

/**
 * 维修工单子表(DlRepairTitem)表控制层
 *
 * @author 小李
 * @date 18:21 2024/9/13
 **/
@RestController
    @RequestMapping("/repair/titem")
public class DlRepairTitemController {
    /**
     * 服务对象
     */
    @Resource
    private DlRepairTitemService dlRepairTitemService;
    @Resource
    private DlRepairTicketsService dlRepairTicketsService;
    @Resource
    private RepairRecordsService repairRecordsService;

    /**
     * 维修工单子表 分页
     *
     * @author 小李
     * @date 10:34 2024/9/21
     * @param repairTitemRespVO 查询对象
     * @param pageNo 页码
     * @param pageSize 条数
    **/
    @GetMapping("/page")
    @Operation(summary = "维修工单子表 分页")
    public CommonResult<?> getTItemPage(DlRepairTitemRespVO repairTitemRespVO,
                                        @RequestParam(value = "pageNo", defaultValue = "1")Integer pageNo,
                                        @RequestParam(value = "pageSize", defaultValue = "10")Integer pageSize){
        Page<DlRepairTitemRespVO> page = new Page<>(pageNo, pageSize);
        return success(dlRepairTitemService.getTItemPage(repairTitemRespVO, page));
    }

    /**
     * 获取当前操作人操作的工单中的项目
     *
     * @author 小李
     * @date 15:01 2024/10/18
     * @param ticketId 工单ID
    **/
    @GetMapping("/listProject")
    @Operation(summary = "获取当前操作人操作的工单中的项目")
    public CommonResult<?> getProjectList(@RequestParam("ticketId") String ticketId){
        return success(dlRepairTitemService.getProjectList(ticketId));
    }

    /**
     * 修改维修工单子表的维修人员和销售人员信息(app)
     * @param dlRepairTitemReqVO
     * @return
     */
    @PutMapping("/updateRepairAndSale")
    @Operation(summary = "修改维修工单子表的维修人员和销售人员信息")
    public CommonResult<?> updateRepairAndSale(@RequestBody DlRepairTitemReqVO dlRepairTitemReqVO){
        return success(dlRepairTitemService.updateRepairAndSale(dlRepairTitemReqVO));
    }

   /**
    * 更新工单子表，维修项目配件的单价、数量、折扣、单项总价等
    * @author vinjor-M
    * @date 16:10 2024/10/31
    * @param addProjVO 工单子表列表
    * @return cn.iocoder.yudao.framework.common.pojo.CommonResult<?>
   **/
    @PutMapping("/updateRepairItem")
    @Operation(summary = "修改维修工单子表的维修人员和销售人员信息")
    public CommonResult<?> updateRepairItem(@RequestBody AddProjVO addProjVO){
        //删除项目
        if(null!=addProjVO.getDelProjIdList() && !addProjVO.getDelProjIdList().isEmpty()){
            dlRepairTitemService.removeBatchByIds(addProjVO.getDelProjIdList());
            //更新主表的id
            DlRepairTickets repairTickets = new DlRepairTickets();
            repairTickets.setId(addProjVO.getTicketId());
            repairTickets.setUpdateTime(LocalDateTime.now());
            dlRepairTicketsService.updateById(repairTickets);
        }
        if(!addProjVO.getItemList().isEmpty()){
            //更新项目
            dlRepairTitemService.updateRepairItem(addProjVO.getItemList());
        }
        return ok();
    }

    /**
     * 查看单个维修子表的数据
     *
     * @author 小李
     * @param id 子表ID
    **/
    @GetMapping("/getById")
    @Operation(summary = "查看单个维修子表的数据")
    public CommonResult<?> getItemById(@RequestParam("id") String id){
        return success(dlRepairTitemService.getItemById(id));
    }

    /**
     * 修改单个工单子项的内容
     *
     * @author 小李
     * @date 15:41 2024/10/24
     * @param dlRepairTitemReqVO 对象
    **/
    @PostMapping("/updateById")
    @Operation(summary = "修改单个工单子项的内容")
    public CommonResult<?> updateItemById(@RequestBody DlRepairTitemReqVO dlRepairTitemReqVO){
        dlRepairTitemService.updateItemById(dlRepairTitemReqVO);
        return CommonResult.ok();
    }

    /**
     * 添加维修项目
     * @author vinjor-M
     * @date 14:28 2024/11/4
     * @return cn.iocoder.yudao.framework.common.pojo.CommonResult<?>
    **/
    @PostMapping("/addNewProj")
    @Operation(summary = "添加维修项目")
    public CommonResult<?> addNewProj(@RequestBody AddProjVO addProjVO){
        //获取当前登录用户
        LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
        addProjVO.getItemList().forEach(item->{
            if(null==item.getSaleId()){
                //默认销售人员是当前用户
                item.setSaleId(loginUser.getId());
                item.setSaleName(loginUser.getInfo().get("nickname"));
            }
        });
        dlRepairTitemService.saveBatch(addProjVO.getItemList());
        //更新主表的更新时间
        DlRepairTickets repairTickets = new DlRepairTickets();
        repairTickets.setId(addProjVO.getItemList().get(0).getTicketId());
        repairTickets.setUpdateTime(LocalDateTime.now());
        dlRepairTicketsService.updateById(repairTickets);

        List<String> projNameList = addProjVO.getItemList().stream().map(DlRepairTitem::getItemName).collect(Collectors.toList());
        //最后记录操作日志--创建工单
        String remark = "添加维修项目"+String.join(", ",projNameList )+"。";
        if(StringUtils.isNotEmpty(addProjVO.getRemark())){
            remark += "备注："+addProjVO.getRemark();
        }
        repairRecordsService.saveRepairRecord(addProjVO.getItemList().get(0).getTicketId(), null, RecordTypeEnum.TJWXXM.getCode(), remark, addProjVO.getImage());
        return CommonResult.success(addProjVO.getItemList().get(0).getTicketId());
    }

    /**
     * 维修工单单个子项
     *
     * @author 小李
     * @date 20:18 2024/10/24
     * @param id 工单子项ID
    **/
    @DeleteMapping("/removeById")
    @Operation(summary = "维修工单单个子项")
    public CommonResult<?> removeItemById(@RequestParam("id") String id){
        dlRepairTitemService.removeItemById(id);
        return CommonResult.ok();
    }

    /**
     * 查某工单维修项目进度
     * @author vinjor-M
     * @date 10:57 2024/11/5
     * @param ticketId 工单id
    **/
    @GetMapping("/getProjList")
    @Operation(summary = "查某工单维修项目进度")
    public CommonResult<?> getProjList(@RequestParam("ticketId") String ticketId){
        return success(dlRepairTitemService.getProjList(ticketId,null));
    }
}

