Browse Source

[feat] 售后管理

按照万材要求,基础资料请购单新增导出功能,支持部分行和全部行导出,导出更多数据
新增导出所有和选择导出后端接口
新增 导出基础资料请购单明细方法
新增根据基础资料请购单集合方法
新增导出基础资料请购单明细
修复,请购单分页查询多余的异常抛出问题
dev
liuxiaoxu 3 days ago
parent
commit
d5470a1898
  1. 23
      ruoyi-admin/src/main/java/com/ruoyi/system/controller/BaseRequisitioningOrderController.java
  2. 118
      ruoyi-admin/src/main/java/com/ruoyi/system/domain/Vo/ExportBaseRequisitioningOrderVo.java
  3. 5
      ruoyi-admin/src/main/java/com/ruoyi/system/mapper/BaseRequisitioningOrderChildMapper.java
  4. 5
      ruoyi-admin/src/main/java/com/ruoyi/system/mapper/BaseRequisitioningOrderMapper.java
  5. 2
      ruoyi-admin/src/main/java/com/ruoyi/system/service/IBaseExpenseAccountService.java
  6. 18
      ruoyi-admin/src/main/java/com/ruoyi/system/service/IBaseRequisitioningOrderService.java
  7. 2
      ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/BaseExpenseAccountServiceImpl.java
  8. 78
      ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/BaseRequisitioningOrderServiceImpl.java
  9. 8
      ruoyi-admin/src/main/resources/mapper/system/BaseRequisitioningOrderChildMapper.xml
  10. 9
      ruoyi-admin/src/main/resources/mapper/system/BaseRequisitioningOrderMapper.xml
  11. 27
      ruoyi-admin/src/main/resources/templates/system/requisitioning/requisitioning.html

23
ruoyi-admin/src/main/java/com/ruoyi/system/controller/BaseRequisitioningOrderController.java

