diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/company/controller/admin/CompanyController.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/company/controller/admin/CompanyController.java index 27fd209a..1a483be6 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/company/controller/admin/CompanyController.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/company/controller/admin/CompanyController.java @@ -2,38 +2,32 @@ package cn.iocoder.yudao.module.company.controller.admin; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.common.CommonErrorCodeConstants; import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; +import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; import cn.iocoder.yudao.module.company.entity.Company; +import cn.iocoder.yudao.module.company.service.CompanyService; +import cn.iocoder.yudao.module.company.vo.CompanyReqVO; import cn.iocoder.yudao.module.company.vo.CompanyRespVO; import cn.iocoder.yudao.module.system.api.dept.DeptApi; import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; -import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import cn.iocoder.yudao.module.company.vo.CompanyReqVO; -import io.swagger.v3.oas.annotations.Parameter; -import org.apache.commons.lang3.StringUtils; -import org.springframework.context.annotation.Lazy; -import org.springframework.web.bind.annotation.*; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Operation; - -import cn.iocoder.yudao.framework.common.pojo.CommonResult; - -import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception0; -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; -import cn.iocoder.yudao.module.company.service.CompanyService; +import org.springframework.context.annotation.Lazy; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; @@ -43,6 +37,10 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception0; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + /** * 企业信息表(每个租户的下属企业信息);(dl_company)表控制层 * @@ -198,4 +196,23 @@ public class CompanyController { } return success(companyService.getById(dept.getCorpId())); } + + /** + * 查某租户下某个业务系统的企业信息 + * @author vinjor-M + * @date 15:08 2024/11/15 + * @param tenantId 租户ID + * @param systemCode 系统标识 + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult + **/ + @GetMapping("/getCompanyByTenantId") + @Operation(summary = "查某租户下某个业务系统的企业信息") + public CommonResult getCompanyByTenantId(String tenantId,String systemCode){ + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(TenantBaseDO::getTenantId,tenantId) + .like(Company::getServiceCodes,systemCode) + .orderByDesc(BaseDO::getCreateTime); + List list = this.companyService.list(queryWrapper); + return success(list.isEmpty()?null:list.get(0)); + } } \ No newline at end of file diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/company/entity/Company.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/company/entity/Company.java index 08d61e7d..acbd50cc 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/company/entity/Company.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/company/entity/Company.java @@ -30,6 +30,9 @@ public class Company extends TenantBaseDO { /** 企业名称 */ @ExcelProperty("企业名称") private String corpName ; + /** 企业简称 */ + @ExcelProperty("企业简称") + private String simpleName ; /** 统一社会信用代码 */ @ExcelProperty("统一社会信用代码") private String orgCard ; diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/conf/controller/admin/BaseTypeController.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/conf/controller/admin/BaseTypeController.java index cfb48480..c5b01923 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/conf/controller/admin/BaseTypeController.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/conf/controller/admin/BaseTypeController.java @@ -101,6 +101,4 @@ public class BaseTypeController { public CommonResult> getBaseTypeList(@Valid BaseTypeListReqVO listReqVO) { return success(baseTypeService.getBaseTypeList(listReqVO)); } - - } \ No newline at end of file diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/controller/admin/CarBrandController.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/controller/admin/CarBrandController.java index 8f438392..0869d603 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/controller/admin/CarBrandController.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/controller/admin/CarBrandController.java @@ -77,7 +77,8 @@ public class CarBrandController { @GetMapping("/get") @Operation(summary = "获得车辆品牌") @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('base:car-brand:query')") + // 有些地方要用,但是又没有权限,故把查看单个的权限公开---小李 +// @PreAuthorize("@ss.hasPermission('base:car-brand:query')") public CommonResult getCarBrand(@RequestParam("id") String id) { CarBrand carBrand = carBrandService.getCarBrand(id); return success(BeanUtils.toBean(carBrand, CarBrandRespVO.class)); diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/controller/admin/CarMainController.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/controller/admin/CarMainController.java index 4026042e..4d5fa91c 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/controller/admin/CarMainController.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/custom/controller/admin/CarMainController.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.custom.controller.admin; +import cn.hutool.core.collection.CollectionUtil; import cn.iocoder.yudao.module.custom.entity.CarMain; import cn.iocoder.yudao.module.custom.service.CarMainService; import cn.iocoder.yudao.module.custom.service.UserCarService; @@ -215,8 +216,10 @@ public class CarMainController { @PostMapping("/getByLicenseNumber") @Operation(summary = "根据车牌查单条记录") public CommonResult getByLicenseNumber(@RequestBody CarMain carMain) { - CarMain one = carMainService.getOne(new LambdaQueryWrapper().eq(CarMain::getLicenseNumber, carMain.getLicenseNumber())); - return success(one); + // 可能查到多条,只用一条就是,理论上讲是不会有多条的 +// CarMain one = carMainService.list(new LambdaQueryWrapper().eq(CarMain::getLicenseNumber, carMain.getLicenseNumber())); + List list = carMainService.list(new LambdaQueryWrapper().eq(CarMain::getLicenseNumber, carMain.getLicenseNumber()).last("limit 1")); + return success(CollectionUtil.isNotEmpty(list) ? list.get(0) : null); } /** diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/tickets/entity/BaseRepairRecords.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/tickets/entity/BaseRepairRecords.java new file mode 100644 index 00000000..01118bdc --- /dev/null +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/tickets/entity/BaseRepairRecords.java @@ -0,0 +1,53 @@ +package cn.iocoder.yudao.module.tickets.entity; + +import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +/** + * 维修记录 DO + * + * @author lzt + */ +@TableName("dl_repair_records") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BaseRepairRecords extends TenantBaseDO { + + /** + * 主键标识 + */ + @TableId(type = IdType.ASSIGN_UUID) + private String id; + /** + * 工单id + */ + private String ticketId; + /** + * 工单子表id + */ + private String repairItemId; + /** + * 记录类型(repair_records_type) + */ + private String type; + /** + * 记录描述 + */ + private String remark; + /** + * 处理人 + */ + private String dealUserName; + /** + * 处理人员工表id + */ + private Long dealUserId; + +} diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/tickets/mapper/BaseRepairRecordsMapper.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/tickets/mapper/BaseRepairRecordsMapper.java new file mode 100644 index 00000000..90da3a52 --- /dev/null +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/tickets/mapper/BaseRepairRecordsMapper.java @@ -0,0 +1,14 @@ +package cn.iocoder.yudao.module.tickets.mapper; + +import cn.iocoder.yudao.module.tickets.entity.BaseRepairRecords; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 维修记录 Mapper + * + * @author lzt + */ +@Mapper +public interface BaseRepairRecordsMapper extends BaseMapper { +} diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/tickets/service/BaseRepairRecordsService.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/tickets/service/BaseRepairRecordsService.java new file mode 100644 index 00000000..1cc3a465 --- /dev/null +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/tickets/service/BaseRepairRecordsService.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.tickets.service; + +import cn.iocoder.yudao.module.tickets.entity.BaseRepairRecords; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 维修记录 Service 接口 + * + * @author lzt + */ +public interface BaseRepairRecordsService extends IService { + + /** + * 保存维修记录 + * + * @param ticketId 工单id +// * @param repairItemId 工单子表id + * @param type 工作类型(数据字典:repair_records_type;后端对应 RecordTypeEnum 枚举) + * @param remark 备注 + * @param images 图片(相对路径按照“,”分隔) + * @author PQZ + * @date 14:51 2024/10/11 + **/ + void saveRepairRecord(String ticketId, String repairItemId, String type, String remark, String images); + +} diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/BaseRepairRecordsServiceImpl.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/BaseRepairRecordsServiceImpl.java new file mode 100644 index 00000000..dc793841 --- /dev/null +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/BaseRepairRecordsServiceImpl.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.tickets.service.impl; + +import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; +import cn.iocoder.yudao.module.tickets.entity.BaseRepairRecords; +import cn.iocoder.yudao.module.tickets.mapper.BaseRepairRecordsMapper; +import cn.iocoder.yudao.module.tickets.service.BaseRepairRecordsService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; + +/** + * 维修记录 Service 实现类 + * + * @author lzt + */ +@Service +@Validated +public class BaseRepairRecordsServiceImpl extends ServiceImpl implements BaseRepairRecordsService { + + @Resource + private AdminUserApi userApi; + + /** + * 保存维修记录 + * + * @param ticketId 工单id + * @param repairItemId 工单子表id + * @param type 工作类型(数据字典:repair_records_type;后端对应 RecordTypeEnum 枚举) + * @param remark 备注 + * @param images 图片(相对路径按照“,”分隔) + * @author PQZ + * @date 14:51 2024/10/11 + **/ + @Override + public void saveRepairRecord(String ticketId, String repairItemId, String type, String remark, String images) { + //获取当前登录用户 + Long userId = SecurityFrameworkUtils.getLoginUserId(); + AdminUserRespDTO loginUser = userApi.getUser(userId); + //初始化维修记录 + BaseRepairRecords repairRecords = new BaseRepairRecords(); + repairRecords.setTicketId(ticketId); + repairRecords.setRepairItemId(repairItemId); + repairRecords.setType(type); + repairRecords.setRemark(remark); + repairRecords.setDealUserId(loginUser.getId()); + repairRecords.setDealUserName(loginUser.getNickname()); + //保存维修记录 + save(repairRecords); + } + +} diff --git a/dl-module-base/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/TicketsServiceImpl.java b/dl-module-base/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/TicketsServiceImpl.java index c7655f73..b6db061e 100644 --- a/dl-module-base/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/TicketsServiceImpl.java +++ b/dl-module-base/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/TicketsServiceImpl.java @@ -2,9 +2,11 @@ package cn.iocoder.yudao.module.tickets.service.impl; import cn.iocoder.yudao.module.tickets.entity.Tickets; import cn.iocoder.yudao.module.tickets.mapper.TicketsMapper; +import cn.iocoder.yudao.module.tickets.service.BaseRepairRecordsService; import cn.iocoder.yudao.module.tickets.service.TicketsService; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @@ -15,6 +17,8 @@ import java.util.List; **/ @Service public class TicketsServiceImpl extends ServiceImpl implements TicketsService { + @Autowired + private BaseRepairRecordsService baseRepairRecordsService; /** * 更新工单状态为已结账 @@ -29,7 +33,12 @@ public class TicketsServiceImpl extends ServiceImpl impl baseMapper.update(new LambdaUpdateWrapper() .in(Tickets::getId, ticketIds) .set(Tickets::getTicketsStatus, "02") - .set(Tickets::getIsFinish, "1") + // 不在这儿结束 +// .set(Tickets::getIsFinish, "1") ); + // 记录日志 + if(!ticketIds.isEmpty()){ + baseRepairRecordsService.saveRepairRecord(ticketIds.get(0), null, "js", "线上支付结算", null); + } } } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/common/RecordTypeEnum.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/common/RecordTypeEnum.java index 9955cce4..9a5c946c 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/common/RecordTypeEnum.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/common/RecordTypeEnum.java @@ -35,6 +35,10 @@ public enum RecordTypeEnum { * 总检 */ ZJ("zj","总检"), + /** + * 结算 + */ + JS("js","结算"), /** * 结束工单 */ @@ -76,6 +80,9 @@ public enum RecordTypeEnum { /** 删除工单 */ SCGG("scgg", "删除工单"), + /** 删除工单 */ + JC("jc", "交车"), + /** 内返派工 */ NFPG("nfpg", "内返派工"); diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/common/TicketsStatusEnum.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/common/TicketsStatusEnum.java index 26b53e87..ce29b4bb 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/common/TicketsStatusEnum.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/common/TicketsStatusEnum.java @@ -27,6 +27,10 @@ public enum TicketsStatusEnum { * 待通知客户取车 */ WAITING_NOTICE("07","待通知客户取车"), + /** + * 已交车 + */ + OVER("08","已交车"), /** * 挂单/记账 */ diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/app/tickets/controller/TicketsAPI.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/app/tickets/controller/TicketsAPI.java index 7c925361..5a7be083 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/app/tickets/controller/TicketsAPI.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/app/tickets/controller/TicketsAPI.java @@ -39,6 +39,6 @@ public class TicketsAPI { @Operation(summary = "维修工单表 查看一个工单的详细信息") @TenantIgnore public CommonResult getTicketsById(@RequestParam(value = "id") String id){ - return success(dlRepairTicketsService.getTicketsById(id)); + return success(dlRepairTicketsService.getTicketsById(id,null)); } } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/controller/admin/RepairWorkerController.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/controller/admin/RepairWorkerController.java index b6516a80..6c61363e 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/controller/admin/RepairWorkerController.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/controller/admin/RepairWorkerController.java @@ -123,6 +123,12 @@ public class RepairWorkerController { return success(workerService.listByLeads()); } + @GetMapping("/listLeadsAll") + @Operation(summary = "通过班组长的id查该班组的员工(不去掉班组长)") + public CommonResult listLeadsAll() { + return success(workerService.listLeadsAll()); + } + /** * 查当前登录用户是否维修班组长 * @author vinjor-M diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/RepairWorkerService.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/RepairWorkerService.java index 72ac833c..f1edb86f 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/RepairWorkerService.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/RepairWorkerService.java @@ -106,6 +106,14 @@ public interface RepairWorkerService extends IService { **/ List listByLeads(); + /** + * 通过班组长的id查该班组的员工(不去掉班组长) + * @author PQZ + * @date 15:20 2024/11/13 + * @return java.util.List + **/ + List listLeadsAll(); + /** * 查当前登录用户是否维修班组长 * @author vinjor-M diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/impl/RepairWorkerServiceImpl.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/impl/RepairWorkerServiceImpl.java index 52f29168..5110d502 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/impl/RepairWorkerServiceImpl.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/base/service/impl/RepairWorkerServiceImpl.java @@ -272,6 +272,21 @@ public class RepairWorkerServiceImpl extends ServiceImpl !Objects.equals(item.getUserId(), worker.getUserId())).collect(Collectors.toList()); } + /** + * 通过班组长的id查该班组的员工()不去掉班组长 + * + * @return java.util.List + * @author PQZ + * @date 15:20 2024/11/13 + **/ + @Override + public List listLeadsAll() { + // 取班组长的记录 + RepairWorker worker = baseMapper.selectOne(new LambdaQueryWrapper().eq(RepairWorker::getUserId, SecurityFrameworkUtils.getLoginUserId())); + // 根据班组长的工种查所有该工程的工人 + return baseMapper.selectList(new LambdaQueryWrapper().eq(RepairWorker::getWorkType, worker.getWorkType())); + } + /** * 查当前登录用户是否维修班组长 * diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/controller/admin/DlRepairSoController.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/controller/admin/DlRepairSoController.java index 26cf5395..0185b5be 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/controller/admin/DlRepairSoController.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/controller/admin/DlRepairSoController.java @@ -88,6 +88,19 @@ public class DlRepairSoController { return success(dlRepairSoService.getRepairSoById(id)); } + /** + * 领料单、退料单APP查看 + * @author vinjor-M + * @date 11:10 2024/11/21 + * @param id 单据id + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult + **/ + @GetMapping("/getApp") + @Operation(summary = "采购单/领料单 查看") + public CommonResult getApp(@RequestParam("id") String id) { + return success(dlRepairSoService.getApp(id)); + } + /** * 员工确认领料 * @@ -120,15 +133,15 @@ public class DlRepairSoController { /** * 采购入库 * - * @param repairSoReqVO DlRepairSoReqVO实体 + * @param repairSoRespVO DlRepairSoReqVO实体 * @return cn.iocoder.yudao.framework.common.pojo.CommonResult * @author PQZ * @date 10:43 2024/10/25 **/ @PostMapping("/inWare") @Operation(summary = "采购入库") - public CommonResult inWare(@RequestBody DlRepairSoReqVO repairSoReqVO) { - dlRepairSoService.inWare(repairSoReqVO); + public CommonResult inWare(@RequestBody DlRepairSoRespVO repairSoRespVO) { + dlRepairSoService.inWare(repairSoRespVO); return CommonResult.ok(); } } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/controller/admin/DlRepairSoiController.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/controller/admin/DlRepairSoiController.java index 81b72808..5377cc1a 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/controller/admin/DlRepairSoiController.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/controller/admin/DlRepairSoiController.java @@ -75,5 +75,18 @@ public class DlRepairSoiController{ public CommonResult getRepairSoiBySoId(@RequestParam(value = "soId") String soId){ return success(dlRepairSoiService.getRepairSoiBySoId(soId)); } + + /** + * 根据主表的ID得到子表的所有数据,按类型区分的map,支持条件查询 + * + * @author 小李 + * @date 15:51 2024/11/19 + * @param id id + **/ + @GetMapping("/getMapBySoIdAndQuery") + @Operation(summary = "根据主表的ID得到子表的所有数据,按类型区分的map,支持条件查询") + public CommonResult getMapBySoIdAndQuery(@RequestParam("id") String id, @RequestParam("query") String query) { + return success(dlRepairSoiService.getMapBySoIdAndQuery(id, query)); + } } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/entity/DlRepairSoi.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/entity/DlRepairSoi.java index f4978b01..6c7f55b6 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/entity/DlRepairSoi.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/entity/DlRepairSoi.java @@ -11,10 +11,6 @@ import lombok.EqualsAndHashCode; import java.math.BigDecimal; -/** - * 采购单领料单子表 - * @TableName dl_repair_soi - */ /** * 采购单/领料单子表 * @author 小李 diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/mapper/DlRepairSoMapper.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/mapper/DlRepairSoMapper.java index 9e39cf10..05bde9ad 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/mapper/DlRepairSoMapper.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/mapper/DlRepairSoMapper.java @@ -2,12 +2,15 @@ package cn.iocoder.yudao.module.stockOperate.mapper; import cn.iocoder.yudao.module.stockOperate.entity.DlRepairSo; import cn.iocoder.yudao.module.stockOperate.vo.DlRepairSoReqVO; +import cn.iocoder.yudao.module.stockOperate.vo.DlRepairSoiRespVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.List; + /** * 针对表【dl_repair_so(采购单领料单)】的数据库操作Mapper * @author 小李 @@ -28,6 +31,15 @@ public interface DlRepairSoMapper extends BaseMapper { * @return java.lang.Integer **/ Integer selectCountNum(@Param("type") String type,@Param("userId") Long userId,@Param("status") String status); + + /** + * 查单据配件明细 + * @author vinjor-M + * @date 11:13 2024/11/21 + * @param id 单据id + * @return java.util.List + **/ + List selectByIdGroup(@Param("id")String id); } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/mapper/DlRepairSoiMapper.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/mapper/DlRepairSoiMapper.java index 4551b233..2868f656 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/mapper/DlRepairSoiMapper.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/mapper/DlRepairSoiMapper.java @@ -2,12 +2,15 @@ package cn.iocoder.yudao.module.stockOperate.mapper; import cn.iocoder.yudao.module.stockOperate.entity.DlRepairSoi; import cn.iocoder.yudao.module.stockOperate.vo.DlRepairSoiReqVO; +import cn.iocoder.yudao.module.stockOperate.vo.DlRepairSoiRespVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.List; + /** * 针对表【dl_repair_soi(采购单领料单子表)】的数据库操作Mapper * @author 小李 @@ -24,6 +27,15 @@ public interface DlRepairSoiMapper extends BaseMapper { * @param repairSoiReqVO 查询对象 **/ IPage getRepairSoiPage(@Param("map") DlRepairSoiReqVO repairSoiReqVO, Page page); + + /** + * 根据主表的ID得到子表的所有数据,按类型区分的map,支持条件查询 + * + * @author 小李 + * @date 15:51 2024/11/19 + * @param id id + **/ + List getMapBySoIdAndQuery(@Param("id") String id, @Param("query") String query); } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/service/DlRepairSoService.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/service/DlRepairSoService.java index 09e8f8c1..1d4f2f04 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/service/DlRepairSoService.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/service/DlRepairSoService.java @@ -72,9 +72,17 @@ public interface DlRepairSoService extends IService { /** * 采购入库 * - * @param reqVO (接参实体中需传入:采购单id,子表中商品id,子表中入库数量inCount) + * @param repairSoRespVO (接参实体中需传入:采购单id,子表中商品id,子表中入库数量inCount) * @author PQZ * @date 14:32 2024/10/24 **/ - void inWare(DlRepairSoReqVO reqVO); + void inWare(DlRepairSoRespVO repairSoRespVO); + /** + * 领料单、退料单APP查看 + * @author vinjor-M + * @date 11:10 2024/11/21 + * @param id 单据id + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult + **/ + Object getApp(String id); } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/service/DlRepairSoiService.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/service/DlRepairSoiService.java index 2169096a..6111b3b9 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/service/DlRepairSoiService.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/service/DlRepairSoiService.java @@ -3,11 +3,13 @@ package cn.iocoder.yudao.module.stockOperate.service; import cn.iocoder.yudao.module.stockOperate.entity.DlRepairSoi; import cn.iocoder.yudao.module.stockOperate.vo.DlRepairSoiQueryRespVO; import cn.iocoder.yudao.module.stockOperate.vo.DlRepairSoiReqVO; +import cn.iocoder.yudao.module.stockOperate.vo.DlRepairSoiRespVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; +import java.util.Map; /** * 针对表【dl_repair_soi(采购单领料单子表)】的数据库操作Service @@ -53,4 +55,13 @@ public interface DlRepairSoiService extends IService { * @date 14:39 2024/10/24 **/ List listByIds(List ids); + + /** + * 根据主表的ID得到子表的所有数据,按类型区分的map,支持条件查询 + * + * @author 小李 + * @date 15:51 2024/11/19 + * @param id id + **/ + Map> getMapBySoIdAndQuery(String id, String query); } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/service/impl/DlRepairSoServiceImpl.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/service/impl/DlRepairSoServiceImpl.java index 6e420e7f..2d3c7f4d 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/service/impl/DlRepairSoServiceImpl.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/service/impl/DlRepairSoServiceImpl.java @@ -20,6 +20,7 @@ import cn.iocoder.yudao.module.stockOperate.service.DlRepairSoService; import cn.iocoder.yudao.module.stockOperate.service.DlRepairSoiService; import cn.iocoder.yudao.module.stockOperate.vo.DlRepairSoReqVO; import cn.iocoder.yudao.module.stockOperate.vo.DlRepairSoRespVO; +import cn.iocoder.yudao.module.stockOperate.vo.DlRepairSoiRespVO; import cn.iocoder.yudao.module.supplier.service.BaseSupplierService; import cn.iocoder.yudao.module.system.api.dept.DeptApi; import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; @@ -31,6 +32,7 @@ import cn.iocoder.yudao.module.tickets.service.DlRepairTicketsService; import cn.iocoder.yudao.module.tickets.service.DlRepairTitemService; import cn.iocoder.yudao.module.tickets.service.DlTicketWaresService; import cn.iocoder.yudao.module.tickets.service.DlTwItemService; +import cn.iocoder.yudao.module.tickets.vo.AppWaresGroupVO; import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -48,7 +50,6 @@ import java.util.function.Function; import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception0; /** * 针对表【dl_repair_so(采购单领料单)】的数据库操作Service实现 @@ -60,6 +61,8 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU public class DlRepairSoServiceImpl extends ServiceImpl implements DlRepairSoService { + @Resource + private DlRepairSoMapper dlRepairSoMapper; @Resource private DlRepairSoiService repairSoiService; @@ -116,14 +119,14 @@ public class DlRepairSoServiceImpl extends ServiceImpl { - if (item.getGoodsPrice() == null){ - throw exception0(500, "有配件未设置进价"); - } - }); - } + // 加个判断,可能出现没有设置价格的情况----需求说了非必填,注掉 +// if (repairSoRespVO.getGoodsList() != null){ +// repairSoRespVO.getGoodsList().forEach(item -> { +// if (item.getGoodsPrice() == null){ +// throw exception0(500, "有配件未设置进价"); +// } +// }); +// } //保存供应商 if (StringUtils.isEmpty(repairSoRespVO.getSupplierId())){ //采购单中录入供应商或无供应商情况 @@ -163,29 +166,34 @@ public class DlRepairSoServiceImpl extends ServiceImpl waresList = repairSoRespVO.getWaresList(); + waresService.updateBatchById(waresList); + + // 操作配件库存表---应该是弃用了 // 获取所有需要操作的数据----生成采购单的时候,不直接操作库存,放到下面的inWares方法去操作 - if (repairSoRespVO.getSoType() != null && !repairSoRespVO.getSoType().equals("01")){ - List goodsList = repairSoRespVO.getGoodsList(); - List ids = goodsList.stream().map(DlRepairSoi::getGoodsId).collect(Collectors.toList()); - List repairWares = waresService.listByIds(ids); - // 更新库存和进价 - List newWares = repairWares.stream().map(item -> { - // 取数据 - DlRepairSoi repairSoi = goodsList.stream().filter(i -> i.getGoodsId().equals(item.getId())).collect(Collectors.toList()).get(0); - // 设置新值 - // 如果是采购入库,数量+,如果是领料出库,数量- - // 01, 03 是采购 02 是领料 - BigDecimal count = new BigDecimal(repairSoi.getGoodsCount()); - RepairWares wares = new RepairWares(); - wares.setId(item.getId()); - wares.setStock("02".equals(repairSoRespVO.getSoType()) ? item.getStock().subtract(count) : item.getStock().add(count)); - // 更新进价 - wares.setPurPrice(repairSoi.getGoodsPrice()); - return wares; - }).collect(Collectors.toList()); - waresService.updateBatchById(newWares); - } +// if (repairSoRespVO.getSoType() != null && !repairSoRespVO.getSoType().equals("01")){ +// List goodsList = repairSoRespVO.getGoodsList(); +// List ids = goodsList.stream().map(DlRepairSoi::getGoodsId).collect(Collectors.toList()); +// List repairWares = waresService.listByIds(ids); +// // 更新库存和进价 +// List newWares = repairWares.stream().map(item -> { +// // 取数据 +// DlRepairSoi repairSoi = goodsList.stream().filter(i -> i.getGoodsId().equals(item.getId())).collect(Collectors.toList()).get(0); +// // 设置新值 +// // 如果是采购入库,数量+,如果是领料出库,数量- +// // 01, 03 是采购 02 是领料 +// BigDecimal count = new BigDecimal(repairSoi.getGoodsCount()); +// RepairWares wares = new RepairWares(); +// wares.setId(item.getId()); +// wares.setStock("02".equals(repairSoRespVO.getSoType()) ? item.getStock().subtract(count) : item.getStock().add(count)); +// // 更新进价 +// wares.setPurPrice(repairSoi.getGoodsPrice()); +// return wares; +// }).collect(Collectors.toList()); +// waresService.updateBatchById(newWares); +// } } /** @@ -242,7 +250,8 @@ public class DlRepairSoServiceImpl extends ServiceImpl i.getGoodsId().equals(item.getWaresId())).findFirst().ifPresent(repairSoiByTwItem -> { if (so.getSoType().equals("02")){ dlTwItem.setWaresAlreadyCount(item.getWaresAlreadyCount() - repairSoiByTwItem.getGoodsCount()); - dlTwItem.setWaresStatus("02"); + // 不操作配件申请表子表的状态 +// dlTwItem.setWaresStatus("02"); }else { dlTwItem.setWaresAlreadyCount(item.getWaresAlreadyCount() + repairSoiByTwItem.getGoodsCount()); } @@ -325,13 +334,13 @@ public class DlRepairSoServiceImpl extends ServiceImpl list = twItemService.list(new LambdaQueryWrapper().eq(DlTwItem::getTwId, so.getTwId())); - // 判断是部分完成还是全部完成 - DlTicketWares dlTicketWares = new DlTicketWares(); - dlTicketWares.setId(so.getTwId()); - List flag = list.stream().filter(item -> !item.getWaresStatus().equals("01")).collect(Collectors.toList()); - dlTicketWares.setStatus(CollectionUtil.isEmpty(flag) ? "03" : "04"); + // 判断是部分完成还是全部完成----不需要判断了 +// DlTicketWares dlTicketWares = new DlTicketWares(); +// dlTicketWares.setId(so.getTwId()); +// List flag = list.stream().filter(item -> !item.getWaresStatus().equals("01")).collect(Collectors.toList()); +// dlTicketWares.setStatus(CollectionUtil.isEmpty(flag) ? "03" : "04"); // 更新主表的状态 - ticketWaresService.updateById(dlTicketWares); +// ticketWaresService.updateById(dlTicketWares); // 通知仓库 repairWorkerService.sentMessage(Long.valueOf(so.getCreator()), so.getUserName() + "已确认领料单:" + so.getSoNo()); @@ -396,7 +405,7 @@ public class DlRepairSoServiceImpl extends ServiceImpl sois = repairSoiService.list(new LambdaQueryWrapper().eq(DlRepairSoi::getSoId, reqVO.getId())); // 过滤出入库数量大于等于采购数量的数据 (入库数量可以大于采购的数量) - List allInSois = sois.stream().filter(item -> item.getInCount() >= item.getGoodsCount()).collect(Collectors.toList()); + List allInSois = sois.stream() + .filter(item -> (ObjectUtil.isNotEmpty(item.getInCount()) && item.getInCount() >= item.getGoodsCount())) + .collect(Collectors.toList()); // 如果allInSois的size就是sois的size,那就是全部都入库了 if (CollectionUtil.isNotEmpty(allInSois) && allInSois.size() == sois.size()) { // 更新采购单的状态为已入库 @@ -483,6 +494,58 @@ public class DlRepairSoServiceImpl extends ServiceImpl reqVOWaresList = reqVO.getWaresList(); + List ids = reqVOWaresList.stream().map(item -> item.getId()).collect(Collectors.toList()); + List oldWares = waresService.listByIds(ids); + // 这里是因为传过来的库存不是最新的,但其他字段可能变了,所以用最新的库存替换传回来的,在用传回来的+最新库存构成最新数据 + List newWares = reqVOWaresList.stream().map(item -> { + RepairWares wares = BeanUtil.toBean(item, RepairWares.class); + RepairWares findWares = oldWares.stream().filter(i -> i.getId().equals(wares.getId())).findFirst().orElse(null); + if (findWares != null) { + wares.setStock(findWares.getStock()); + } + return wares; + }).collect(Collectors.toList()); + waresService.updateBatchById(newWares); + } + + /** + * 领料单、退料单APP查看 + * + * @param id 单据id + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult + * @author vinjor-M + * @date 11:10 2024/11/21 + **/ + @Override + public Object getApp(String id) { + List dlRepairSoiRespVOList = dlRepairSoMapper.selectByIdGroup(id); + List waresGroupList = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(dlRepairSoiRespVOList)) { + //先过滤出itenTypeId为null或空,或者itemTypeName为null或空的,为单独一个组 + List nullList = dlRepairSoiRespVOList.stream().filter(item-> StringUtils.isEmpty(item.getTypeId()) || StringUtils.isEmpty(item.getTypeName())).collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(nullList)) { + AppWaresGroupVO waresGroupVO = new AppWaresGroupVO(); + waresGroupVO.setSoiRespVOList(nullList); + waresGroupVO.setGroupName("未知分组"); + waresGroupVO.setNums(nullList.size()); + waresGroupList.add(waresGroupVO); + } + //过滤出有分类的进行分组 + Map> groupListMap = dlRepairSoiRespVOList.stream().filter(item->StringUtils.isNotEmpty(item.getTypeId()) && StringUtils.isNotEmpty(item.getTypeName())).collect(Collectors.groupingBy(DlRepairSoiRespVO::getTypeId)); + for (String key:groupListMap.keySet()){ + AppWaresGroupVO waresGroupVO = new AppWaresGroupVO(); + waresGroupVO.setSoiRespVOList(groupListMap.get(key)); + waresGroupVO.setGroupName(groupListMap.get(key).get(0).getTypeName()); + waresGroupVO.setGroupId(key); + waresGroupVO.setNums(groupListMap.get(key).size()); + waresGroupList.add(waresGroupVO); + } + } + return waresGroupList; } } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/service/impl/DlRepairSoiServiceImpl.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/service/impl/DlRepairSoiServiceImpl.java index c6ee1e14..ed0ad7d2 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/service/impl/DlRepairSoiServiceImpl.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/service/impl/DlRepairSoiServiceImpl.java @@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.stockOperate.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.iocoder.yudao.module.conf.entity.BaseType; +import cn.iocoder.yudao.module.conf.service.BaseTypeService; import cn.iocoder.yudao.module.project.entity.RepairWares; import cn.iocoder.yudao.module.project.service.RepairWaresService; import cn.iocoder.yudao.module.stockOperate.entity.DlRepairSo; @@ -11,6 +13,7 @@ import cn.iocoder.yudao.module.stockOperate.service.DlRepairSoService; import cn.iocoder.yudao.module.stockOperate.service.DlRepairSoiService; import cn.iocoder.yudao.module.stockOperate.vo.DlRepairSoiQueryRespVO; import cn.iocoder.yudao.module.stockOperate.vo.DlRepairSoiReqVO; +import cn.iocoder.yudao.module.stockOperate.vo.DlRepairSoiRespVO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -19,7 +22,9 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @@ -40,6 +45,9 @@ public class DlRepairSoiServiceImpl extends ServiceImpl listByIds(List ids) { return baseMapper.selectBatchIds(ids); } + + /** + * 根据主表的ID得到子表的所有数据,按类型区分的map,支持条件查询 + * + * @author 小李 + * @date 15:51 2024/11/19 + * @param id id + **/ + @Override + public Map> getMapBySoIdAndQuery(String id, String query){ + // 查出该单据的子项和其对应的配件信息 + List respVOList = baseMapper.getMapBySoIdAndQuery(id, query); + if (CollectionUtil.isEmpty(respVOList)){ + return null; + } + // 按配件信息的type进行分组 + Map> map = respVOList.stream().collect(Collectors.groupingBy(item -> { + String key = item.getWares().getType(); + if (key == null || key.isEmpty()) { + key = "default"; + } + return key; + })); + // 查分类的信息 + List baseTypes = typeService.listByIds(map.keySet()); + Map typeMap = baseTypes.stream().collect(Collectors.toMap(BaseType::getId, BaseType::getName)); + // 映射 + Map> result = new HashMap<>(); + for (Map.Entry> entry : map.entrySet()) { + String key = entry.getKey(); + String newKey = typeMap.get(key); + if (newKey == null || newKey.isEmpty()) { + newKey = "未分类"; + } + result.put(newKey, entry.getValue()); + } + return result; + } } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/vo/DlRepairSoRespVO.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/vo/DlRepairSoRespVO.java index da624f9d..1d6b25ce 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/vo/DlRepairSoRespVO.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/vo/DlRepairSoRespVO.java @@ -18,4 +18,10 @@ public class DlRepairSoRespVO extends DlRepairSo { // 商品List private List goodsList; + + // 配件List + private List waresList; + + /**关联商品*/ + List soiList; } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/vo/DlRepairSoiRespVO.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/vo/DlRepairSoiRespVO.java index 59bfc3de..fba22ccc 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/vo/DlRepairSoiRespVO.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/stockOperate/vo/DlRepairSoiRespVO.java @@ -1,8 +1,11 @@ package cn.iocoder.yudao.module.stockOperate.vo; +import cn.iocoder.yudao.module.project.entity.RepairWares; import cn.iocoder.yudao.module.stockOperate.entity.DlRepairSoi; import lombok.Data; +import java.math.BigDecimal; + /** * 采购单/领料单子表 响应VO * @author 小李 @@ -10,4 +13,19 @@ import lombok.Data; **/ @Data public class DlRepairSoiRespVO extends DlRepairSoi { + + /** 对应的配件信息 */ + private RepairWares wares; + /** 配件分类id */ + private String typeId; + /** 配件分类名称 */ + private String typeName; + /** 配件名称 */ + private String goodsName; + /** 配件计量单位名称 */ + private String unitText; + /** 售价 */ + private BigDecimal salePrice; + /** 库存 */ + private Integer stock; } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlRepairTicketsController.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlRepairTicketsController.java index b9999f3b..934e40a1 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlRepairTicketsController.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlRepairTicketsController.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.tickets.controller.admin; +import cn.hutool.core.date.DateUtil; import cn.iocoder.yudao.common.RepairCons; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.module.tickets.entity.DlRepairTickets; @@ -16,6 +17,9 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -70,13 +74,14 @@ public class DlRepairTicketsController { * 获得一个工单的详细信息 * * @param id 工单ID + * @param ifApp 是否是APP发起的查询 * @author 小李 * @date 16:05 2024/9/21 **/ @GetMapping("/get") @Operation(summary = "查看一个工单的详细信息") - public CommonResult getTicketsById(@RequestParam("id") String id) { - return success(dlRepairTicketsService.getTicketsById(id)); + public CommonResult getTicketsById(@RequestParam("id") String id,@RequestParam(required = false, value = "ifApp", defaultValue = "false")Boolean ifApp) { + return success(dlRepairTicketsService.getTicketsById(id,ifApp)); } /** @@ -298,15 +303,58 @@ public class DlRepairTicketsController { } /** - * 从总检的角度差维修中、已完成的工单数量 + * 服务顾问交车 + * @author vinjor-M + * @date 16:51 2024/11/13 + * @param respVO + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult + **/ + @PostMapping("/overOrder") + @Operation(summary = "服务顾问交车") + public CommonResult overOrder(@RequestBody DlRepairTicketsRespVO respVO) { + dlRepairTicketsService.overOrder(respVO); + return CommonResult.ok(); + } + /** + * 从总检的角度查进场数、维修中、已完成、已交车、在厂的工单数量 * @author vinjor-M * @date 11:29 2024/10/24 * @return cn.iocoder.yudao.framework.common.pojo.CommonResult **/ @GetMapping("/getBossNum") - @Operation(summary = "从总检的角度差维修中、已完成的工单数量") - public CommonResult getBossNum() { - return success(dlRepairTicketsService.getBossNum()); + @Operation(summary = "从总检的角度查进场数、维修中、已完成、已交车、在厂的工单数量") + public CommonResult getBossNum(String selectType,String startDate,String endDate) { + return success(dlRepairTicketsService.getBossNum(selectType, startDate, endDate)); + } + + /** + * 获取日期范围 + * @author vinjor-M + * @date 11:29 2024/10/24 + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult + **/ + @GetMapping("/getDateRange") + @Operation(summary = "获取日期范围") + public CommonResult getDateRange(String selectType) { + Map rtnMap = new HashMap<>(); + // 获取当前日期 + Date currentDate = new Date(); + String nowDay = DateUtil.formatDate(new Date()); + rtnMap.put("endDate",nowDay); + if("threeMonth".equals(selectType)){ + //近3个月 + // 使用Hutool的DateUtil推移3个月 + Date threeMonthsAgo = DateUtil.offsetMonth(currentDate, -3); + String startDay = DateUtil.formatDate(threeMonthsAgo); + rtnMap.put("startDate",startDay); + }else { + //近6个月 + // 使用Hutool的DateUtil推移6个月 + Date threeMonthsAgo = DateUtil.offsetMonth(currentDate, -6); + String startDay = DateUtil.formatDate(threeMonthsAgo); + rtnMap.put("startDate",startDay); + } + return success(rtnMap); } /** @@ -323,6 +371,19 @@ public class DlRepairTicketsController { return CommonResult.ok(); } + /** + * 判断是否工单子表的任何一个类目没有价格或价格为0 + * + * @param id 工单ID + * @author 小李 + * @date 15:00 2024/11/16 + **/ + @GetMapping("/hasPrice") + @Operation(summary = "判断是否工单子表的任何一个类目没有价格或价格为0") + public CommonResult hasPrice(@RequestParam("id")String id){ + return success(dlRepairTicketsService.hasPrice(id)); + } + /** * 新增工单子项 * @@ -364,5 +425,18 @@ public class DlRepairTicketsController { dlRepairTicketsService.removeTicketById(id); return CommonResult.ok(); } + + /** + * 根据工单ID查客户和车辆信息 + * + * @author 小李 + * @date 19:07 2024/11/18 + * @param id id + **/ + @GetMapping("/getCusAndCarById") + @Operation(summary = "根据工单ID查客户和车辆信息") + public CommonResult getCusAndCarById(@RequestParam("id") String id) { + return success(dlRepairTicketsService.getCusAndCarById(id)); + } } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlTicketWaresController.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlTicketWaresController.java index 4d598c98..1df612e4 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlTicketWaresController.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlTicketWaresController.java @@ -11,6 +11,8 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.List; + import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; /** @@ -168,5 +170,45 @@ public class DlTicketWaresController { public CommonResult getWorkerTodo(){ return success(dlTicketWaresService.getWorkerTodo()); } + + /** + * 查单个配件申请单的信息 + * + * @author 小李 + * @date 15:55 2024/11/14 + * @param id id + **/ + @GetMapping("/getById") + @Operation(summary = "查单个配件申请单的信息") + public CommonResult getById(@RequestParam("id") String id){ + return success(dlTicketWaresService.getById(id)); + } + + /** + * 修改是否传给保险公司 + * + * @author 小李 + * @date 15:48 2024/11/18 + * @param respVO 对象 + **/ + @PostMapping("/updateSafe") + @Operation(summary = "修改是否传给保险公司") + public CommonResult updateSafe(@RequestBody DlTicketWaresRespVO respVO){ + dlTicketWaresService.updateSafe(respVO); + return CommonResult.ok(); + } + + /** + * 根据选择的配件生成采购单需要的数据 + * + * @author 小李 + * @date 18:14 2024/11/18 + * @param ids ids + **/ + @GetMapping("/getByIds") + @Operation(summary = "根据选择的配件生成采购单需要的数据") + public CommonResult getByIds(@RequestParam("ids") List ids){ + return success(dlTicketWaresService.getByIds(ids)); + } } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlTwItemController.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlTwItemController.java index 2880b57c..83ff9a56 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlTwItemController.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/controller/admin/DlTwItemController.java @@ -1,14 +1,11 @@ package cn.iocoder.yudao.module.tickets.controller.admin; import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.module.tickets.entity.DlTwItem; import cn.iocoder.yudao.module.tickets.service.DlTwItemService; +import cn.iocoder.yudao.module.tickets.vo.AddTwiVO; import cn.iocoder.yudao.module.tickets.vo.DlTwItemReqVO; import io.swagger.v3.oas.annotations.Operation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -41,5 +38,32 @@ public class DlTwItemController { public CommonResult listTwItem(DlTwItemReqVO reqVO){ return success(dlTwItemService.listTwItem(reqVO)); } + + /** + * APP查询配件申请单列表-按配件分类进行分组 + * @author vinjor-M + * @date 14:01 2024/11/20 + * @param reqVO TODO + * @return cn.iocoder.yudao.framework.common.pojo.CommonResult + **/ + @GetMapping("/listApp") + @Operation(summary = "APP查询配件申请单列表-按配件分类进行分组") + public CommonResult listApp(DlTwItemReqVO reqVO){ + return success(dlTwItemService.listApp(reqVO)); + } + + /** + * 给配件申请表子表添加数据 + * + * @author 小李 + * @date 17:47 2024/11/13 + * @param addTwiVO 对象 + **/ + @PostMapping("/addTwi") + @Operation(summary = "给配件申请表子表添加数据") + public CommonResult addTwi(@RequestBody AddTwiVO addTwiVO){ + dlTwItemService.addTwi(addTwiVO); + return CommonResult.ok(); + } } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlTicketWares.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlTicketWares.java index 9c6f7e8c..7a76be51 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlTicketWares.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/entity/DlTicketWares.java @@ -65,4 +65,19 @@ public class DlTicketWares extends TenantBaseDO { /** 备注 */ private String remark; + + /** 多个图片地址,英文逗号分隔(拍照上传配件申请单时用) */ + private String images; + + /** 是否传给保险公司(字典yes_no,1:是,0:否,默认0) */ + private String toSafe; + + /** 保险公司名称 */ + private String safeName; + + /** 保险公司联系人 */ + private String safeContact; + + /** 保险公司联系电话 */ + private String safeMobile; } \ No newline at end of file diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/mapper/DlRepairTicketsMapper.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/mapper/DlRepairTicketsMapper.java index 4a53a9f2..0ca90e77 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/mapper/DlRepairTicketsMapper.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/mapper/DlRepairTicketsMapper.java @@ -42,6 +42,16 @@ public interface DlRepairTicketsMapper extends BaseMapper { * @param repairTicketsReqVO 查询对象 **/ IPage getPageTypeAll(@Param("map") DlRepairTicketsReqVO repairTicketsReqVO, Page page); + + /** + * 根据条件查询指定工单数量 + * @author vinjor-M + * @date 15:46 2024/11/18 + * @param dayDate 某一天日期 + * @param recordCode 操作记录code + * @return java.lang.Long + **/ + Long selectCountByParams(@Param("nowDate")String dayDate, @Param("recordCode")String recordCode, @Param("startTime")String startTime, @Param("endTime")String endTime); } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/mapper/DlRepairTitemMapper.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/mapper/DlRepairTitemMapper.java index c3ac254b..1da62048 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/mapper/DlRepairTitemMapper.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/mapper/DlRepairTitemMapper.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.tickets.mapper; import cn.iocoder.yudao.module.tickets.entity.DlRepairTitem; +import cn.iocoder.yudao.module.tickets.vo.DlRepairTitemReqVO; import cn.iocoder.yudao.module.tickets.vo.DlRepairTitemRespVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -42,6 +43,15 @@ public interface DlRepairTitemMapper extends BaseMapper { * @return java.util.List **/ List selectProjList(@Param("ticketId")String ticketId,@Param("isOpen")String isOpen); + + /** + * 根据工单ID查询所有配件明细--带着分组名称和ID + * @author vinjor-M + * @date 10:44 2024/11/19 + * @param ticketId 工单ID + * @return java.util.List + **/ + List selectByTicketId(@Param("ticketId")String ticketId); } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/mapper/DlTwItemMapper.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/mapper/DlTwItemMapper.java index bd54eb0e..a821dbd4 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/mapper/DlTwItemMapper.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/mapper/DlTwItemMapper.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.tickets.mapper; import cn.iocoder.yudao.module.tickets.entity.DlTwItem; import cn.iocoder.yudao.module.tickets.vo.DlTwItemReqVO; +import cn.iocoder.yudao.module.tickets.vo.DlTwItemRespVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -25,6 +26,15 @@ public interface DlTwItemMapper extends BaseMapper { * @param reqVO 请求对象 **/ List listTwItem(@Param("map") DlTwItemReqVO reqVO); + + /** + * APP查询配件申请单列表-按配件分类进行分组 + * @author vinjor-M + * @date 14:04 2024/11/20 + * @param reqVO + * @return java.util.List + **/ + List listTwItemApp(@Param("map") DlTwItemReqVO reqVO); } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlRepairTicketsService.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlRepairTicketsService.java index 1992f8c5..3194be45 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlRepairTicketsService.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlRepairTicketsService.java @@ -42,10 +42,11 @@ public interface DlRepairTicketsService extends IService { * 获得一个工单的详细信息 * * @param id 工单ID + * @param ifApp 是否是APP发起的查询 * @author 小李 * @date 16:05 2024/9/21 **/ - DlRepairTicketsRespVO getTicketsById(String id); + DlRepairTicketsRespVO getTicketsById(String id,Boolean ifApp); /** * 维修工单表 作废 @@ -172,7 +173,7 @@ public interface DlRepairTicketsService extends IService { * @date 11:30 2024/10/24 * @return java.util.Map **/ - Map getBossNum(); + Map getBossNum(String selectType,String startDate,String endDate); /** * 服务顾问通知客户取车 @@ -235,4 +236,30 @@ public interface DlRepairTicketsService extends IService { * @param id 工单ID **/ void removeTicketById(String id); + + /** + * 服务顾问交车 + * @author vinjor-M + * @date 16:51 2024/11/13 + * @param respVO + **/ + void overOrder(DlRepairTicketsRespVO respVO); + + /** + * 判断是否工单子表的任何一个类目没有价格或价格为0 + * + * @param id 工单ID + * @author 小李 + * @date 15:00 2024/11/16 + **/ + Boolean hasPrice(String id); + + /** + * 根据工单ID查客户和车辆信息 + * + * @author 小李 + * @date 19:07 2024/11/18 + * @param id id + **/ + CustomerAndCarVO getCusAndCarById(String id); } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlTicketWaresService.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlTicketWaresService.java index dd15fa14..b5a47bfe 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlTicketWaresService.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlTicketWaresService.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.tickets.service; import cn.iocoder.yudao.module.tickets.entity.DlTicketWares; import cn.iocoder.yudao.module.tickets.vo.DlTicketWaresReqVO; import cn.iocoder.yudao.module.tickets.vo.DlTicketWaresRespVO; +import cn.iocoder.yudao.module.tickets.vo.DlTwItemRespVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; @@ -104,4 +105,22 @@ public interface DlTicketWaresService extends IService { * @date 15:38 2024/10/22 **/ Map getWorkerTodo(); + + /** + * 修改是否传给保险公司 + * + * @author 小李 + * @date 15:48 2024/11/18 + * @param respVO 对象 + **/ + void updateSafe(DlTicketWaresRespVO respVO); + + /** + * 根据选择的配件生成采购单需要的数据 + * + * @author 小李 + * @date 18:14 2024/11/18 + * @param ids ids + **/ + Map> getByIds(List ids); } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlTwItemService.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlTwItemService.java index c4a51ff9..532bb31a 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlTwItemService.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/DlTwItemService.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.tickets.service; import cn.iocoder.yudao.module.tickets.entity.DlTwItem; +import cn.iocoder.yudao.module.tickets.vo.AddTwiVO; import cn.iocoder.yudao.module.tickets.vo.DlTwItemReqVO; import cn.iocoder.yudao.module.tickets.vo.DlTwItemRespVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -23,4 +24,22 @@ public interface DlTwItemService extends IService { * @param reqVO 请求对象 **/ List listTwItem(DlTwItemReqVO reqVO); + + /** + * 给配件申请表子表添加数据 + * + * @author 小李 + * @date 17:47 2024/11/13 + * @param addTwiVO 对象 + **/ + void addTwi(AddTwiVO addTwiVO); + + /** + * APP查询配件申请单列表-按配件分类进行分组 + * @author vinjor-M + * @date 14:03 2024/11/20 + * @param reqVO + * @return java.lang.Object + **/ + Object listApp(DlTwItemReqVO reqVO); } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java index 9f9a64a4..00dc57b3 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlRepairTicketsServiceImpl.java @@ -2,11 +2,14 @@ package cn.iocoder.yudao.module.tickets.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.common.*; import cn.iocoder.yudao.framework.common.util.number.MoneyUtils; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; +import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; import cn.iocoder.yudao.module.base.entity.RepairWorker; import cn.iocoder.yudao.module.base.service.RepairRecordsService; import cn.iocoder.yudao.module.base.service.RepairWorkerService; @@ -20,6 +23,7 @@ import cn.iocoder.yudao.module.conf.entity.BaseType; import cn.iocoder.yudao.module.conf.service.BaseTypeService; import cn.iocoder.yudao.module.custom.entity.*; import cn.iocoder.yudao.module.custom.service.*; +import cn.iocoder.yudao.module.custom.vo.CarMainReqVO; import cn.iocoder.yudao.module.custom.vo.CarMainRespVO; import cn.iocoder.yudao.module.custom.vo.CustomerMainRespVO; import cn.iocoder.yudao.module.order.entity.RepairOrderInfo; @@ -48,6 +52,7 @@ import cn.iocoder.yudao.module.tickets.entity.DlRepairTitem; import cn.iocoder.yudao.module.tickets.entity.DlTicketWares; import cn.iocoder.yudao.module.tickets.entity.DlTwItem; import cn.iocoder.yudao.module.tickets.mapper.DlRepairTicketsMapper; +import cn.iocoder.yudao.module.tickets.mapper.DlRepairTitemMapper; import cn.iocoder.yudao.module.tickets.service.DlRepairTicketsService; import cn.iocoder.yudao.module.tickets.service.DlRepairTitemService; import cn.iocoder.yudao.module.tickets.service.DlTicketWaresService; @@ -100,6 +105,10 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl { item.setTicketId(ticketsRespVO.getId()); - if(null==item.getSaleId()){ + if (null == item.getSaleId()) { //默认销售人员是当前用户 item.setSaleId(loginUser.getId()); item.setSaleName(loginUser.getInfo().get("nickname")); @@ -334,11 +342,12 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl wares = items.stream().filter(item -> item.getItemType().equals("02")).collect(Collectors.toList()); - if (CollectionUtil.isNotEmpty(wares)) { - // 单位字典 - List recordTypeList = dictDataApi.getDictDataList(DICT_REPAIR_UNIT); - Map unitMap = recordTypeList.stream().collect(Collectors.toMap(DictDataRespDTO::getValue, DictDataRespDTO::getLabel)); - - Set ids = wares.stream().map(DlRepairTitemReqVO::getPartId).collect(Collectors.toSet()); - List repairWares = waresService.listByIds(ids); - items.forEach(item -> { - repairWares.stream().filter(i -> i.getId().equals(item.getPartId())).findFirst().ifPresent(item::setWare); - item.setItemUnit(unitMap.get(item.getItemUnit())); - }); + if(ifApp){ + //app的逻辑 + List waresGroupList = new ArrayList<>(); + //查这个工单的配件 + List waresList = repairTitemMapper.selectByTicketId(id); + if (CollectionUtil.isNotEmpty(waresList)) { + //先过滤出itenTypeId为null或空,或者itemTypeName为null或空的,为单独一个组 + List nullList = waresList.stream().filter(item->StringUtils.isEmpty(item.getItemTypeId()) || StringUtils.isEmpty(item.getItemTypeName())).collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(nullList)) { + AppWaresGroupVO waresGroupVO = new AppWaresGroupVO(); + waresGroupVO.setWares(nullList); + waresGroupVO.setGroupName("未知分组"); + waresGroupVO.setNums(nullList.size()); + waresGroupVO.setTotalAmount(nullList.stream().peek(item->{ + if(null==item.getItemMoney()){ + item.setItemMoney(new BigDecimal(0)); + } + }).map(DlRepairTitem::getItemMoney).reduce(BigDecimal.ZERO,BigDecimal::add)); + waresGroupList.add(waresGroupVO); + } + //过滤出有分类的进行分组 + Map> groupListMap = waresList.stream().filter(item->StringUtils.isNotEmpty(item.getItemTypeId()) && StringUtils.isNotEmpty(item.getItemTypeName())).collect(Collectors.groupingBy(DlRepairTitem::getItemTypeId)); + for (String key:groupListMap.keySet()){ + AppWaresGroupVO waresGroupVO = new AppWaresGroupVO(); + waresGroupVO.setWares(groupListMap.get(key)); + waresGroupVO.setGroupName(groupListMap.get(key).get(0).getItemTypeName()); + waresGroupVO.setGroupId(key); + waresGroupVO.setNums(groupListMap.get(key).size()); + waresGroupVO.setTotalAmount(groupListMap.get(key).stream().peek(item->{ + if(null==item.getItemMoney()){ + item.setItemMoney(new BigDecimal(0)); + } + }).map(DlRepairTitem::getItemMoney).reduce(BigDecimal.ZERO,BigDecimal::add)); + waresGroupList.add(waresGroupVO); + } + } + result.setWaresGroupList(waresGroupList); + }else{ + // 取配件----原有逻辑-电脑端 + List wares = items.stream().filter(item -> item.getItemType().equals("02")).collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(wares)) { + // 单位字典 + List recordTypeList = dictDataApi.getDictDataList(DICT_REPAIR_UNIT); + Map unitMap = recordTypeList.stream().collect(Collectors.toMap(DictDataRespDTO::getValue, DictDataRespDTO::getLabel)); + Set ids = wares.stream().map(DlRepairTitemReqVO::getPartId).collect(Collectors.toSet()); + List repairWares = waresService.listByIds(ids); + items.forEach(item -> { + repairWares.stream().filter(i -> i.getId().equals(item.getPartId())).findFirst().ifPresent(item::setWare); + item.setUnitText(unitMap.get(item.getItemUnit())); + }); + } + result.setWares(wares); } - result.setWares(wares); // 取附加 List others = items.stream().filter(item -> item.getItemType().equals("03")).collect(Collectors.toList()); if (CollectionUtil.isNotEmpty(others)) { @@ -413,7 +460,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl() .set(DlRepairTickets::getTicketsWorkStatus, TicketsWorkStatusEnum.RECEIVED.getCode()) @@ -999,21 +1051,75 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl list = repairWorkerService.list(); + //查询当前工单下所有项目 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(DlRepairTitem::getTicketId, ticketId); + List itemList = titemService.list(lambdaQueryWrapper); + //过滤出不包括当前指派人的值 + List filterList = itemList.stream().filter(item -> !item.getRepairNames().contains(nowRepairName)).collect(Collectors.toList()); + List saveList = new ArrayList<>(); + //当前处理人工作组 + Map workerMap = list.stream().collect(Collectors.toMap(RepairWorker::getUserId, worker -> worker)); + String workType = workerMap.get(nowRepairId).getWorkType(); + filterList.forEach(item -> { + //深拷贝 + DlRepairTitem saveItem = BeanUtils.toBean(item, DlRepairTitem.class); + if (StringUtils.isNotEmpty(saveItem.getRepairIds())) { + //取出用户id + List repairIds = Arrays.stream(saveItem.getRepairIds().split(",")).map(Long::parseLong).collect(Collectors.toList()); + repairIds.forEach(idItem -> { + // 获取对应的 worker + RepairWorker worker = workerMap.get(idItem); + // 检查 worker 是否存在并比较 workType + if (worker != null && workType.equals(worker.getWorkType())) { + saveList.add(saveItem); + return; + } + }); + } + }); + saveList.forEach(item -> { + String newRepairId = item.getRepairIds() + "," + nowRepairId; + String newRepairName = item.getRepairNames() + "," + nowRepairName; + item.setRepairIds(newRepairId); + item.setRepairNames(newRepairName); + }); + titemService.updateBatchById(saveList); + + } + /** * 更新工单状态(针对开始施工、施工中记录、施工完成) * @@ -1066,7 +1172,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl().eq(RepairWorker::getUserId, SecurityFrameworkUtils.getLoginUserId()).last("limit 1")); List dataList = dictDataApi.getDictDataList("repair_work_type"); @@ -1192,7 +1298,11 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl userDTOS = roleApi.selectUserListByRoleCode(TenantContextHolder.getRequiredTenantId(), RepairRoleEnum.ADVISOR.getCode()); + List ids = userDTOS.stream().map(UserDTO::getId).collect(Collectors.toList()); + repairTicketsReqVO.setNowRepairIds(ids); +// repairTicketsReqVO.setNowRepairId(loginUserId); // 因为完成状态需要在交车之后,所以注掉这个 // repairTicketsReqVO.setIsFinish("1"); } else if (userRoleCode.equals(RepairRoleEnum.INSPECTION.getCode())) { @@ -1221,11 +1331,11 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl() - // 因为完成状态需要在交车之后,所以注掉这个 + // 因为完成状态需要在交车之后,所以注掉这个 // .set(DlRepairTickets::getIsFinish, "1") - .setSql("now_repair_id = adviser_id") - .setSql("now_repair_name = adviser_name") - .eq(DlRepairTickets::getId, respVO.getId()) + .setSql("now_repair_id = adviser_id") + .setSql("now_repair_name = adviser_name") + .eq(DlRepairTickets::getId, respVO.getId()) ); boolean flag = syncTicketWaresToTicket(respVO.getId()); @@ -1343,22 +1453,54 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl getBossNum() { - Map rtnMap = new HashMap<>(); - int workingNum = 0; - int doneNum = 0; + public Map getBossNum(String selectType,String startDate,String endDate) { + Map rtnMap = new HashMap<>(); + //维修中---当前这一时刻 + long workingNum = 0; + //在厂数--当前这一时刻 + long inCompanyNum = 0; + //进场数 + long newOrderNum=0; + //已完成 + long overNum=0; + //已交车 + long giveCusNum=0; List repairTickets = this.list(); if (!repairTickets.isEmpty()) { - Map> ifFinishMap = repairTickets.stream().collect(Collectors.groupingBy(DlRepairTickets::getIsFinish)); - if (ifFinishMap.containsKey("0")) { - workingNum = ifFinishMap.get("0").size(); - } - if (ifFinishMap.containsKey("1")) { - doneNum = ifFinishMap.get("1").size(); + workingNum = repairTickets.stream().filter(item -> TicketsStatusEnum.WORKING.getCode().equals(item.getTicketsStatus())).count(); + inCompanyNum = repairTickets.stream().filter(item -> TicketsStatusEnum.NO_PAY.getCode().equals(item.getTicketsStatus())).count(); + LocalDateTime currentTime = LocalDateTime.now(); + if("today".equals(selectType)){ + String nowDayStr = DateUtil.formatDate(new Date()); + //查当日进厂数、已完成、已交车 + newOrderNum = repairTickets.stream().filter(item -> item.getCreateTime().toLocalDate().equals(currentTime.toLocalDate())).count(); + //查当日已完成的(总检完成的) + overNum = repairTicketsMapper.selectCountByParams(nowDayStr,RecordTypeEnum.ZJ.getCode(),null,null); + //查当日已交车的(已结算的) + giveCusNum = repairTicketsMapper.selectCountByParams(nowDayStr,RecordTypeEnum.JS.getCode(),null,null); + }else if("all".equals(selectType)){ + //查累计进厂数、已完成、已交车 + newOrderNum = repairTickets.size(); + //查累计已完成的(总检完成的) + overNum = repairTicketsMapper.selectCountByParams(null,RecordTypeEnum.ZJ.getCode(),null,null); + //查累计已交车的(已结算的) + giveCusNum = repairTicketsMapper.selectCountByParams(null,RecordTypeEnum.JS.getCode(),null,null); + }else { + //查某个时间范围内进厂数、已完成、已交车 + LocalDateTime startTime = LocalDateTime.parse(startDate+" 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + LocalDateTime endTime = LocalDateTime.parse(endDate+" 23:59:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + newOrderNum = repairTickets.stream().filter(item -> item.getCreateTime().isAfter(startTime) && item.getCreateTime().isBefore(endTime)).count(); + //查某区间范围内已完成的(总检完成的) + overNum = repairTicketsMapper.selectCountByParams(null,RecordTypeEnum.ZJ.getCode(), startDate+" 00:00:00", endDate+" 23:59:59"); + //查某区间范围内已交车的(已结算的) + giveCusNum = repairTicketsMapper.selectCountByParams(null,RecordTypeEnum.JS.getCode(), startDate+" 00:00:00", endDate+" 23:59:59"); } } rtnMap.put("workingNum", workingNum); - rtnMap.put("doneNum", doneNum); + rtnMap.put("inCompanyNum", inCompanyNum); + rtnMap.put("newOrderNum", newOrderNum); + rtnMap.put("overNum", overNum); + rtnMap.put("giveCusNum", giveCusNum); return rtnMap; } @@ -1407,6 +1549,29 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl titems = titemService.list(new LambdaQueryWrapper().in(DlRepairTitem::getTicketId, id)); + for (DlRepairTitem item : titems) { + // 如果有为空的,直接报错 + if (ObjectUtil.isEmpty(item.getItemPrice())) { + throw exception0(500, "工单中有项目或配件没有设置价格,请服务顾问填写项目价格,仓库填写配件价格"); + } + // 如果有为0的,那就提示,让操作人选择 + if (item.getItemPrice().equals(new BigDecimal("0.00"))){ + return false; + } + } + return true; + } + /** * 重新计算工单的一些数值,子表也要重新计算 * @@ -1428,7 +1593,8 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl() + .set(DlRepairTickets::getTicketsWorkStatus, TicketsWorkStatusEnum.END.getCode()) + .set(DlRepairTickets::getTicketsStatus, TicketsStatusEnum.OVER.getCode()) + //交车时才能把工单置为完成 + .set(DlRepairTickets::getIsFinish, "1") + .eq(DlRepairTickets::getId, respVO.getId()) + ); + + // 记录日志 + repairRecordsService.saveRepairRecord(respVO.getId(), null, RecordTypeEnum.JC.getCode(), respVO.getRemark(), respVO.getImage()); + } + + /** + * 根据工单ID查客户和车辆信息 + * + * @author 小李 + * @date 19:07 2024/11/18 + * @param id id + **/ + @Override + public CustomerAndCarVO getCusAndCarById(String id){ + // 查工单 + DlRepairTickets tickets = baseMapper.selectById(id); + // 查用户 + CustomerMain customerMain = customerService.getById(tickets.getUserId()); + // 查车辆 + CarMain carMain = carMainService.getById(tickets.getCarId()); + // 映射 + CustomerAndCarVO customerAndCarVO = new CustomerAndCarVO(); + customerAndCarVO.setUserInfo(customerMain); + customerAndCarVO.setCarInfo(BeanUtil.toBean(carMain, CarMainReqVO.class)); + return customerAndCarVO; + } } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlTicketWaresServiceImpl.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlTicketWaresServiceImpl.java index b9e3ea7e..559c8172 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlTicketWaresServiceImpl.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlTicketWaresServiceImpl.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.tickets.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.common.RecordTypeEnum; import cn.iocoder.yudao.common.RepairRoleEnum; import cn.iocoder.yudao.common.SoStatusEnum; @@ -10,6 +11,8 @@ import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.module.base.entity.RepairWorker; import cn.iocoder.yudao.module.base.service.RepairRecordsService; import cn.iocoder.yudao.module.base.service.RepairWorkerService; +import cn.iocoder.yudao.module.conf.entity.BaseType; +import cn.iocoder.yudao.module.conf.service.BaseTypeService; import cn.iocoder.yudao.module.custom.entity.CustomerMain; import cn.iocoder.yudao.module.custom.service.CustomerMainService; import cn.iocoder.yudao.module.project.entity.RepairWares; @@ -32,10 +35,12 @@ import cn.iocoder.yudao.module.tickets.service.DlTicketWaresService; import cn.iocoder.yudao.module.tickets.service.DlTwItemService; import cn.iocoder.yudao.module.tickets.vo.DlTicketWaresReqVO; import cn.iocoder.yudao.module.tickets.vo.DlTicketWaresRespVO; +import cn.iocoder.yudao.module.tickets.vo.DlTwItemRespVO; import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.context.annotation.Lazy; @@ -102,6 +107,9 @@ public class DlTicketWaresServiceImpl extends ServiceImpl list = respVO.getItems().stream() - .map(item -> { - DlTwItem twItem = BeanUtil.toBean(item, DlTwItem.class); - twItem.setTwId(ticketWares.getId()); - twItem.setWaresStatus(""); - twItem.setWaresAlreadyCount(0); - return twItem; - }).collect(Collectors.toList()); - if (CollectionUtil.isEmpty(list)) { - throw exception0(500, "配件列表为空"); + if (CollectionUtil.isNotEmpty(respVO.getItems())){ + List list = respVO.getItems().stream() + .map(item -> { + DlTwItem twItem = BeanUtil.toBean(item, DlTwItem.class); + twItem.setTwId(ticketWares.getId()); + twItem.setWaresStatus(""); + twItem.setWaresAlreadyCount(0); + return twItem; + }).collect(Collectors.toList()); + if (CollectionUtil.isEmpty(list)) { + throw exception0(500, "配件列表为空"); + } + twItemService.saveOrUpdateBatch(list); } - twItemService.saveOrUpdateBatch(list); // 通知对应的维修服务顾问和总检 // 维修服务顾问即创建工单时选的是谁 @@ -319,7 +333,7 @@ public class DlTicketWaresServiceImpl extends ServiceImpl i.getWaresId().equals(item.getId())).findFirst().orElse(null); titem.setItemCount(twItem != null ? twItem.getWaresCount() : 0); titem.setItemUnit(item.getUnit()); - titem.setItemPrice(item.getPrice() != null ? item.getPrice() : BigDecimal.ZERO); + titem.setItemPrice((item.getPrice() != null) ? item.getPrice() : BigDecimal.ZERO); titem.setItemDiscount(BigDecimal.ONE); titem.setItemMoney(titem.getItemPrice().multiply(BigDecimal.valueOf(titem.getItemCount())).multiply(titem.getItemDiscount())); titem.setRepairIds(String.valueOf(ticketWares.getRepairId())); @@ -620,6 +634,74 @@ public class DlTicketWaresServiceImpl extends ServiceImpl lambdaUpdate = Wrappers.lambdaUpdate(DlTicketWares.class); + lambdaUpdate.eq(DlTicketWares::getId, respVO.getId()); + lambdaUpdate.set(DlTicketWares::getToSafe, respVO.getToSafe()); + // 根据状态更新 + if (toSafe.equals("1")){ + lambdaUpdate.set(DlTicketWares::getSafeName, respVO.getSafeName()); + lambdaUpdate.set(DlTicketWares::getSafeContact, respVO.getSafeContact()); + lambdaUpdate.set(DlTicketWares::getSafeMobile, respVO.getSafeMobile()); + } + // 更新 + baseMapper.update(lambdaUpdate); + } + + /** + * 根据选择的配件生成采购单需要的数据 + * + * @author 小李 + * @date 18:14 2024/11/18 + * @param ids ids + **/ + @Override + public Map> getByIds(List ids){ + // 查配件申请表子表 + List twItems = twItemService.listByIds(ids); + // 查配件 + List waresIds = twItems.stream().map(DlTwItem::getWaresId).collect(Collectors.toList()); + List wares = repairWaresService.listByIds(waresIds); + // 关联配件申请表子项和配件 + List newTwItems = twItems.stream().map(item -> { + DlTwItemRespVO twItem = BeanUtil.toBean(item, DlTwItemRespVO.class); + RepairWares ware = wares.stream().filter(i -> i.getId().equals(item.getWaresId())).findFirst().orElse(null); + if (ware != null) { + twItem.setWares(ware); + } + return twItem; + }).collect(Collectors.toList()); + // 分组 + Map> map = newTwItems.stream().collect(Collectors.groupingBy(item -> { + String key = item.getWares().getType(); + return key != null && !key.isEmpty() ? key : "default"; + })); + // 查分类 + List baseTypes = baseTypeService.listByIds(map.keySet()); + Map TypeMap = baseTypes.stream().collect(Collectors.toMap(BaseType::getId, BaseType::getName)); + // 映射 + Map> result = new HashMap<>(); + for (Map.Entry> entry : map.entrySet()) { + String key = entry.getKey(); + String newKey = TypeMap.get(key); + if (newKey == null || newKey.isEmpty()) { + newKey = "未分类"; + } + result.put(newKey, entry.getValue()); + } + return result; + } } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlTwItemServiceImpl.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlTwItemServiceImpl.java index d4cc0054..370303aa 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlTwItemServiceImpl.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/service/impl/DlTwItemServiceImpl.java @@ -8,20 +8,28 @@ import cn.iocoder.yudao.module.system.api.dict.DictDataApi; import cn.iocoder.yudao.module.system.api.dict.dto.DictDataRespDTO; import cn.iocoder.yudao.module.tickets.entity.DlTwItem; import cn.iocoder.yudao.module.tickets.mapper.DlTwItemMapper; +import cn.iocoder.yudao.module.tickets.service.DlTicketWaresService; import cn.iocoder.yudao.module.tickets.service.DlTwItemService; +import cn.iocoder.yudao.module.tickets.vo.AddTwiVO; +import cn.iocoder.yudao.module.tickets.vo.AppWaresGroupVO; import cn.iocoder.yudao.module.tickets.vo.DlTwItemReqVO; import cn.iocoder.yudao.module.tickets.vo.DlTwItemRespVO; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.lang3.StringUtils; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import static cn.iocoder.yudao.common.RepairCons.DICT_REPAIR_UNIT; +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception0; /** * 针对表【dl_tw_item(工单配件申请/退回子表)】的数据库操作Service实现 @@ -33,6 +41,8 @@ import static cn.iocoder.yudao.common.RepairCons.DICT_REPAIR_UNIT; public class DlTwItemServiceImpl extends ServiceImpl implements DlTwItemService { + @Resource + private DlTwItemMapper dlTwItemMapper; @Resource private RepairWaresService repairWaresService; @Resource @@ -40,6 +50,9 @@ public class DlTwItemServiceImpl extends ServiceImpl @Resource @Lazy private RepairWaresService waresService; + @Resource + @Lazy + private DlTicketWaresService ticketWaresService; /** * 根据主表查看全部 @@ -78,6 +91,153 @@ public class DlTwItemServiceImpl extends ServiceImpl } return null; } + + /** + * 给配件申请表子表添加数据 + * + * @author 小李 + * @date 17:47 2024/11/13 + * @param addTwiVO 对象 + **/ + @Override + public void addTwi(AddTwiVO addTwiVO){ + // 构建子表数据 + if (CollectionUtil.isEmpty(addTwiVO.getItems())){ + throw exception0(500, "请选择配件"); + } + // 查出该配件申请单已有的所有配件,这里只取没有审核过(通过、驳回的不要,同一个配件如果已经审核过了又添加,还是算新的) + List oldData = baseMapper.selectList(new LambdaQueryWrapper().and(i -> { + i.in(DlTwItem::getTwId, addTwiVO.getId()) + .eq(DlTwItem::getWaresStatus, ""); + })); + if (CollectionUtil.isNotEmpty(oldData)){ + // 取配件ID + List ids = oldData.stream().map(DlTwItem::getWaresId).collect(Collectors.toList()); + // 过滤添加的 + List add = addTwiVO.getItems().stream().filter(item -> !ids.contains(item.getId())).collect(Collectors.toList()); + // 过滤存在的 + List update = addTwiVO.getItems().stream().filter(item -> ids.contains(item.getId())).collect(Collectors.toList()); + // 添加 + if (CollectionUtil.isNotEmpty(add)){ + List twItems = add.stream().map(item -> { + DlTwItem twItem = new DlTwItem(); + twItem.setTwId(addTwiVO.getId()); + twItem.setWaresId(item.getId()); + twItem.setWaresName(item.getName()); + twItem.setWaresCount(item.getCount()); + twItem.setWaresAlreadyCount(0); + twItem.setWaresStatus(""); + twItem.setRemark(item.getRemark()); + return twItem; + }).collect(Collectors.toList()); + // 新增 + baseMapper.insert(twItems); + } + // 更新 + if (CollectionUtil.isNotEmpty(update)){ + List twItems = update.stream().map(item -> { + DlTwItem twItem = oldData.stream().filter(i -> i.getWaresId().equals(item.getId())).findFirst().orElse(null); + // 只更新数量,其他不变 + if (twItem != null) { + twItem.setWaresCount(twItem.getWaresCount() + item.getCount()); + } + return twItem; + }).collect(Collectors.toList()); + baseMapper.updateById(twItems); + } + }else { + List twItems = addTwiVO.getItems().stream().map(item -> { + DlTwItem twItem = new DlTwItem(); + twItem.setTwId(addTwiVO.getId()); + twItem.setWaresId(item.getId()); + twItem.setWaresName(item.getName()); + twItem.setWaresCount(item.getCount()); + twItem.setWaresAlreadyCount(0); + twItem.setWaresStatus(""); + twItem.setRemark(item.getRemark()); + return twItem; + }).collect(Collectors.toList()); + // 新增 + baseMapper.insert(twItems); + } + } + + /** + * APP查询配件申请单列表-按配件分类进行分组 + * + * @param reqVO + * @return java.lang.Object + * @author vinjor-M + * @date 14:03 2024/11/20 + **/ + @Override + public Object listApp(DlTwItemReqVO reqVO) { + // 查记录 + List dlTwItemRespVOList = dlTwItemMapper.listTwItemApp(reqVO); + List waresGroupList = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(dlTwItemRespVOList)) { + //先过滤出itenTypeId为null或空,或者itemTypeName为null或空的,为单独一个组 + List nullList = dlTwItemRespVOList.stream().filter(item-> StringUtils.isEmpty(item.getTypeId()) || StringUtils.isEmpty(item.getTypeName())).collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(nullList)) { + AppWaresGroupVO waresGroupVO = new AppWaresGroupVO(); + //审核通过数量、不通过数量、待审核数量 + final int[] numArray= {0,0,0}; + waresGroupVO.setTwItemList(nullList.stream().peek(item->{ + if(StringUtils.isEmpty(item.getWaresStatus())){ + //待审核 + numArray[2]++; + item.setSelected(false); + }else{ + if("1".equals(item.getWaresStatus())){ + //通过 + numArray[0]++; + }else{ + //不通过 + numArray[1]++; + } + item.setApprovalTime(item.getUpdateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + } + }).collect(Collectors.toList())); + waresGroupVO.setGroupName("未知分组"); + waresGroupVO.setNums(nullList.size()); + waresGroupVO.setAllowNum(numArray[0]); + waresGroupVO.setNoNum(numArray[1]); + waresGroupVO.setWaitingNum(numArray[2]); + waresGroupList.add(waresGroupVO); + } + //过滤出有分类的进行分组 + Map> groupListMap = dlTwItemRespVOList.stream().filter(item->StringUtils.isNotEmpty(item.getTypeId()) && StringUtils.isNotEmpty(item.getTypeName())).collect(Collectors.groupingBy(DlTwItemRespVO::getTypeId)); + for (String key:groupListMap.keySet()){ + AppWaresGroupVO waresGroupVO = new AppWaresGroupVO(); + //审核通过数量、不通过数量、待审核数量 + final int[] numArray= {0,0,0}; + waresGroupVO.setTwItemList(groupListMap.get(key).stream().peek(item->{ + if(StringUtils.isEmpty(item.getWaresStatus())){ + //待审核 + numArray[2]++; + item.setSelected(false); + }else{ + if("1".equals(item.getWaresStatus())){ + //通过 + numArray[0]++; + }else{ + //不通过 + numArray[1]++; + } + item.setApprovalTime(item.getUpdateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + } + }).collect(Collectors.toList())); + waresGroupVO.setGroupName(groupListMap.get(key).get(0).getTypeName()); + waresGroupVO.setGroupId(key); + waresGroupVO.setNums(groupListMap.get(key).size()); + waresGroupVO.setAllowNum(numArray[0]); + waresGroupVO.setNoNum(numArray[1]); + waresGroupVO.setWaitingNum(numArray[2]); + waresGroupList.add(waresGroupVO); + } + } + return waresGroupList; + } } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/AddTwiVO.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/AddTwiVO.java new file mode 100644 index 00000000..ec012d54 --- /dev/null +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/AddTwiVO.java @@ -0,0 +1,42 @@ +package cn.iocoder.yudao.module.tickets.vo; + +import lombok.Data; + +import java.util.List; + +/** + * 给配件申请表子表添加数据 + * + * @author 小李 + * @date 17:41 2024/11/13 +**/ +@Data +public class AddTwiVO { + + private String id; + + private List items; + + /** + * 配件的信息 + * + * @author 小李 + * @date 17:45 2024/11/13 + **/ + @Data + public static class AddTwiVoItem { + + /** 配件ID */ + private String id; + + /** 配件名称 */ + private String name; + + /** 配件数量 */ + private Integer count; + + /** 备注 */ + private String remark; + + } +} \ No newline at end of file diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/AppWaresGroupVO.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/AppWaresGroupVO.java new file mode 100644 index 00000000..9f3b04ce --- /dev/null +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/AppWaresGroupVO.java @@ -0,0 +1,37 @@ +package cn.iocoder.yudao.module.tickets.vo; + +import cn.iocoder.yudao.module.stockOperate.vo.DlRepairSoiRespVO; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +/** + * app使用的配件明细,按分类分组后的 + * @author vinjor-M + * @date 10:10 2024/11/19 +**/ +@Data +public class AppWaresGroupVO { + /** 分组ID(分类ID) */ + private String groupId; + /** 分组名称(分类名称) */ + private String groupName; + /** 配件总数量 */ + private Integer nums; + /** 总价 */ + private BigDecimal totalAmount; + /** 配件明细 */ + private List wares; + /** 配件申请单配件明细 */ + private List twItemList; + /** 领料、退料单配件明细 */ + private List soiRespVOList; + + /** 审核通过数量-- */ + private Integer allowNum; + /** 待审核数量-- */ + private Integer waitingNum; + /** 审核不通过数量-- */ + private Integer noNum; +} diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsReqVO.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsReqVO.java index 0fa15d2b..9e2d6bd0 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsReqVO.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsReqVO.java @@ -36,4 +36,10 @@ public class DlRepairTicketsReqVO extends DlRepairTickets { /** 图片路径 */ private String image; + + /** 当前操作人包含集合,主要用在服务顾问那儿 */ + private List nowRepairIds; + + /** 客户来源 */ + private String cusFrom; } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsRespVO.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsRespVO.java index 694d3ea4..307d594c 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsRespVO.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTicketsRespVO.java @@ -63,4 +63,6 @@ public class DlRepairTicketsRespVO extends DlRepairTickets { /** 维修班组长是否可以重新派工--当前施工人是自己或者本班组内的人员 */ private Boolean canOperate; + /** app分组回显专用--配件明细 */ + List waresGroupList; } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTitemReqVO.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTitemReqVO.java index 00d921b5..283d519e 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTitemReqVO.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlRepairTitemReqVO.java @@ -23,4 +23,9 @@ public class DlRepairTitemReqVO extends DlRepairTitem { // 附加详情 private DlRepairOther other; + /** 配件分类名称 */ + private String itemTypeName; + /** 配件单位名称 */ + private String unitText; + } diff --git a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlTwItemRespVO.java b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlTwItemRespVO.java index 64a623cb..6edf4803 100644 --- a/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlTwItemRespVO.java +++ b/dl-module-repair/src/main/java/cn/iocoder/yudao/module/tickets/vo/DlTwItemRespVO.java @@ -4,6 +4,8 @@ import cn.iocoder.yudao.module.project.entity.RepairWares; import cn.iocoder.yudao.module.tickets.entity.DlTwItem; import lombok.Data; +import java.math.BigDecimal; + /** * 工单配件申请/退回子表响应VO * @@ -15,6 +17,18 @@ public class DlTwItemRespVO extends DlTwItem { /** 配件详情 */ private RepairWares wares; + /** 配件分类id */ + private String typeId; /** 配件分类名称 */ private String typeName; + /** 配件计量单位名称 */ + private String unitText; + /** 是否选中 */ + private Boolean selected; + /** 售价 */ + private BigDecimal salePrice; + /** 库存 */ + private Integer stock; + /** 审核时间 */ + private String approvalTime; } diff --git a/dl-module-repair/src/main/resources/mapper/stockOperate/DlRepairSoMapper.xml b/dl-module-repair/src/main/resources/mapper/stockOperate/DlRepairSoMapper.xml index 3f1476ad..e3efa60c 100644 --- a/dl-module-repair/src/main/resources/mapper/stockOperate/DlRepairSoMapper.xml +++ b/dl-module-repair/src/main/resources/mapper/stockOperate/DlRepairSoMapper.xml @@ -101,4 +101,33 @@ AND so_status = #{status} AND deleted = 0 + diff --git a/dl-module-repair/src/main/resources/mapper/stockOperate/DlRepairSoiMapper.xml b/dl-module-repair/src/main/resources/mapper/stockOperate/DlRepairSoiMapper.xml index a6f22bad..b67e1c73 100644 --- a/dl-module-repair/src/main/resources/mapper/stockOperate/DlRepairSoiMapper.xml +++ b/dl-module-repair/src/main/resources/mapper/stockOperate/DlRepairSoiMapper.xml @@ -69,4 +69,83 @@ ) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml b/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml index f162f649..7cc96744 100644 --- a/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml +++ b/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTicketsMapper.xml @@ -214,9 +214,13 @@ , IF(FIND_IN_SET(drt.now_repair_id, #{map.userIdsStr}) > 0,true,false) AS can_operate from dl_repair_tickets drt + + -- 按客户来源查,需要关联客户表 -- + left join base_customer_main bcm ON drt.user_id = bcm.id + left join dl_repair_titem drti on drt.id = drti.ticket_id AND drti.deleted = '0' - where (drt.deleted = '0') AND drt.tickets_status IN ('04','05','01','07') + where (drt.deleted = '0') AND drt.tickets_status IN ('04','05','01','07','06','02') and ( drt.ticket_no like concat('%', #{map.ticketNo}, '%') @@ -233,15 +237,44 @@ and (drt.create_time between #{map.searchTimeArray[0]} and #{map.searchTimeArray[1]}) + + AND (drt.repair_type=#{map.repairType}) + + + + + -- 公务车,查政企客户 -- + AND (bcm.type_code='03') + + + -- 企业用车,查代办客户 -- + AND (bcm.type_code='02') + + + -- 家庭自用车01、客户转介绍02、员工转介绍03、救援转维修05 -- + AND (bcm.inviter_type=#{map.cusFrom}) + + + - -- 小李用的逻辑 -- - + -- 小李用的逻辑--isFinish不需要了 -- + + -- 总检查待处理还是用这个 -- AND ( drt.now_repair_id = #{map.nowRepairId}) + -- 服务顾问查待处理(服务顾问之间可以相互查) -- + + AND ( + drt.now_repair_id in + + #{id} + + ) + -- 正常查询用的逻辑 -- @@ -255,10 +288,11 @@ ) + -- 服务顾问和仓管查待办都是查未结束的工单 -- + AND drt.is_finish = '0' - -- 查服务顾问 待处理的 工单未完成并且服务顾问是自己的 工单已完成且当前处理人是自己的-- - AND ( drt.is_finish = '0' AND drt.adviser_id = #{map.adviserId} ) - OR (drt.is_finish = '1' AND drt.now_repair_id = #{map.adviserId}) + -- 查服务顾问 当前处理人或服务顾问是自己的-- + AND ( drt.adviser_id = #{map.adviserId} OR drt.now_repair_id = #{map.adviserId}) -- 查总检待处理的 -- @@ -304,6 +338,10 @@ + diff --git a/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTitemMapper.xml b/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTitemMapper.xml index ff4e32fd..f08bf9bc 100644 --- a/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTitemMapper.xml +++ b/dl-module-repair/src/main/resources/mapper/tickets/DlRepairTitemMapper.xml @@ -109,4 +109,37 @@ drt.update_time, drri.create_time + diff --git a/dl-module-repair/src/main/resources/mapper/tickets/DlTicketWaresMapper.xml b/dl-module-repair/src/main/resources/mapper/tickets/DlTicketWaresMapper.xml index ec7b8bcc..25bdb30d 100644 --- a/dl-module-repair/src/main/resources/mapper/tickets/DlTicketWaresMapper.xml +++ b/dl-module-repair/src/main/resources/mapper/tickets/DlTicketWaresMapper.xml @@ -21,6 +21,11 @@ + + + + + @@ -40,7 +45,12 @@ dtw.adviser_name, dtw.status, dtw.remark, - dtw.create_time + dtw.create_time, + dtw.images, + dtw.to_safe, + dtw.safe_name, + dtw.safe_contact, + dtw.safe_mobile from dl_ticket_wares dtw left join dl_repair_tickets drt on dtw.ticket_id = drt.id diff --git a/dl-module-repair/src/main/resources/mapper/tickets/DlTwItemMapper.xml b/dl-module-repair/src/main/resources/mapper/tickets/DlTwItemMapper.xml index 9200d38b..1bd01b6f 100644 --- a/dl-module-repair/src/main/resources/mapper/tickets/DlTwItemMapper.xml +++ b/dl-module-repair/src/main/resources/mapper/tickets/DlTwItemMapper.xml @@ -47,4 +47,44 @@ and dti.wares_status = #{map.waresStatus} +