diff --git a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/AftersalesComplaintNoticeController.java b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/AftersalesComplaintNoticeController.java index d9b5d33d..3f8d9906 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/AftersalesComplaintNoticeController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/AftersalesComplaintNoticeController.java @@ -2,6 +2,10 @@ package com.ruoyi.aftersales.controller; import java.util.List; +import com.ruoyi.aftersales.domain.AftersalesComplaintNoticeDetail; +import com.ruoyi.aftersales.domain.vo.AftersalesMaterialVO; +import com.ruoyi.aftersales.service.IAftersalesComplaintNoticeDetailService; +import com.ruoyi.manufacture.domain.MaterialRequisitionDetail; import com.ruoyi.system.domain.SysCustomer; import com.ruoyi.system.domain.SysMakeOrder; import com.ruoyi.system.service.ISysMakeOrderService; @@ -9,11 +13,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.*; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.aftersales.domain.AftersalesComplaintNotice; @@ -38,6 +38,9 @@ public class AftersalesComplaintNoticeController extends BaseController @Autowired private IAftersalesComplaintNoticeService aftersalesComplaintNoticeService; + @Autowired + private IAftersalesComplaintNoticeDetailService complaintNoticeDetailService; + @RequiresPermissions("aftersales:complaintNotice:view") @GetMapping() public String complaintNotice() @@ -88,9 +91,9 @@ public class AftersalesComplaintNoticeController extends BaseController @Log(title = "售后客诉通知单", businessType = BusinessType.INSERT) @PostMapping("/add") @ResponseBody - public AjaxResult addSave(AftersalesComplaintNotice aftersalesComplaintNotice) + public AjaxResult addSave(@RequestBody AftersalesComplaintNoticeDetail complaintNoticeDetail) { - return toAjax(aftersalesComplaintNoticeService.insertAftersalesComplaintNotice(aftersalesComplaintNotice)); + return toAjax(complaintNoticeDetailService.insertAftersalesComplaintNoticeDetail(complaintNoticeDetail)); } /** @@ -129,36 +132,35 @@ public class AftersalesComplaintNoticeController extends BaseController } /** - * 作废售后客诉通知单 - */ - @RequiresPermissions("aftersales:complaintNotice:cancel") - @Log(title = "售后客诉通知单", businessType = BusinessType.CANCEL) - @GetMapping( "/cancel/{id}") + * 查找与客户id关联的生产单号 + * */ @ResponseBody - public AjaxResult cancel(@PathVariable("id") Long id){ - return toAjax(aftersalesComplaintNoticeService.cancelAftersalesComplaintNoticeById(id)); + @GetMapping("/getMakeNosByCustomerId/{customerId}") + public List getCustomers(@PathVariable String customerId) { + List list = aftersalesComplaintNoticeService.selectMakeOrdersByCustomerId(customerId); + return list; } + /** - * 恢复售后客诉通知单 + * 查找与客户生产单号有关的物料信息 */ - @RequiresPermissions("aftersales:complaintNotice:restore") - @Log(title = "售后客诉通知单", businessType = BusinessType.RESTORE) - @GetMapping( "/restore/{id}") - @ResponseBody - public AjaxResult restore(@PathVariable("id")Long id) + @GetMapping("/materialSelect") + public String materialSelect(@RequestParam String makeNo,ModelMap modelMap) { - return toAjax(aftersalesComplaintNoticeService.restoreAftersalesComplaintNoticeById(id)); + modelMap.put("makeNo",makeNo); + return prefix + "/materialSelect"; } /** - * 查找与客户id关联的生成单号 + * 查找与客户生产单号有关的物料信息 * */ @ResponseBody - @GetMapping("/getMakeNosByCustomerId/{customerId}") - public List getCustomers(@PathVariable String customerId) { - List list = aftersalesComplaintNoticeService.selectMakeOrdersByCustomerId(customerId); - return list; + @PostMapping("/getMaterialInfoByMakeNo") + public TableDataInfo getMaterialInfoByMakeNo(@RequestParam String makeNo){ + startPage(); + List list = aftersalesComplaintNoticeService.selectMaterialInfoByMakeNo(makeNo); + return getDataTable(list); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/AftersalesComplaintNoticeDetailController.java b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/AftersalesComplaintNoticeDetailController.java new file mode 100644 index 00000000..1f27281a --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/controller/AftersalesComplaintNoticeDetailController.java @@ -0,0 +1,151 @@ +package com.ruoyi.aftersales.controller; + +import java.util.List; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.aftersales.domain.AftersalesComplaintNoticeDetail; +import com.ruoyi.aftersales.service.IAftersalesComplaintNoticeDetailService; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 售后客诉通知单详情Controller + * + * @author 刘晓旭 + * @date 2024-04-25 + */ +@Controller +@RequestMapping("/aftersales/complaintNoticeDetail") +public class AftersalesComplaintNoticeDetailController extends BaseController +{ + private String prefix = "aftersales/complaintNoticeDetail"; + + @Autowired + private IAftersalesComplaintNoticeDetailService aftersalesComplaintNoticeDetailService; + + @RequiresPermissions("aftersales:complaintNoticeDetail:view") + @GetMapping() + public String complaintNoticeDetail() + { + return prefix + "/complaintNoticeDetail"; + } + + /** + * 查询售后客诉通知单详情列表 + */ + @RequiresPermissions("aftersales:complaintNoticeDetail:list") + @PostMapping("/list") + @ResponseBody + public TableDataInfo list(AftersalesComplaintNoticeDetail aftersalesComplaintNoticeDetail) + { + startPage(); + List list = aftersalesComplaintNoticeDetailService.selectAftersalesComplaintNoticeDetailList(aftersalesComplaintNoticeDetail); + return getDataTable(list); + } + + /** + * 导出售后客诉通知单详情列表 + */ + @RequiresPermissions("aftersales:complaintNoticeDetail:export") + @Log(title = "售后客诉通知单详情", businessType = BusinessType.EXPORT) + @PostMapping("/export") + @ResponseBody + public AjaxResult export(AftersalesComplaintNoticeDetail aftersalesComplaintNoticeDetail) + { + List list = aftersalesComplaintNoticeDetailService.selectAftersalesComplaintNoticeDetailList(aftersalesComplaintNoticeDetail); + ExcelUtil util = new ExcelUtil(AftersalesComplaintNoticeDetail.class); + return util.exportExcel(list, "售后客诉通知单详情数据"); + } + + /** + * 新增售后客诉通知单详情 + */ + @GetMapping("/add") + public String add() + { + return prefix + "/add"; + } + + /** + * 新增保存售后客诉通知单详情 + */ + @RequiresPermissions("aftersales:complaintNoticeDetail:add") + @Log(title = "售后客诉通知单详情", businessType = BusinessType.INSERT) + @PostMapping("/add") + @ResponseBody + public AjaxResult addSave(AftersalesComplaintNoticeDetail aftersalesComplaintNoticeDetail) + { + return toAjax(aftersalesComplaintNoticeDetailService.insertAftersalesComplaintNoticeDetail(aftersalesComplaintNoticeDetail)); + } + + /** + * 修改售后客诉通知单详情 + */ + @GetMapping("/edit/{complaintNoticeDetailId}") + public String edit(@PathVariable("complaintNoticeDetailId") Long complaintNoticeDetailId, ModelMap mmap) + { + AftersalesComplaintNoticeDetail aftersalesComplaintNoticeDetail = aftersalesComplaintNoticeDetailService.selectAftersalesComplaintNoticeDetailById(complaintNoticeDetailId); + mmap.put("aftersalesComplaintNoticeDetail", aftersalesComplaintNoticeDetail); + return prefix + "/edit"; + } + + /** + * 修改保存售后客诉通知单详情 + */ + @RequiresPermissions("aftersales:complaintNoticeDetail:edit") + @Log(title = "售后客诉通知单详情", businessType = BusinessType.UPDATE) + @PostMapping("/edit") + @ResponseBody + public AjaxResult editSave(AftersalesComplaintNoticeDetail aftersalesComplaintNoticeDetail) + { + return toAjax(aftersalesComplaintNoticeDetailService.updateAftersalesComplaintNoticeDetail(aftersalesComplaintNoticeDetail)); + } + + /** + * 删除售后客诉通知单详情 + */ + @RequiresPermissions("aftersales:complaintNoticeDetail:remove") + @Log(title = "售后客诉通知单详情", businessType = BusinessType.DELETE) + @PostMapping( "/remove") + @ResponseBody + public AjaxResult remove(String ids) + { + return toAjax(aftersalesComplaintNoticeDetailService.deleteAftersalesComplaintNoticeDetailByIds(ids)); + } + + /** + * 作废售后客诉通知单详情 + */ + @RequiresPermissions("aftersales:complaintNoticeDetail:cancel") + @Log(title = "售后客诉通知单详情", businessType = BusinessType.CANCEL) + @GetMapping( "/cancel/{id}") + @ResponseBody + public AjaxResult cancel(@PathVariable("id") Long id){ + return toAjax(aftersalesComplaintNoticeDetailService.cancelAftersalesComplaintNoticeDetailById(id)); + } + + /** + * 恢复售后客诉通知单详情 + */ + @RequiresPermissions("aftersales:complaintNoticeDetail:restore") + @Log(title = "售后客诉通知单详情", businessType = BusinessType.RESTORE) + @GetMapping( "/restore/{id}") + @ResponseBody + public AjaxResult restore(@PathVariable("id")Long id) + { + return toAjax(aftersalesComplaintNoticeDetailService.restoreAftersalesComplaintNoticeDetailById(id)); + } + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/domain/AftersalesComplaintNoticeDetail.java b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/domain/AftersalesComplaintNoticeDetail.java new file mode 100644 index 00000000..9a08f579 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/domain/AftersalesComplaintNoticeDetail.java @@ -0,0 +1,380 @@ +package com.ruoyi.aftersales.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 售后客诉通知单详情对象 aftersales_complaint_notice_detail + * + * @author 刘晓旭 + * @date 2024-04-25 + */ +public class AftersalesComplaintNoticeDetail extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 客诉通知详情ID */ + private Long complaintNoticeDetailId; + + /** 客诉通知单号 */ + private String complaintNoticeCode; + + /** 关联生产订单号 */ + private String makeNo; + + /** 用户ID */ + private Long userId; + + /** 交货数量 */ + private String deliveryGoodsNum; + + /** 紧急程度 */ + @Excel(name = "紧急程度") + private String emergencyDegree; + + /** 客诉问题 */ + @Excel(name = "客诉问题") + private String complaintProblem; + + /** 是否结案 */ + private String closingProcedures; + + /** 不良报告问题 */ + @Excel(name = "不良报告问题") + private String adverseReportUrl; + + /** 客户ID */ + private String customerId; + + /** 客户名称 */ + private String customerName; + + /** 设备型号 */ + private String deviceModelCode; + + /** 设备名称 */ + private String deviceModelName; + + /** SN号(产品序列号) */ + @Excel(name = "SN号", readConverterExp = "产=品序列号") + private String snCode; + + /** 设备流水号 */ + private String deviceRunningNumber; + + /** 料号 */ + @Excel(name = "料号") + private String materialNo; + + /** 物料名称 */ + @Excel(name = "物料名称") + private String materialName; + + /** 物料类型 */ + @Excel(name = "物料类型") + private String materialType; + + /** 物料图片地址 */ + @Excel(name = "物料图片地址") + private String materialPhotourl; + + /** 物料品牌 */ + @Excel(name = "物料品牌") + private String materialBrand; + + /** 物料单位 */ + @Excel(name = "物料单位") + private String materialUnit; + + /** 物料描述 */ + @Excel(name = "物料描述") + private String materialDescribe; + + /** 物料加工方式 */ + @Excel(name = "物料加工方式") + private String materialProcessMethod; + + /** 已出库数量 */ + @Excel(name = "已出库数量") + private String shippedGoodsSum; + + /** 物料数合计 */ + private String materialSum; + + /** 数量合计 */ + private String enterpriseSum; + + public void setComplaintNoticeDetailId(Long complaintNoticeDetailId) + { + this.complaintNoticeDetailId = complaintNoticeDetailId; + } + + public Long getComplaintNoticeDetailId() + { + return complaintNoticeDetailId; + } + public void setComplaintNoticeCode(String complaintNoticeCode) + { + this.complaintNoticeCode = complaintNoticeCode; + } + + public String getComplaintNoticeCode() + { + return complaintNoticeCode; + } + public void setMakeNo(String makeNo) + { + this.makeNo = makeNo; + } + + public String getMakeNo() + { + return makeNo; + } + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + public void setDeliveryGoodsNum(String deliveryGoodsNum) + { + this.deliveryGoodsNum = deliveryGoodsNum; + } + + public String getDeliveryGoodsNum() + { + return deliveryGoodsNum; + } + public void setEmergencyDegree(String emergencyDegree) + { + this.emergencyDegree = emergencyDegree; + } + + public String getEmergencyDegree() + { + return emergencyDegree; + } + public void setComplaintProblem(String complaintProblem) + { + this.complaintProblem = complaintProblem; + } + + public String getComplaintProblem() + { + return complaintProblem; + } + public void setClosingProcedures(String closingProcedures) + { + this.closingProcedures = closingProcedures; + } + + public String getClosingProcedures() + { + return closingProcedures; + } + public void setAdverseReportUrl(String adverseReportUrl) + { + this.adverseReportUrl = adverseReportUrl; + } + + public String getAdverseReportUrl() + { + return adverseReportUrl; + } + public void setCustomerId(String customerId) + { + this.customerId = customerId; + } + + public String getCustomerId() + { + return customerId; + } + public void setCustomerName(String customerName) + { + this.customerName = customerName; + } + + public String getCustomerName() + { + return customerName; + } + public void setDeviceModelCode(String deviceModelCode) + { + this.deviceModelCode = deviceModelCode; + } + + public String getDeviceModelCode() + { + return deviceModelCode; + } + public void setDeviceModelName(String deviceModelName) + { + this.deviceModelName = deviceModelName; + } + + public String getDeviceModelName() + { + return deviceModelName; + } + public void setSnCode(String snCode) + { + this.snCode = snCode; + } + + public String getSnCode() + { + return snCode; + } + public void setDeviceRunningNumber(String deviceRunningNumber) + { + this.deviceRunningNumber = deviceRunningNumber; + } + + public String getDeviceRunningNumber() + { + return deviceRunningNumber; + } + public void setMaterialNo(String materialNo) + { + this.materialNo = materialNo; + } + + public String getMaterialNo() + { + return materialNo; + } + public void setMaterialName(String materialName) + { + this.materialName = materialName; + } + + public String getMaterialName() + { + return materialName; + } + public void setMaterialType(String materialType) + { + this.materialType = materialType; + } + + public String getMaterialType() + { + return materialType; + } + public void setMaterialPhotourl(String materialPhotourl) + { + this.materialPhotourl = materialPhotourl; + } + + public String getMaterialPhotourl() + { + return materialPhotourl; + } + public void setMaterialBrand(String materialBrand) + { + this.materialBrand = materialBrand; + } + + public String getMaterialBrand() + { + return materialBrand; + } + public void setMaterialUnit(String materialUnit) + { + this.materialUnit = materialUnit; + } + + public String getMaterialUnit() + { + return materialUnit; + } + public void setMaterialDescribe(String materialDescribe) + { + this.materialDescribe = materialDescribe; + } + + public String getMaterialDescribe() + { + return materialDescribe; + } + public void setMaterialProcessMethod(String materialProcessMethod) + { + this.materialProcessMethod = materialProcessMethod; + } + + public String getMaterialProcessMethod() + { + return materialProcessMethod; + } + public void setShippedGoodsSum(String shippedGoodsSum) + { + this.shippedGoodsSum = shippedGoodsSum; + } + + public String getShippedGoodsSum() + { + return shippedGoodsSum; + } + public void setMaterialSum(String materialSum) + { + this.materialSum = materialSum; + } + + public String getMaterialSum() + { + return materialSum; + } + public void setEnterpriseSum(String enterpriseSum) + { + this.enterpriseSum = enterpriseSum; + } + + public String getEnterpriseSum() + { + return enterpriseSum; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("complaintNoticeDetailId", getComplaintNoticeDetailId()) + .append("complaintNoticeCode", getComplaintNoticeCode()) + .append("makeNo", getMakeNo()) + .append("userId", getUserId()) + .append("deliveryGoodsNum", getDeliveryGoodsNum()) + .append("emergencyDegree", getEmergencyDegree()) + .append("complaintProblem", getComplaintProblem()) + .append("closingProcedures", getClosingProcedures()) + .append("adverseReportUrl", getAdverseReportUrl()) + .append("customerId", getCustomerId()) + .append("customerName", getCustomerName()) + .append("deviceModelCode", getDeviceModelCode()) + .append("deviceModelName", getDeviceModelName()) + .append("snCode", getSnCode()) + .append("deviceRunningNumber", getDeviceRunningNumber()) + .append("materialNo", getMaterialNo()) + .append("materialName", getMaterialName()) + .append("materialType", getMaterialType()) + .append("materialPhotourl", getMaterialPhotourl()) + .append("materialBrand", getMaterialBrand()) + .append("materialUnit", getMaterialUnit()) + .append("materialDescribe", getMaterialDescribe()) + .append("materialProcessMethod", getMaterialProcessMethod()) + .append("shippedGoodsSum", getShippedGoodsSum()) + .append("materialSum", getMaterialSum()) + .append("enterpriseSum", getEnterpriseSum()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/domain/vo/AftersalesMaterialVO.java b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/domain/vo/AftersalesMaterialVO.java new file mode 100644 index 00000000..554b84c2 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/domain/vo/AftersalesMaterialVO.java @@ -0,0 +1,62 @@ +package com.ruoyi.aftersales.domain.vo; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Data; + +@Data +public class AftersalesMaterialVO extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 售后数量 */ + private String deliveryGoodsNum; + + /** 紧急程度 */ + private String emergencyDegree; + + /** 售后问题 */ + private String complaintProblem; + + /** 售后报告 */ + private String adverseReportUrl; + + /** SN号(产品序列号) */ + private String snCode; + + /** 料号 */ + @Excel(name = "料号") + private String materialNo; + + /** 物料名称 */ + @Excel(name = "物料名称") + private String materialName; + + /** 物料类型 */ + @Excel(name = "物料类型") + private String materialType; + + /** 物料图片地址 */ + @Excel(name = "物料图片地址") + private String materialPhotourl; + + /** 物料品牌 */ + @Excel(name = "物料品牌") + private String materialBrand; + + /** 物料单位 */ + @Excel(name = "物料单位") + private String materialUnit; + + /** 物料描述 */ + @Excel(name = "物料描述") + private String materialDescribe; + + /** 物料加工方式 */ + @Excel(name = "物料加工方式") + private String materialProcessMethod; + + /** 已出库数量 */ + @Excel(name = "已出库数量") + private String shippedGoodsSum; +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/mapper/AftersalesComplaintNoticeDetailMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/mapper/AftersalesComplaintNoticeDetailMapper.java new file mode 100644 index 00000000..3e71cfde --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/mapper/AftersalesComplaintNoticeDetailMapper.java @@ -0,0 +1,88 @@ +package com.ruoyi.aftersales.mapper; + +import java.util.List; +import com.ruoyi.aftersales.domain.AftersalesComplaintNoticeDetail; +import io.lettuce.core.dynamic.annotation.Param; + +/** + * 售后客诉通知单详情Mapper接口 + * + * @author 刘晓旭 + * @date 2024-04-25 + */ +public interface AftersalesComplaintNoticeDetailMapper +{ + /** + * 查询售后客诉通知单详情 + * + * @param complaintNoticeDetailId 售后客诉通知单详情ID + * @return 售后客诉通知单详情 + */ + public AftersalesComplaintNoticeDetail selectAftersalesComplaintNoticeDetailById(Long complaintNoticeDetailId); + + /** + * 查询售后客诉通知单详情列表 + * + * @param aftersalesComplaintNoticeDetail 售后客诉通知单详情 + * @return 售后客诉通知单详情集合 + */ + public List selectAftersalesComplaintNoticeDetailList(AftersalesComplaintNoticeDetail aftersalesComplaintNoticeDetail); + + + + public List selectComplaintNoticeDetailListByMakeNo(String makeNo); + + /** + * 新增售后客诉通知单详情 + * + * @param aftersalesComplaintNoticeDetail 售后客诉通知单详情 + * @return 结果 + */ + public int insertAftersalesComplaintNoticeDetail(AftersalesComplaintNoticeDetail aftersalesComplaintNoticeDetail); + + /** + * 修改售后客诉通知单详情 + * + * @param aftersalesComplaintNoticeDetail 售后客诉通知单详情 + * @return 结果 + */ + public int updateAftersalesComplaintNoticeDetail(AftersalesComplaintNoticeDetail aftersalesComplaintNoticeDetail); + + /** + * 删除售后客诉通知单详情 + * + * @param complaintNoticeDetailId 售后客诉通知单详情ID + * @return 结果 + */ + public int deleteAftersalesComplaintNoticeDetailById(Long complaintNoticeDetailId); + + /** + * 批量删除售后客诉通知单详情 + * + * @param complaintNoticeDetailIds 需要删除的数据ID + * @return 结果 + */ + public int deleteAftersalesComplaintNoticeDetailByIds(String[] complaintNoticeDetailIds); + + /** + * 作废售后客诉通知单详情 + * + * @param complaintNoticeDetailId 售后客诉通知单详情ID + * @return 结果 + */ + public int cancelAftersalesComplaintNoticeDetailById(Long complaintNoticeDetailId); + + /** + * 恢复售后客诉通知单详情 + * + * @param complaintNoticeDetailId 售后客诉通知单详情ID + * @return 结果 + */ + public int restoreAftersalesComplaintNoticeDetailById(Long complaintNoticeDetailId); + + /** + * 获取今天已经生成的最大序号 + * @return 最大序号 + */ + String maxRoundCode(@Param("code") String code); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IAftersalesComplaintNoticeDetailService.java b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IAftersalesComplaintNoticeDetailService.java new file mode 100644 index 00000000..5bf79d7d --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IAftersalesComplaintNoticeDetailService.java @@ -0,0 +1,75 @@ +package com.ruoyi.aftersales.service; + +import java.util.List; +import com.ruoyi.aftersales.domain.AftersalesComplaintNoticeDetail; + +/** + * 售后客诉通知单详情Service接口 + * + * @author 刘晓旭 + * @date 2024-04-25 + */ +public interface IAftersalesComplaintNoticeDetailService +{ + /** + * 查询售后客诉通知单详情 + * + * @param complaintNoticeDetailId 售后客诉通知单详情ID + * @return 售后客诉通知单详情 + */ + public AftersalesComplaintNoticeDetail selectAftersalesComplaintNoticeDetailById(Long complaintNoticeDetailId); + + /** + * 查询售后客诉通知单详情列表 + * + * @param aftersalesComplaintNoticeDetail 售后客诉通知单详情 + * @return 售后客诉通知单详情集合 + */ + public List selectAftersalesComplaintNoticeDetailList(AftersalesComplaintNoticeDetail aftersalesComplaintNoticeDetail); + + /** + * 新增售后客诉通知单详情 + * + * @param aftersalesComplaintNoticeDetail 售后客诉通知单详情 + * @return 结果 + */ + public int insertAftersalesComplaintNoticeDetail(AftersalesComplaintNoticeDetail aftersalesComplaintNoticeDetail); + + /** + * 修改售后客诉通知单详情 + * + * @param aftersalesComplaintNoticeDetail 售后客诉通知单详情 + * @return 结果 + */ + public int updateAftersalesComplaintNoticeDetail(AftersalesComplaintNoticeDetail aftersalesComplaintNoticeDetail); + + /** + * 批量删除售后客诉通知单详情 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + public int deleteAftersalesComplaintNoticeDetailByIds(String ids); + + /** + * 删除售后客诉通知单详情信息 + * + * @param complaintNoticeDetailId 售后客诉通知单详情ID + * @return 结果 + */ + public int deleteAftersalesComplaintNoticeDetailById(Long complaintNoticeDetailId); + + /** + * 作废售后客诉通知单详情 + * @param complaintNoticeDetailId 售后客诉通知单详情ID + * @return + */ + int cancelAftersalesComplaintNoticeDetailById(Long complaintNoticeDetailId); + + /** + * 恢复售后客诉通知单详情 + * @param complaintNoticeDetailId 售后客诉通知单详情ID + * @return + */ + int restoreAftersalesComplaintNoticeDetailById(Long complaintNoticeDetailId); +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IAftersalesComplaintNoticeService.java b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IAftersalesComplaintNoticeService.java index 8b5a2363..9a162487 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IAftersalesComplaintNoticeService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/IAftersalesComplaintNoticeService.java @@ -2,6 +2,8 @@ package com.ruoyi.aftersales.service; import java.util.List; import com.ruoyi.aftersales.domain.AftersalesComplaintNotice; +import com.ruoyi.aftersales.domain.AftersalesComplaintNoticeDetail; +import com.ruoyi.aftersales.domain.vo.AftersalesMaterialVO; import com.ruoyi.system.domain.SysMakeOrder; /** @@ -36,6 +38,8 @@ public interface IAftersalesComplaintNoticeService */ public int insertAftersalesComplaintNotice(AftersalesComplaintNotice aftersalesComplaintNotice); + + /** * 修改售后客诉通知单 * @@ -79,4 +83,10 @@ public interface IAftersalesComplaintNoticeService * @param customerId * */ List selectMakeOrdersByCustomerId(String customerId); + + /** + * 查找与生产单号有关的物料信息 + * @param makeNo + * */ + List selectMaterialInfoByMakeNo(String makeNo); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AftersalesComplaintNoticeDetailServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AftersalesComplaintNoticeDetailServiceImpl.java new file mode 100644 index 00000000..518a97be --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AftersalesComplaintNoticeDetailServiceImpl.java @@ -0,0 +1,172 @@ +package com.ruoyi.aftersales.service.impl; + +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.ShiroUtils; +import com.ruoyi.common.utils.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.aftersales.mapper.AftersalesComplaintNoticeDetailMapper; +import com.ruoyi.aftersales.domain.AftersalesComplaintNoticeDetail; +import com.ruoyi.aftersales.service.IAftersalesComplaintNoticeDetailService; +import com.ruoyi.common.core.text.Convert; +import org.springframework.transaction.annotation.Transactional; + +/** + * 售后客诉通知单详情Service业务层处理 + * + * @author 刘晓旭 + * @date 2024-04-25 + */ +@Service +public class AftersalesComplaintNoticeDetailServiceImpl implements IAftersalesComplaintNoticeDetailService +{ + @Autowired + private AftersalesComplaintNoticeDetailMapper aftersalesComplaintNoticeDetailMapper; + + /** + * 查询售后客诉通知单详情 + * + * @param complaintNoticeDetailId 售后客诉通知单详情ID + * @return 售后客诉通知单详情 + */ + @Override + public AftersalesComplaintNoticeDetail selectAftersalesComplaintNoticeDetailById(Long complaintNoticeDetailId) + { + return aftersalesComplaintNoticeDetailMapper.selectAftersalesComplaintNoticeDetailById(complaintNoticeDetailId); + } + + /** + * 查询售后客诉通知单详情列表 + * + * @param aftersalesComplaintNoticeDetail 售后客诉通知单详情 + * @return 售后客诉通知单详情 + */ + @Override + public List selectAftersalesComplaintNoticeDetailList(AftersalesComplaintNoticeDetail aftersalesComplaintNoticeDetail) + { + return aftersalesComplaintNoticeDetailMapper.selectAftersalesComplaintNoticeDetailList(aftersalesComplaintNoticeDetail); + } + + /** + * 新增售后客诉通知单详情 + * + * @param complaintNoticeDetail 售后客诉通知单详情 + * @return 结果 + */ + @Transactional + @Override + public int insertAftersalesComplaintNoticeDetail(AftersalesComplaintNoticeDetail complaintNoticeDetail) + { + + SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd"); + String code = "KS"+df.format(new Date()); + //模糊查询当前最大的编码 + String maxCode = aftersalesComplaintNoticeDetailMapper.maxRoundCode(code); + String newCode = null; + if (StringUtils.isEmpty(maxCode)){ + newCode= code+"001"; + }else { + //切割字符串,取查到编号后三位 + String getMaxCode = maxCode.substring(11, 13); + newCode = code+getNum(getMaxCode); + } + // 生成complaintNoticeCode + complaintNoticeDetail.setComplaintNoticeCode(newCode); + String loginName = ShiroUtils.getLoginName(); + complaintNoticeDetail.setCreateBy(loginName); + complaintNoticeDetail.setCreateTime(DateUtils.getNowDate()); + return aftersalesComplaintNoticeDetailMapper.insertAftersalesComplaintNoticeDetail(complaintNoticeDetail); + } + + /** + * 修改售后客诉通知单详情 + * + * @param aftersalesComplaintNoticeDetail 售后客诉通知单详情 + * @return 结果 + */ + @Override + public int updateAftersalesComplaintNoticeDetail(AftersalesComplaintNoticeDetail aftersalesComplaintNoticeDetail) + { + String loginName = ShiroUtils.getLoginName(); + aftersalesComplaintNoticeDetail.setUpdateBy(loginName); + aftersalesComplaintNoticeDetail.setUpdateTime(DateUtils.getNowDate()); + return aftersalesComplaintNoticeDetailMapper.updateAftersalesComplaintNoticeDetail(aftersalesComplaintNoticeDetail); + } + + /** + * 删除售后客诉通知单详情对象 + * + * @param ids 需要删除的数据ID + * @return 结果 + */ + @Override + public int deleteAftersalesComplaintNoticeDetailByIds(String ids) + { + return aftersalesComplaintNoticeDetailMapper.deleteAftersalesComplaintNoticeDetailByIds(Convert.toStrArray(ids)); + } + + /** + * 删除售后客诉通知单详情信息 + * + * @param complaintNoticeDetailId 售后客诉通知单详情ID + * @return 结果 + */ + @Override + public int deleteAftersalesComplaintNoticeDetailById(Long complaintNoticeDetailId) + { + return aftersalesComplaintNoticeDetailMapper.deleteAftersalesComplaintNoticeDetailById(complaintNoticeDetailId); + } + + /** + * 作废售后客诉通知单详情 + * + * @param complaintNoticeDetailId 售后客诉通知单详情ID + * @return 结果 + */ + @Override + public int cancelAftersalesComplaintNoticeDetailById(Long complaintNoticeDetailId) + { + return aftersalesComplaintNoticeDetailMapper.cancelAftersalesComplaintNoticeDetailById(complaintNoticeDetailId); + } + + /** + * 恢复售后客诉通知单详情信息 + * + * @param complaintNoticeDetailId 售后客诉通知单详情ID + * @return 结果 + */ + @Override + public int restoreAftersalesComplaintNoticeDetailById(Long complaintNoticeDetailId) + { + return aftersalesComplaintNoticeDetailMapper.restoreAftersalesComplaintNoticeDetailById(complaintNoticeDetailId); + } + + + /** + *客诉单号生成规则: + *系统自动生成,按照特定编码,编码暂用【KS+年月日+001】, + *自增长,如:KS20231111001,KS20231111002 + * + * @param code 当前最大编码 + */ + public static String getNum(String code){ + String roundCode="001"; + if (code!=null && !code.isEmpty()){ + int intCode= Integer.parseInt(code)+1; + if (intCode <999){ + roundCode =String.format(String.valueOf(intCode)); + }else { + throw new RuntimeException("当日编号达到最大"); + } + } + + //编号前面补0 + DecimalFormat df = new DecimalFormat("000"); + String newCode = df.format(Integer.parseInt(roundCode)); + return newCode; + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AftersalesComplaintNoticeServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AftersalesComplaintNoticeServiceImpl.java index b07295de..54d689c0 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AftersalesComplaintNoticeServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/aftersales/service/impl/AftersalesComplaintNoticeServiceImpl.java @@ -4,13 +4,19 @@ import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.Date; import java.util.List; + +import com.ruoyi.aftersales.domain.AftersalesComplaintNoticeDetail; +import com.ruoyi.aftersales.domain.vo.AftersalesMaterialVO; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.ShiroUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.SysMakeOrder; +import com.ruoyi.system.domain.SysMakeorderBom; import com.ruoyi.system.mapper.SysMakeOrderMapper; +import com.ruoyi.system.mapper.SysMakeorderBomMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -34,7 +40,10 @@ public class AftersalesComplaintNoticeServiceImpl implements IAftersalesComplain private AftersalesComplaintNoticeMapper aftersalesComplaintNoticeMapper; @Autowired - SysMakeOrderMapper sysMakeOrderMapper; + private SysMakeOrderMapper sysMakeOrderMapper; + + @Autowired + private SysMakeorderBomMapper sysMakeorderBomMapper; /** * 查询售后客诉通知单 @@ -168,6 +177,34 @@ public class AftersalesComplaintNoticeServiceImpl implements IAftersalesComplain return sysMakeOrders; } + + /** + * 查找与生产单号有关的物料信息 + * */ + @Override + public List selectMaterialInfoByMakeNo(String makeNo) { + ArrayList aftersalesMaterialVOs = new ArrayList<>(); + List sysMakeorderBoms = sysMakeorderBomMapper.selectSysMakeorderBomByMakeNo(makeNo); + if (StringUtils.isEmpty(sysMakeorderBoms)){ + // 记录日志 + log.warn("未查找到与生产订单关联的物料相关数据, 生产订单号: {}", makeNo); + throw new RuntimeException("未查找到物料相关数据"); + } + for (SysMakeorderBom sysMakeorderBom : sysMakeorderBoms) { + AftersalesMaterialVO aftersalesMaterialVO = new AftersalesMaterialVO(); + aftersalesMaterialVO.setMaterialNo(sysMakeorderBom.getMaterialNo()); + aftersalesMaterialVO.setMaterialBrand(sysMakeorderBom.getBrand()); + aftersalesMaterialVO.setMaterialDescribe(sysMakeorderBom.getDescribe()); + aftersalesMaterialVO.setMaterialName(sysMakeorderBom.getMaterialName()); + aftersalesMaterialVO.setMaterialProcessMethod(sysMakeorderBom.getProcessMethod()); + aftersalesMaterialVO.setMaterialPhotourl(sysMakeorderBom.getPhotoUrl()); + aftersalesMaterialVO.setMaterialUnit(sysMakeorderBom.getUnit()); + aftersalesMaterialVO.setMaterialType(sysMakeorderBom.getMaterialType()); + aftersalesMaterialVOs.add(aftersalesMaterialVO); + } + return aftersalesMaterialVOs; + } + /** *客诉单号生成规则: *系统自动生成,按照特定编码,编码暂用【KS+年月日+001】, diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/SysMakeorderBomMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/SysMakeorderBomMapper.java index 4e2d5afd..ac177e24 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/SysMakeorderBomMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/SysMakeorderBomMapper.java @@ -74,4 +74,12 @@ public interface SysMakeorderBomMapper * @return 结果 */ public int restoreSysMakeorderBomById(Long id); + + /** + * 查询生产订单BOM信息 + * + * @param makeNo 生产订单号 + * @return 生产订单BOM信息 + */ + public List selectSysMakeorderBomByMakeNo(String makeNo); } diff --git a/ruoyi-admin/src/main/resources/mapper/aftersales/AftersalesComplaintNoticeDetailMapper.xml b/ruoyi-admin/src/main/resources/mapper/aftersales/AftersalesComplaintNoticeDetailMapper.xml new file mode 100644 index 00000000..b0b64ccc --- /dev/null +++ b/ruoyi-admin/src/main/resources/mapper/aftersales/AftersalesComplaintNoticeDetailMapper.xml @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select complaint_notice_detail_id, complaint_notice_code, make_no, user_id, delivery_goods_num, emergency_degree, complaint_problem, closing_procedures, adverse_report_url, customer_id, customer_name, device_model_code, device_model_name, sn_code, device_running_number, material_no, material_name, material_type, material_photoUrl, material_brand, material_unit, material_describe, material_process_method, shipped_goods_sum, material_sum, enterprise_sum, create_by, create_time, update_by, update_time, remark from aftersales_complaint_notice_detail + + + + + + + + insert into aftersales_complaint_notice_detail + + complaint_notice_code, + make_no, + user_id, + delivery_goods_num, + emergency_degree, + complaint_problem, + closing_procedures, + adverse_report_url, + customer_id, + customer_name, + device_model_code, + device_model_name, + sn_code, + device_running_number, + material_no, + material_name, + material_type, + material_photoUrl, + material_brand, + material_unit, + material_describe, + material_process_method, + shipped_goods_sum, + material_sum, + enterprise_sum, + create_by, + create_time, + update_by, + update_time, + remark, + + + #{complaintNoticeCode}, + #{makeNo}, + #{userId}, + #{deliveryGoodsNum}, + #{emergencyDegree}, + #{complaintProblem}, + #{closingProcedures}, + #{adverseReportUrl}, + #{customerId}, + #{customerName}, + #{deviceModelCode}, + #{deviceModelName}, + #{snCode}, + #{deviceRunningNumber}, + #{materialNo}, + #{materialName}, + #{materialType}, + #{materialPhotourl}, + #{materialBrand}, + #{materialUnit}, + #{materialDescribe}, + #{materialProcessMethod}, + #{shippedGoodsSum}, + #{materialSum}, + #{enterpriseSum}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{remark}, + + + + + update aftersales_complaint_notice_detail + + complaint_notice_code = #{complaintNoticeCode}, + make_no = #{makeNo}, + user_id = #{userId}, + delivery_goods_num = #{deliveryGoodsNum}, + emergency_degree = #{emergencyDegree}, + complaint_problem = #{complaintProblem}, + closing_procedures = #{closingProcedures}, + adverse_report_url = #{adverseReportUrl}, + customer_id = #{customerId}, + customer_name = #{customerName}, + device_model_code = #{deviceModelCode}, + device_model_name = #{deviceModelName}, + sn_code = #{snCode}, + device_running_number = #{deviceRunningNumber}, + material_no = #{materialNo}, + material_name = #{materialName}, + material_type = #{materialType}, + material_photoUrl = #{materialPhotourl}, + material_brand = #{materialBrand}, + material_unit = #{materialUnit}, + material_describe = #{materialDescribe}, + material_process_method = #{materialProcessMethod}, + shipped_goods_sum = #{shippedGoodsSum}, + material_sum = #{materialSum}, + enterprise_sum = #{enterpriseSum}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + remark = #{remark}, + + where complaint_notice_detail_id = #{complaintNoticeDetailId} + + + + delete from aftersales_complaint_notice_detail where complaint_notice_detail_id = #{complaintNoticeDetailId} + + + + delete from aftersales_complaint_notice_detail where complaint_notice_detail_id in + + #{complaintNoticeDetailId} + + + + + update aftersales_complaint_notice_detail set del_flag = '1' where complaint_notice_detail_id = #{complaintNoticeDetailId} + + + + update aftersales_complaint_notice_detail set del_flag = '0' where complaint_notice_detail_id = #{complaintNoticeDetailId} + + + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mapper/system/SysMakeorderBomMapper.xml b/ruoyi-admin/src/main/resources/mapper/system/SysMakeorderBomMapper.xml index f05ba06f..5437e251 100644 --- a/ruoyi-admin/src/main/resources/mapper/system/SysMakeorderBomMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/system/SysMakeorderBomMapper.xml @@ -61,7 +61,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where id = #{id} - + + + insert into sys_makeorder_bom diff --git a/ruoyi-admin/src/main/resources/templates/aftersales/complaintNotice/add.html b/ruoyi-admin/src/main/resources/templates/aftersales/complaintNotice/add.html index 519bd128..817955bf 100644 --- a/ruoyi-admin/src/main/resources/templates/aftersales/complaintNotice/add.html +++ b/ruoyi-admin/src/main/resources/templates/aftersales/complaintNotice/add.html @@ -44,38 +44,70 @@ - - - - - - - - - - - - - - - - - - +
+
+
+ 选择物料 + + 选择物料 + +
+
+
+
+
+
+
+
+ + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/aftersales/complaintNotice/materialSelect.html b/ruoyi-admin/src/main/resources/templates/aftersales/complaintNotice/materialSelect.html new file mode 100644 index 00000000..c7ec029c --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/aftersales/complaintNotice/materialSelect.html @@ -0,0 +1,82 @@ + + + + + + +
+
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/system/customerQuote/add.html b/ruoyi-admin/src/main/resources/templates/system/customerQuote/add.html index bd55cf66..31fae57d 100644 --- a/ruoyi-admin/src/main/resources/templates/system/customerQuote/add.html +++ b/ruoyi-admin/src/main/resources/templates/system/customerQuote/add.html @@ -485,8 +485,6 @@ field: 'id', values: id }) - var enterpriseSum = parseInt($("#enterpriseSum_add").val()); - $("#enterpriseSum_add").val((enterpriseSum==null?0:enterpriseSum) - 1); } $("input[name='pricingDate']").datetimepicker({ format: "yyyy-mm-dd",