@ -20,8 +20,11 @@ import com.ruoyi.purchase.service.IPurchasePlanService;
import com.ruoyi.system.domain.*; import com.ruoyi.system.domain.*;
import com.ruoyi.system.domain.Vo.BaseExpenseAccountVo; import com.ruoyi.system.domain.Vo.BaseExpenseAccountVo;
import com.ruoyi.system.domain.Vo.BaseRequisitioningOrderVo; import com.ruoyi.system.domain.Vo.BaseRequisitioningOrderVo;
import com.ruoyi.system.domain.Vo.ExportBaseRequisitioningOrderVo;
import com.ruoyi.system.mapper.*; import com.ruoyi.system.mapper.*;
import com.ruoyi.system.service.*; import com.ruoyi.system.service.*;
import com.ruoyi.warehouse.domain.VO.ExportWarehouseStorageOrderVo;
import com.ruoyi.warehouse.domain.WarehouseStorageOrder;
import org.activiti.engine.RuntimeService; import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService; import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.runtime.ProcessInstance;
@ -31,6 +34,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.annotation.Log; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.enums.BusinessType;
@ -123,10 +127,21 @@ public class BaseRequisitioningOrderController extends BaseController
@Log(title = "请购单", businessType = BusinessType.EXPORT) @Log(title = "请购单", businessType = BusinessType.EXPORT)
@PostMapping("/export") @PostMapping("/export")
@ResponseBody @ResponseBody
public AjaxResult export(BaseRequisitioningOrderVo baseRequisitioningOrder) throws Exception { public AjaxResult export(BaseRequisitioningOrderVo baseRequisitioningOrder,String ids){
List<BaseRequisitioningOrderVo> list = baseRequisitioningOrderService.selectBaseRequisitioningOrderList(baseRequisitioningOrder);
ExcelUtil<BaseRequisitioningOrderVo> util = new ExcelUtil<BaseRequisitioningOrderVo>(BaseRequisitioningOrderVo.class); if (StringUtils.isEmpty(ids)){
return util.exportExcel(list, "请购单数据"); List<BaseRequisitioningOrderVo> list = baseRequisitioningOrderService.selectBaseRequisitioningOrderListByObject(baseRequisitioningOrder);
List<ExportBaseRequisitioningOrderVo> exportWarehouseStorageOrderVos = baseRequisitioningOrderService.exportRequisitioningOrderList(list);
ExcelUtil<ExportBaseRequisitioningOrderVo> util = new ExcelUtil<ExportBaseRequisitioningOrderVo>(ExportBaseRequisitioningOrderVo.class);
return util.exportExcel(exportWarehouseStorageOrderVos, "请购单数据");
}else {
String[] requisitioningCodes = ids.split(",");
List<BaseRequisitioningOrderVo> list = baseRequisitioningOrderService.selectBaseRequisitioningOrderListByCodes(requisitioningCodes);
List<ExportBaseRequisitioningOrderVo> exportWarehouseStorageOrderVos = baseRequisitioningOrderService.exportRequisitioningOrderList(list);
ExcelUtil<ExportBaseRequisitioningOrderVo> util = new ExcelUtil<ExportBaseRequisitioningOrderVo>(ExportBaseRequisitioningOrderVo.class);
return util.exportExcel(exportWarehouseStorageOrderVos, "请购单数据");
}
} }
/** /**
* 新增请购单 * 新增请购单

118
ruoyi-admin/src/main/java/com/ruoyi/system/domain/Vo/ExportBaseRequisitioningOrderVo.java

@ -0,0 +1,118 @@
package com.ruoyi.system.domain.Vo;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import java.math.BigDecimal;
/**
* 导出请购单吗明细
* */
@Data
public class ExportBaseRequisitioningOrderVo {
/** 请购单编号 */
@Excel(name = "请购单编号")
private String requisitioningCode;
/** 关联单号 */
@Excel(name = "关联单号")
private String correlationCode;
/** 请购状态 */
@Excel(name = "请购状态",dictType = "sys_requisitioning_status")
private String requisitioningStatus;
/** 请购部门 */
@Excel(name = "请购部门")
private String deptName;
/** 物料合计 */
@Excel(name = "物料合计")
private Integer materialAmount;
/** 数量总计 */
@Excel(name = "数量总计")
private Long materialSum;
/** 不含税总价(RMB) */
@Excel(name = "不含税总价(RMB)")
private BigDecimal noRmbSum;
/** 预估总价(RMB) */
@Excel(name = "预估总价(RMB)")
private BigDecimal rmbSum;
private BigDecimal estimatePrice;
/** 申请人 */
@Excel(name = "申请人")
private String applyUser;
/** 使用状态 */
@Excel(name = "使用状态",dictType = "useStatus")
private String useStatus;
/** 审核状态 */
@Excel(name = "审核状态",dictType = "auditStatus")
private String auditStatus;
/** 料号 */
@Excel(name = "料号")
private String materialCode;
/** 物料的名称 */
@Excel(name = "物料的名称")
private String materialName;
/** 物料的型号 */
@Excel(name = "物料的型号")
private String materialModel;
/** 加工方式*/
@Excel(name = "加工方式",dictType = "processMethod")
private String processMethod;
/** 物料的品牌 */
@Excel(name = "物料的品牌")
private String brand;
/** 物料的单位 */
@Excel(name = "物料的单位")
private String unit;
/** 物料的描述 */
@Excel(name = "物料的描述")
private String describe;
@Excel(name = "入库部门",dictType = "warehouseDept")
private String warehouseDept;
/** 物料的数量 */
@Excel(name = "物料的数量")
private Integer materialNum;
/** 物料的不含税单价(RMB) */
@Excel(name = "物料的不含税单价(RMB)")
private BigDecimal materialRmb;
/** 物料的含税单价(RMB) */
@Excel(name = "物料的含税单价(RMB)")
private BigDecimal materialNoRmb;
/** 物料的含税总价(RMB) */
@Excel(name = "物料的含税总价(RMB)")
private BigDecimal materialNoRmbSum;
/** 物料的不含税总价(RMB) */
@Excel(name = "物料的不含税总价(RMB)")
private BigDecimal materialRmbSum;
}

5
ruoyi-admin/src/main/java/com/ruoyi/system/mapper/BaseRequisitioningOrderChildMapper.java

@ -119,4 +119,9 @@ public interface BaseRequisitioningOrderChildMapper
* 检查请购单子表是否引用了物料 * 检查请购单子表是否引用了物料
* */ * */
int checkMaterialIsReferencedByRequisitioningOrderChild(String materialNo); int checkMaterialIsReferencedByRequisitioningOrderChild(String materialNo);
/**
* 根据请购单号批量查询请购单子表
* */
List<BaseRequisitioningOrderChild> selectBaseRequisitioningOrderChildByCodeList(List<String> collectRequisitioningCodes);
} }

5
ruoyi-admin/src/main/java/com/ruoyi/system/mapper/BaseRequisitioningOrderMapper.java

@ -119,4 +119,9 @@ public interface BaseRequisitioningOrderMapper
*/ */
List<BaseRequisitioningOrder> selectBaseRequisitioningOrderByIds(String[] ids); List<BaseRequisitioningOrder> selectBaseRequisitioningOrderByIds(String[] ids);
/**
* 根据编码批量查询请购单
* */
List<BaseRequisitioningOrderVo> selectBaseRequisitioningOrderListByCodes(String[] requisitioningCodes);
} }

2
ruoyi-admin/src/main/java/com/ruoyi/system/service/IBaseExpenseAccountService.java

@ -97,5 +97,5 @@ public interface IBaseExpenseAccountService
BaseExpenseAccount selectBaseExpenseAccountByCode(String expenseCode); BaseExpenseAccount selectBaseExpenseAccountByCode(String expenseCode);
// 获取当前登录名下可看用户列表 // 获取当前登录名下可看用户列表
Set<String> userLimitedList(Set<String> roleKeys, SysUser curUser) throws Exception; Set<String> userLimitedList(Set<String> roleKeys, SysUser curUser);
} }

18
ruoyi-admin/src/main/java/com/ruoyi/system/service/IBaseRequisitioningOrderService.java

@ -4,6 +4,7 @@ import java.util.List;
import com.ruoyi.system.domain.BaseRequisitioningOrder; import com.ruoyi.system.domain.BaseRequisitioningOrder;
import com.ruoyi.system.domain.SysSalesOrder; import com.ruoyi.system.domain.SysSalesOrder;
import com.ruoyi.system.domain.Vo.BaseRequisitioningOrderVo; import com.ruoyi.system.domain.Vo.BaseRequisitioningOrderVo;
import com.ruoyi.system.domain.Vo.ExportBaseRequisitioningOrderVo;
import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.runtime.ProcessInstance;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -30,7 +31,7 @@ public interface IBaseRequisitioningOrderService
* @return 请购单集合 * @return 请购单集合
*/ */
List<BaseRequisitioningOrderVo> selectBaseRequisitioningOrderList(BaseRequisitioningOrderVo baseRequisitioningOrderVo) throws Exception; List<BaseRequisitioningOrderVo> selectBaseRequisitioningOrderList(BaseRequisitioningOrderVo baseRequisitioningOrderVo);
/** /**
* 新增请购单 * 新增请购单
@ -107,4 +108,19 @@ public interface IBaseRequisitioningOrderService
* 请购单审核通过后生成采购计划 * 请购单审核通过后生成采购计划
* */ * */
void generatePurchasePlan(BaseRequisitioningOrder baseRequisitioningOrder); void generatePurchasePlan(BaseRequisitioningOrder baseRequisitioningOrder);
/**
* 导出请购单明细
* */
List<ExportBaseRequisitioningOrderVo> exportRequisitioningOrderList(List<BaseRequisitioningOrderVo> list);
/**
* 根据请购单号查询请购单明细
* */
List<BaseRequisitioningOrderVo> selectBaseRequisitioningOrderListByCodes(String[] requisitioningCodes);
/**
* 根据请购单对象查询请购单明细
* */
List<BaseRequisitioningOrderVo> selectBaseRequisitioningOrderListByObject(BaseRequisitioningOrderVo baseRequisitioningOrder);
} }

2
ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/BaseExpenseAccountServiceImpl.java

@ -532,7 +532,7 @@ public class BaseExpenseAccountServiceImpl implements IBaseExpenseAccountService
// 获取当前登录名下可看用户列表 // 获取当前登录名下可看用户列表
@Override @Override
public Set<String> userLimitedList(Set<String> roleKeys, SysUser curUser) throws Exception { public Set<String> userLimitedList(Set<String> roleKeys, SysUser curUser){
List<SysUser> sysUserlist = sysUserService.selectUserAll(); List<SysUser> sysUserlist = sysUserService.selectUserAll();

78
ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/BaseRequisitioningOrderServiceImpl.java

@ -3,6 +3,7 @@ package com.ruoyi.system.service.impl;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.github.pagehelper.Page; import com.github.pagehelper.Page;
@ -28,6 +29,7 @@ import com.ruoyi.purchase.service.IPurchasePlanService;
import com.ruoyi.system.domain.BaseRequisitioningOrderChild; import com.ruoyi.system.domain.BaseRequisitioningOrderChild;
import com.ruoyi.system.domain.Vo.BaseExpenseAccountVo; import com.ruoyi.system.domain.Vo.BaseExpenseAccountVo;
import com.ruoyi.system.domain.Vo.BaseRequisitioningOrderVo; import com.ruoyi.system.domain.Vo.BaseRequisitioningOrderVo;
import com.ruoyi.system.domain.Vo.ExportBaseRequisitioningOrderVo;
import com.ruoyi.system.mapper.BaseRequisitioningOrderChildMapper; import com.ruoyi.system.mapper.BaseRequisitioningOrderChildMapper;
import com.ruoyi.system.mapper.SysUserMapper; import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.service.*; import com.ruoyi.system.service.*;
@ -124,7 +126,7 @@ public class BaseRequisitioningOrderServiceImpl implements IBaseRequisitioningOr
* @return 请购单 * @return 请购单
*/ */
@Override @Override
public List<BaseRequisitioningOrderVo> selectBaseRequisitioningOrderList(BaseRequisitioningOrderVo baseRequisitioningOrderVo1) throws Exception { public List<BaseRequisitioningOrderVo> selectBaseRequisitioningOrderList(BaseRequisitioningOrderVo baseRequisitioningOrderVo1){
SysUser curUser = ShiroUtils.getSysUser(); SysUser curUser = ShiroUtils.getSysUser();
Long userId = curUser.getUserId(); Long userId = curUser.getUserId();
Set<String> roleKeys = roleService.selectRoleKeys(userId); Set<String> roleKeys = roleService.selectRoleKeys(userId);
@ -205,6 +207,12 @@ public class BaseRequisitioningOrderServiceImpl implements IBaseRequisitioningOr
return returnList; return returnList;
} }
@Override
public List<BaseRequisitioningOrderVo> selectBaseRequisitioningOrderListByObject(BaseRequisitioningOrderVo baseRequisitioningOrder) {
return baseRequisitioningOrderMapper.selectBaseRequisitioningOrderList(baseRequisitioningOrder);
}
/** /**
* 新增请购单 * 新增请购单
* *
@ -666,4 +674,72 @@ public class BaseRequisitioningOrderServiceImpl implements IBaseRequisitioningOr
} }
} }
@Override
public List<BaseRequisitioningOrderVo> selectBaseRequisitioningOrderListByCodes(String[] requisitioningCodes) {
return baseRequisitioningOrderMapper.selectBaseRequisitioningOrderListByCodes(requisitioningCodes);
}
/**
* 导出请购单明细
* */
@Override
public List<ExportBaseRequisitioningOrderVo> exportRequisitioningOrderList(List<BaseRequisitioningOrderVo> list) {
// 获取所有的请购单编号
List<String> collectRequisitioningCodes = list.stream()
.map(BaseRequisitioningOrderVo::getRequisitioningCode)
.collect(Collectors.toList());
// 根据请购单编号查询对应的物料详情列表
List<BaseRequisitioningOrderChild> baseRequisitioningOrderChildList = baseRequisitioningOrderChildMapper.selectBaseRequisitioningOrderChildByCodeList(collectRequisitioningCodes);
// 创建一个 BaseRequisitioningOrderVo 的 Map,键为请购单编号
Map<String, BaseRequisitioningOrderVo> baseRequisitioningOrderVoMap = list.stream()
.collect(Collectors.toMap(BaseRequisitioningOrderVo::getRequisitioningCode, Function.identity(), (existing, replacement) -> existing));
// 初始化导出列表
List<ExportBaseRequisitioningOrderVo> exportBaseRequisitioningOrderVos = new ArrayList<>();
for (BaseRequisitioningOrderChild child : baseRequisitioningOrderChildList) {
ExportBaseRequisitioningOrderVo exportVo = new ExportBaseRequisitioningOrderVo();
// 从 BaseRequisitioningOrderChild 填充数据
exportVo.setMaterialCode(child.getMaterialCode());
exportVo.setMaterialName(child.getMaterialName());
exportVo.setMaterialModel(child.getMaterialModel());
exportVo.setProcessMethod(child.getProcessMethod());
exportVo.setBrand(child.getBrand());
exportVo.setUnit(child.getUnit());
exportVo.setDescribe(child.getDescribe());
exportVo.setWarehouseDept(child.getWarehouseDept());
exportVo.setMaterialNum(child.getMaterialNum());
exportVo.setMaterialRmb(child.getMaterialRmb());
exportVo.setMaterialNoRmb(child.getMaterialNoRmb());
exportVo.setMaterialNoRmbSum(child.getMaterialNoRmbSum());
exportVo.setMaterialRmbSum(child.getMaterialRmbSum());
// 从 BaseRequisitioningOrderVo 填充数据,通过请购单编号进行关联
BaseRequisitioningOrderVo order = baseRequisitioningOrderVoMap.get(child.getRequisitioningCode());
if (order != null) {
exportVo.setRequisitioningCode(order.getRequisitioningCode());
exportVo.setCorrelationCode(order.getCorrelationCode());
exportVo.setRequisitioningStatus(order.getRequisitioningStatus());
exportVo.setDeptName(order.getDeptName());
exportVo.setMaterialAmount(order.getMaterialAmount());
exportVo.setMaterialSum(order.getMaterialSum());
exportVo.setNoRmbSum(order.getNoRmbSum());
exportVo.setRmbSum(order.getRmbSum());
exportVo.setEstimatePrice(order.getEstimatePrice());
exportVo.setApplyUser(order.getApplyUser());
exportVo.setUseStatus(order.getUseStatus());
exportVo.setAuditStatus(order.getAuditStatus());
}
// 添加到结果列表
exportBaseRequisitioningOrderVos.add(exportVo);
}
return exportBaseRequisitioningOrderVos;
}
} }

8
ruoyi-admin/src/main/resources/mapper/system/BaseRequisitioningOrderChildMapper.xml

@ -75,6 +75,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select count(1) from base_requisitioning_order_child where material_code = #{materialCode} select count(1) from base_requisitioning_order_child where material_code = #{materialCode}
</select> </select>
<select id="selectBaseRequisitioningOrderChildByCodeList" parameterType="String" resultMap="BaseRequisitioningOrderChildResult">
<include refid="selectBaseRequisitioningOrderChildVo"/>
where requisitioning_code in
<foreach collection="list" index="index" item="requisitioningCode" open="(" close=")" separator=",">
#{requisitioningCode}
</foreach>
</select>
<insert id="insertBaseRequisitioningOrderChild" parameterType="BaseRequisitioningOrderChild" useGeneratedKeys="true" keyProperty="requisitioningChildId"> <insert id="insertBaseRequisitioningOrderChild" parameterType="BaseRequisitioningOrderChild" useGeneratedKeys="true" keyProperty="requisitioningChildId">
insert into base_requisitioning_order_child insert into base_requisitioning_order_child

9
ruoyi-admin/src/main/resources/mapper/system/BaseRequisitioningOrderMapper.xml

@ -105,6 +105,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id} #{id}
</foreach> </foreach>
</select> </select>
<select id="selectBaseRequisitioningOrderListByCodes" parameterType="String" resultMap="BaseRequisitioningOrderResult">
<include refid="selectBaseRequisitioningOrderVo"/>
where requisitioning_code in
<foreach item="requisitioningCode" collection="array" open="(" separator="," close=")">
#{requisitioningCode}
</foreach>
</select>
<insert id="insertBaseRequisitioningOrder" parameterType="BaseRequisitioningOrder" useGeneratedKeys="true" keyProperty="requisitioningId"> <insert id="insertBaseRequisitioningOrder" parameterType="BaseRequisitioningOrder" useGeneratedKeys="true" keyProperty="requisitioningId">
insert into base_requisitioning_order insert into base_requisitioning_order
<trim prefix="(" suffix=")" suffixOverrides=","> <trim prefix="(" suffix=")" suffixOverrides=",">

27
ruoyi-admin/src/main/resources/templates/system/requisitioning/requisitioning.html

@ -66,6 +66,9 @@
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="system:requisitioning:add"> <a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="system:requisitioning:add">
<i class="fa fa-plus"></i> 添加 <i class="fa fa-plus"></i> 添加
</a> </a>
<a class="btn btn-success" onclick="exportExcel()" shiro:hasPermission="system:requisitioning:export">
<i class="fa fa-download"></i> 导出
</a>
</div> </div>
<div class="col-sm-12 select-table table-striped "> <div class="col-sm-12 select-table table-striped ">
<table id="bootstrap-table"></table> <table id="bootstrap-table"></table>
@ -257,6 +260,30 @@
}; };
$.table.init(options); $.table.init(options);
}); });
// 导出
function exportExcel() {
var ids = $.table.selectColumns("requisitioningCode");
var dataParam = $("#formId").serializeArray();
let tipMsg = "确定导出当前所有数据吗?";
if ($.common.isNotEmpty(ids)) {
tipMsg = `确定导出 ${ids} 数据吗?`;
dataParam.push({ "name": "ids", "value": ids });
}
$.modal.confirm(tipMsg, function () {
$.modal.loading("正在导出数据,请稍后...");
$.post( prefix + "/export", dataParam, function (result) {
if (result.code === web_status.SUCCESS) {
window.location.href = ctx + "common/download?fileName="+ encodeURI(result.msg) + "&delete=" + true;
} else {
$.modal.alertError(result.msg);
}
$.modal.closeLoading();
});
});
}
</script> </script>
</body> </body>
</html> </html>
Loading…
Cancel
Save