Browse Source

[fix]

委外加工 委外领料
修改添加、编辑、委外领料列表、经理、主管审批页面;
新增委外领料详情、驳回调整页面;
修改委外领料实体类、详情、vo类;
修改委外领料controller、service、mapper文件;
dev
王晓迪 4 days ago
parent
commit
d80d4d4048
  1. 22
      ruoyi-admin/src/main/java/com/ruoyi/system/controller/OutsourceRequisitionController.java
  2. 13
      ruoyi-admin/src/main/java/com/ruoyi/system/domain/OutsourceRequisition.java
  3. 199
      ruoyi-admin/src/main/java/com/ruoyi/system/domain/OutsourceRequisitionDetail.java
  4. 2
      ruoyi-admin/src/main/java/com/ruoyi/system/domain/Vo/OutsourceRequisitionVO.java
  5. 3
      ruoyi-admin/src/main/java/com/ruoyi/system/mapper/OutsourceRequisitionMapper.java
  6. 7
      ruoyi-admin/src/main/java/com/ruoyi/system/service/IOutsourceRequisitionService.java
  7. 117
      ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/OutsourceRequisitionServiceImpl.java
  8. 47
      ruoyi-admin/src/main/resources/mapper/system/OutsourceRequisitionMapper.xml
  9. 300
      ruoyi-admin/src/main/resources/templates/system/outsource_order/addRequisition.html
  10. 267
      ruoyi-admin/src/main/resources/templates/system/outsource_requisition/detail.html
  11. 461
      ruoyi-admin/src/main/resources/templates/system/outsource_requisition/edit.html
  12. 75
      ruoyi-admin/src/main/resources/templates/system/outsource_requisition/outsource_requisition.html
  13. 323
      ruoyi-admin/src/main/resources/templates/system/outsource_requisition/taskModifyApply.html
  14. 306
      ruoyi-admin/src/main/resources/templates/system/outsource_requisition/taskWwjlVerify.html
  15. 308
      ruoyi-admin/src/main/resources/templates/system/outsource_requisition/taskWwzgVerify.html

22
ruoyi-admin/src/main/java/com/ruoyi/system/controller/OutsourceRequisitionController.java

@ -175,6 +175,8 @@ public class OutsourceRequisitionController extends BaseController
if (processIsFinish) {
// 审核通过
outsourceRequisitionVO.setAuditStatus("1");
OutsourceRequisitionVO requisitionVO = outsourceRequisitionService.selectOutsourceRequisitionByOutsourceRequisitionId(outsourceRequisitionVO.getOutsourceRequisitionId());
outsourceRequisitionService.generateWarehouseOutOrder(requisitionVO);
// 提交
if("submit".equals(instanceType)){
// 使用状态-是
@ -191,10 +193,10 @@ public class OutsourceRequisitionController extends BaseController
// erpBomVo.setUseStatus("1");
}
}
outsourceRequisitionService.updateOutsourceRequisition(outsourceRequisitionVO);
outsourceRequisitionService.updateAuditRequisition(outsourceRequisitionVO);
// 驳回申请后继续申请,可能修改表单
if (saveEntityBoolean) {
outsourceRequisitionService.updateOutsourceRequisition(outsourceRequisitionVO);
outsourceRequisitionService.updateAuditRequisition(outsourceRequisitionVO);
}
return success("任务已完成");
}
@ -207,8 +209,6 @@ public class OutsourceRequisitionController extends BaseController
public String edit(@PathVariable("outsourceRequisitionId") Long outsourceRequisitionId, ModelMap mmap)
{
OutsourceRequisition outsourceRequisition = outsourceRequisitionService.selectOutsourceRequisitionByOutsourceRequisitionId(outsourceRequisitionId);
List<OutsourceOrderVO> outsourceOrderVO = outsourceOrderService.selectOutsourceOrderByOutsourceOrderNo(outsourceRequisition.getOutsourceOrderNo());
mmap.put("outsourceOrderList",outsourceOrderVO);
mmap.put("outsourceRequisition", outsourceRequisition);
return prefix + "/edit";
}
@ -220,7 +220,7 @@ public class OutsourceRequisitionController extends BaseController
@Log(title = "委外领料", businessType = BusinessType.UPDATE)
@PostMapping("/edit")
@ResponseBody
public AjaxResult editSave(OutsourceRequisitionVO outsourceRequisitionVO)
public AjaxResult editSave(@RequestBody OutsourceRequisitionVO outsourceRequisitionVO)
{
return toAjax(outsourceRequisitionService.updateOutsourceRequisition(outsourceRequisitionVO));
}
@ -236,4 +236,16 @@ public class OutsourceRequisitionController extends BaseController
{
return toAjax(outsourceRequisitionService.deleteOutsourceRequisitionByOutsourceRequisitionIds(ids));
}
/**
* 委外领料详情
*/
@RequiresPermissions("system:outsource_requisition:detail")
@GetMapping("/detail/{outsourceRequisitionId}")
public String detail(@PathVariable("outsourceRequisitionId") Long outsourceRequisitionId, ModelMap mmap)
{
OutsourceRequisition outsourceRequisition = outsourceRequisitionService.selectOutsourceRequisitionByOutsourceRequisitionId(outsourceRequisitionId);
mmap.put("outsourceRequisition", outsourceRequisition);
return prefix + "/detail";
}
}

13
ruoyi-admin/src/main/java/com/ruoyi/system/domain/OutsourceRequisition.java

@ -1,5 +1,6 @@
package com.ruoyi.system.domain;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang3.builder.ToStringBuilder;
@ -34,11 +35,11 @@ public class OutsourceRequisition extends BaseEntity
/** 物料合计 */
@Excel(name = "物料合计")
private Long materialAmount;
private int materialAmount;
/** 数量总计 */
@Excel(name = "数量总计")
private Long totalAmount;
private BigDecimal totalAmount;
/** 审核状态 */
@Excel(name = "审核状态")
@ -108,19 +109,19 @@ public class OutsourceRequisition extends BaseEntity
this.requisitionPerson = requisitionPerson;
}
public Long getMaterialAmount() {
public int getMaterialAmount() {
return materialAmount;
}
public void setMaterialAmount(Long materialAmount) {
public void setMaterialAmount(int materialAmount) {
this.materialAmount = materialAmount;
}
public Long getTotalAmount() {
public BigDecimal getTotalAmount() {
return totalAmount;
}
public void setTotalAmount(Long totalAmount) {
public void setTotalAmount(BigDecimal totalAmount) {
this.totalAmount = totalAmount;
}

199
ruoyi-admin/src/main/java/com/ruoyi/system/domain/OutsourceRequisitionDetail.java

@ -5,6 +5,8 @@ import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import java.math.BigDecimal;
/**
* 委外领料详情对象 outsource_requisition_detail
*
@ -22,17 +24,66 @@ public class OutsourceRequisitionDetail extends BaseEntity
@Excel(name = "委外领料编号")
private String outsourceRequisitionNo;
/** 委外订单编号 */
@Excel(name = "委外订单编号")
private String outsourceOrderNo;
/** 料号 */
@Excel(name = "料号")
private String materialNo;
/** 物料名称 */
private String materialName;
/** 物料类型 */
private String materialType;
/** 物料图片 */
private String materialPhotoUrl;
/** 单位 */
private String unit;
/** 描述 */
private String description;
/** 品牌 */
private String brand;
/** 加工方式 */
private String processMethod;
/** 计划委外数 */
private BigDecimal plannedOutsourceAmount;
// 实际委外数
private BigDecimal actualOutsourceAmount;
// 关联单号
private String correlationCodes;
// 委外工序信息
private String outsourceProcessInfo;
// 计价单位信息
private String chargeUnitInfo;
// 每个物料规格信息
private String singleMaterialInfo;
// 供应商信息
private String supplierInfo;
// 交付时间信息
private String deliveryTimeInfo;
/** 已委外领料数 */
@Excel(name = "已委外领料数")
private Long takenMaterial;
private BigDecimal takenMaterial;
/** 本次委外领料数 */
@Excel(name = "本次委外领料数")
private Long takingMaterial;
private BigDecimal takingMaterial;
public void setOutsourceRequisitionDetailId(Long outsourceRequisitionDetailId)
{
@ -61,25 +112,161 @@ public class OutsourceRequisitionDetail extends BaseEntity
{
return materialNo;
}
public void setTakenMaterial(Long takenMaterial)
public void setTakenMaterial(BigDecimal takenMaterial)
{
this.takenMaterial = takenMaterial;
}
public Long getTakenMaterial()
public BigDecimal getTakenMaterial()
{
return takenMaterial;
}
public void setTakingMaterial(Long takingMaterial)
public void setTakingMaterial(BigDecimal takingMaterial)
{
this.takingMaterial = takingMaterial;
}
public Long getTakingMaterial()
public BigDecimal getTakingMaterial()
{
return takingMaterial;
}
public String getOutsourceOrderNo() {
return outsourceOrderNo;
}
public void setOutsourceOrderNo(String outsourceOrderNo) {
this.outsourceOrderNo = outsourceOrderNo;
}
public String getMaterialName() {
return materialName;
}
public void setMaterialName(String materialName) {
this.materialName = materialName;
}
public String getMaterialType() {
return materialType;
}
public void setMaterialType(String materialType) {
this.materialType = materialType;
}
public String getMaterialPhotourl() {
return materialPhotoUrl;
}
public void setMaterialPhotourl(String materialPhotoUrl) {
this.materialPhotoUrl = materialPhotoUrl;
}
public String getUnit() {
return unit;
}
public void setUnit(String unit) {
this.unit = unit;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getProcessMethod() {
return processMethod;
}
public void setProcessMethod(String processMethod) {
this.processMethod = processMethod;
}
public BigDecimal getPlannedOutsourceAmount() {
return plannedOutsourceAmount;
}
public void setPlannedOutsourceAmount(BigDecimal plannedOutsourceAmount) {
this.plannedOutsourceAmount = plannedOutsourceAmount;
}
public BigDecimal getActualOutsourceAmount() {
return actualOutsourceAmount;
}
public void setActualOutsourceAmount(BigDecimal actualOutsourceAmount) {
this.actualOutsourceAmount = actualOutsourceAmount;
}
public String getOutsourceProcessInfo() {
return outsourceProcessInfo;
}
public void setOutsourceProcessInfo(String outsourceProcessInfo) {
this.outsourceProcessInfo = outsourceProcessInfo;
}
public String getChargeUnitInfo() {
return chargeUnitInfo;
}
public void setChargeUnitInfo(String chargeUnitInfo) {
this.chargeUnitInfo = chargeUnitInfo;
}
public String getSingleMaterialInfo() {
return singleMaterialInfo;
}
public void setSingleMaterialInfo(String singleMaterialInfo) {
this.singleMaterialInfo = singleMaterialInfo;
}
public String getSupplierInfo() {
return supplierInfo;
}
public void setSupplierInfo(String supplierInfo) {
this.supplierInfo = supplierInfo;
}
public String getDeliveryTimeInfo() {
return deliveryTimeInfo;
}
public void setDeliveryTimeInfo(String deliveryTimeInfo) {
this.deliveryTimeInfo = deliveryTimeInfo;
}
public String getMaterialPhotoUrl() {
return materialPhotoUrl;
}
public void setMaterialPhotoUrl(String materialPhotoUrl) {
this.materialPhotoUrl = materialPhotoUrl;
}
public String getCorrelationCodes() {
return correlationCodes;
}
public void setCorrelationCodes(String correlationCodes) {
this.correlationCodes = correlationCodes;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

2
ruoyi-admin/src/main/java/com/ruoyi/system/domain/Vo/OutsourceRequisitionVO.java

@ -14,6 +14,8 @@ public class OutsourceRequisitionVO extends OutsourceRequisition {
private String taskId;
/** 任务名称 */
private String taskName;
// 当前状态
private String taskStatus;
/** 办理时间 */
private Date doneTime;
/** 创建人 */

3
ruoyi-admin/src/main/java/com/ruoyi/system/mapper/OutsourceRequisitionMapper.java

@ -95,4 +95,7 @@ public interface OutsourceRequisitionMapper
* @return 结果
*/
public int deleteOutsourceRequisitionDetailByOutsourceRequisitionNo(String outsourceRequisitionNo);
// 根据领料单号/委外单号/料号组合查询领料详情列表
public List<OutsourceRequisitionDetail> selectRequisitionDetailByNo(OutsourceRequisitionDetail outsourceRequisitionDetail);
}

7
ruoyi-admin/src/main/java/com/ruoyi/system/service/IOutsourceRequisitionService.java

@ -4,6 +4,7 @@ import com.ruoyi.system.domain.OutsourceRequisition;
import com.ruoyi.system.domain.Vo.OutsourceQuoteVO;
import com.ruoyi.system.domain.Vo.OutsourceRequisitionVO;
import org.activiti.engine.runtime.ProcessInstance;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@ -48,6 +49,10 @@ public interface IOutsourceRequisitionService
*/
public int updateOutsourceRequisition(OutsourceRequisitionVO outsourceRequisitionVO);
// 更新审批后信息
@Transactional
int updateAuditRequisition(OutsourceRequisitionVO outsourceRequisitionVO);
/**
* 批量删除委外领料
*
@ -69,4 +74,6 @@ public interface IOutsourceRequisitionService
* */
ProcessInstance submitApply(OutsourceRequisitionVO outsourceRequisitionVO);
public int generateWarehouseOutOrder(OutsourceRequisitionVO outsourceRequisitionVO);
}

117
ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/OutsourceRequisitionServiceImpl.java

@ -7,17 +7,20 @@ import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.page.PageDomain;
import com.ruoyi.common.core.page.TableSupport;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.exception.BusinessException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.process.general.service.IProcessService;
import com.ruoyi.process.todoitem.mapper.BizTodoItemMapper;
import com.ruoyi.system.domain.OutsourceRequisition;
import com.ruoyi.system.domain.OutsourceRequisitionDetail;
import com.ruoyi.system.domain.Vo.OutsourceQuoteVO;
import com.ruoyi.system.domain.Vo.OutsourceRequisitionVO;
import com.ruoyi.system.mapper.OutsourceRequisitionMapper;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.service.IOutsourceRequisitionService;
import com.ruoyi.warehouse.domain.WarehouseOutOrder;
import com.ruoyi.warehouse.domain.WarehouseOutOrderDetail;
import com.ruoyi.warehouse.mapper.WarehouseOutOrderDetailMapper;
import com.ruoyi.warehouse.mapper.WarehouseOutOrderMapper;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.impl.persistence.entity.TaskEntityImpl;
@ -63,6 +66,12 @@ public class OutsourceRequisitionServiceImpl implements IOutsourceRequisitionSer
@Autowired
private IProcessService processService;
@Autowired
private WarehouseOutOrderMapper warehouseOutOrderMapper;
@Autowired
private WarehouseOutOrderDetailMapper outOrderDetailMapper;
/**
* 查询委外领料
*
@ -135,11 +144,12 @@ public class OutsourceRequisitionServiceImpl implements IOutsourceRequisitionSer
} else {
tempOutsourceRequisitionVO.setTaskName("未启动");
}
tempOutsourceRequisitionVO.setTaskStatus(tempOutsourceRequisitionVO.getTaskName());
if(tempOutsourceRequisitionVO.getAuditStatus()!=null){
if(tempOutsourceRequisitionVO.getAuditStatus().equals("1")){
tempOutsourceRequisitionVO.setTaskName("审核通过");
tempOutsourceRequisitionVO.setTaskStatus("审核通过");
}else if(tempOutsourceRequisitionVO.getAuditStatus().equals("2")){
tempOutsourceRequisitionVO.setTaskName("审核拒绝");
tempOutsourceRequisitionVO.setTaskStatus("审核拒绝");
}
}
returnList.add(tempOutsourceRequisitionVO);
@ -169,6 +179,9 @@ public class OutsourceRequisitionServiceImpl implements IOutsourceRequisitionSer
outsourceRequisitionVO.setRequisitionPerson(loginName);
outsourceRequisitionVO.setOutsourceRequisitionNo(outsourceRequisitionNo);
int rows = outsourceRequisitionMapper.insertOutsourceRequisition(outsourceRequisitionVO);
if(rows<=0){
throw new BusinessException("新增委外领料单数据失败");
}
insertOutsourceRequisitionDetail(outsourceRequisitionVO);
return rows;
}
@ -186,12 +199,44 @@ public class OutsourceRequisitionServiceImpl implements IOutsourceRequisitionSer
outsourceRequisitionVO.setUpdateTime(DateUtils.getNowDate());
String loginName = ShiroUtils.getLoginName();
outsourceRequisitionVO.setUpdateBy(loginName);
int rows = outsourceRequisitionMapper.updateOutsourceRequisition(outsourceRequisitionVO);
List<OutsourceRequisitionDetail> outsourceRequisitionDetailList = outsourceRequisitionVO.getOutsourceRequisitionDetailList();
String requisitionNo = outsourceRequisitionVO.getOutsourceRequisitionNo();
List<OutsourceRequisitionDetail> newRequisitionDetails = new ArrayList<>();
if (StringUtils.isNotNull(outsourceRequisitionDetailList)) {
for (OutsourceRequisitionDetail detail:outsourceRequisitionDetailList) {
if(detail.getTakingMaterial().intValue()!=0){
OutsourceRequisitionDetail temp = new OutsourceRequisitionDetail();
temp.setMaterialNo(detail.getMaterialNo());
temp.setOutsourceRequisitionNo(detail.getOutsourceRequisitionNo());
List<OutsourceRequisitionDetail> oldRequisitionDetails = outsourceRequisitionMapper.selectRequisitionDetailByNo(temp);
for (OutsourceRequisitionDetail oldDetail:oldRequisitionDetails) {
oldDetail.setTakingMaterial(detail.getTakingMaterial());
newRequisitionDetails.add(oldDetail);
}
}
}
}
if(StringUtils.isEmpty(newRequisitionDetails)){
throw new BusinessException("更新领料单详情数据失败");
}
outsourceRequisitionMapper.deleteOutsourceRequisitionDetailByOutsourceRequisitionNo(outsourceRequisitionVO.getOutsourceRequisitionNo());
insertOutsourceRequisitionDetail(outsourceRequisitionVO);
OutsourceRequisitionVO requisitionVO = new OutsourceRequisitionVO();
requisitionVO.setOutsourceRequisitionNo(requisitionNo);
requisitionVO.setOutsourceRequisitionDetailList(newRequisitionDetails);
insertOutsourceRequisitionDetail(requisitionVO);
int rows = outsourceRequisitionMapper.updateOutsourceRequisition(outsourceRequisitionVO);
return rows;
}
// 更新审批后信息
@Transactional
@Override
public int updateAuditRequisition(OutsourceRequisitionVO outsourceRequisitionVO){
outsourceRequisitionVO.setUpdateBy(ShiroUtils.getLoginName());
outsourceRequisitionVO.setUpdateTime(DateUtils.getNowDate());
int rows = outsourceRequisitionMapper.updateOutsourceRequisition(outsourceRequisitionVO);
return rows;
}
/**
* 批量删除委外领料
*
@ -229,7 +274,7 @@ public class OutsourceRequisitionServiceImpl implements IOutsourceRequisitionSer
// 保存
insertOutsourceRequisition(outsourceRequisitionVO);
// 启动流程
String applyTitle = user.getUserName()+"发起了委外报价提交审批-"+DateUtils.dateTimeNow();
String applyTitle = user.getUserName()+"发起了委外领料提交审批-"+DateUtils.dateTimeNow();
String instanceType = "submit";
ProcessInstance processInstance = startProcessInstance(applyTitle,instanceType,outsourceRequisitionVO, user);
String processInstanceId = processInstance.getProcessInstanceId();
@ -306,4 +351,62 @@ public class OutsourceRequisitionServiceImpl implements IOutsourceRequisitionSer
}
}
}
// 根据委外领料单生成出库单
public int generateWarehouseOutOrder(OutsourceRequisitionVO outsourceRequisitionVO){
WarehouseOutOrder warehouseOutOrder = new WarehouseOutOrder();
warehouseOutOrder.setOutOrderCode(redisCache.generateBillNo("CK"));
warehouseOutOrder.setWarehouseOutStatus("0");
warehouseOutOrder.setRelatedOrderCode(outsourceRequisitionVO.getOutsourceRequisitionNo());
warehouseOutOrder.setWarehouseOrderType("3");
warehouseOutOrder.setOutMakeCode(outsourceRequisitionVO.getOutsourceOrderNo());
warehouseOutOrder.setWarehouseOutType("3");
warehouseOutOrder.setBusinessName(outsourceRequisitionVO.getRequisitionPerson());
warehouseOutOrder.setMaterialSum(outsourceRequisitionVO.getMaterialAmount());
warehouseOutOrder.setEnterpriseSum(outsourceRequisitionVO.getTotalAmount().intValue());
warehouseOutOrder.setApplyName(outsourceRequisitionVO.getRequisitionPerson());
warehouseOutOrder.setCreateBy(ShiroUtils.getLoginName());
warehouseOutOrder.setCreateTime(DateUtils.getNowDate());
List<OutsourceRequisitionDetail> requisitionDetails = outsourceRequisitionVO.getOutsourceRequisitionDetailList();
if(StringUtils.isEmpty(requisitionDetails)){
throw new BusinessException("委外领料单详情为空!");
}else{
for (OutsourceRequisitionDetail detail:requisitionDetails) {
WarehouseOutOrderDetail warehouseOutOrderDetail = generateWarehouseOutOrderDetail(detail);
warehouseOutOrderDetail.setOutOrderCode(warehouseOutOrder.getOutOrderCode());
warehouseOutOrderDetail.setApplyName(warehouseOutOrder.getApplyName());
outOrderDetailMapper.insertWarehouseOutOrderDetail(warehouseOutOrderDetail);
}
}
int insertResult = warehouseOutOrderMapper.insertWarehouseOutOrder(warehouseOutOrder);
if(insertResult<=0){
throw new BusinessException("新增委外领料出库单数据失败");
}
return 0;
}
// 根据委外领料单详情生成出库单详情
public WarehouseOutOrderDetail generateWarehouseOutOrderDetail(OutsourceRequisitionDetail requisitionDetail){
WarehouseOutOrderDetail warehouseOutOrderDetail = new WarehouseOutOrderDetail();
warehouseOutOrderDetail.setWarehouseOutStatus("0");
warehouseOutOrderDetail.setRelatedOrderCode(requisitionDetail.getOutsourceRequisitionNo());
warehouseOutOrderDetail.setOutMakeCode(requisitionDetail.getOutsourceOrderNo());
warehouseOutOrderDetail.setWarehouseOrderType("3");
warehouseOutOrderDetail.setWarehouseOutType("3");
warehouseOutOrderDetail.setMaterialNo(requisitionDetail.getMaterialNo());
warehouseOutOrderDetail.setMaterialName(requisitionDetail.getMaterialName());
warehouseOutOrderDetail.setMaterialPhotourl(requisitionDetail.getMaterialPhotourl());
warehouseOutOrderDetail.setMaterialType(requisitionDetail.getMaterialType());
warehouseOutOrderDetail.setMaterialBrand(requisitionDetail.getBrand());
warehouseOutOrderDetail.setMaterialUnit(requisitionDetail.getUnit());
warehouseOutOrderDetail.setMaterialDescribe(requisitionDetail.getDescription());
warehouseOutOrderDetail.setMaterialProcessMethod(requisitionDetail.getProcessMethod());
warehouseOutOrderDetail.setMaterialSum(1);
warehouseOutOrderDetail.setEnterpriseSum(requisitionDetail.getTakingMaterial().intValue());
warehouseOutOrderDetail.setOutOrderSum(0);
warehouseOutOrderDetail.setHasOutOrderSum(0);
warehouseOutOrderDetail.setApplyOutOrderSum(requisitionDetail.getTakingMaterial().intValue());
warehouseOutOrderDetail.setCreateBy(ShiroUtils.getLoginName());
warehouseOutOrderDetail.setCreateTime(DateUtils.getNowDate());
return warehouseOutOrderDetail;
}
}

47
ruoyi-admin/src/main/resources/mapper/system/OutsourceRequisitionMapper.xml

@ -36,7 +36,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<resultMap type="OutsourceRequisitionDetail" id="OutsourceRequisitionDetailResult">
<result property="outsourceRequisitionDetailId" column="outsource_requisition_detail_id" />
<result property="outsourceRequisitionNo" column="outsource_requisition_no" />
<result property="outsourceOrderNo" column="outsource_order_no" />
<result property="materialNo" column="material_no" />
<result property="materialName" column="material_name" />
<result property="materialType" column="material_type" />
<result property="materialPhotoUrl" column="material_photo_url" />
<result property="description" column="description" />
<result property="brand" column="brand" />
<result property="unit" column="unit" />
<result property="processMethod" column="process_method" />
<result property="plannedOutsourceAmount" column="planned_outsource_amount" />
<result property="actualOutsourceAmount" column="actual_outsource_amount" />
<result property="correlationCodes" column="correlation_codes" />
<result property="outsourceProcessInfo" column="outsource_process_info" />
<result property="chargeUnitInfo" column="charge_unit_info" />
<result property="singleMaterialInfo" column="single_material_info" />
<result property="supplierInfo" column="supplier_info" />
<result property="deliveryTimeInfo" column="delivery_time_info" />
<result property="takenMaterial" column="taken_material" />
<result property="takingMaterial" column="taking_material" />
</resultMap>
@ -45,6 +61,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select outsource_requisition_id, outsource_requisition_no, outsource_order_no, requisition_person, create_by, create_time, update_by, update_time, material_amount, total_amount, audit_status,requisition_status,instance_id, instance_type, submit_instance_id, apply_title, apply_time, apply_user, cancel_instance_id, restore_instance_id from outsource_requisition
</sql>
<sql id="selectOutsourceRequisitionDetail">
select outsource_requisition_detail_id, outsource_requisition_no, outsource_order_no, material_no, material_name, material_type,
material_photo_url, description, brand, unit, process_method, planned_outsource_amount, actual_outsource_amount,
outsource_process_info, charge_unit_info, single_material_info, supplier_info, delivery_time_info,
taken_material, taking_material, correlation_codes
from outsource_requisition_detail
</sql>
<select id="selectOutsourceRequisitionList" parameterType="OutsourceRequisitionVO" resultMap="OutsourceRequisitionResult">
<include refid="selectOutsourceRequisitionVo"/>
<where>
@ -61,9 +85,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="selectOutsourceRequisitionDetailList" parameterType="String" resultMap="OutsourceRequisitionDetailResult">
select outsource_requisition_detail_id, outsource_requisition_no, material_no, taken_material, taking_material
from outsource_requisition_detail
where outsource_requisition_no = #{outsource_requisition_no}
<include refid="selectOutsourceRequisitionDetail"/>
where outsource_requisition_no = #{outsourceRequisitionNo}
</select>
<insert id="insertOutsourceRequisition" parameterType="OutsourceRequisitionVO" useGeneratedKeys="true" keyProperty="outsourceRequisitionId">
@ -161,10 +184,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</delete>
<insert id="batchOutsourceRequisitionDetail">
insert into outsource_requisition_detail( outsource_requisition_detail_id, outsource_requisition_no, material_no, taken_material, taking_material) values
insert into outsource_requisition_detail( outsource_requisition_detail_id, outsource_requisition_no,outsource_order_no, material_no,material_name, material_type,
material_photo_url, description, brand, unit, process_method, planned_outsource_amount, actual_outsource_amount,correlation_codes,
outsource_process_info, charge_unit_info, single_material_info, supplier_info, delivery_time_info, taken_material, taking_material) values
<foreach item="item" index="index" collection="list" separator=",">
( #{item.outsourceRequisitionDetailId}, #{item.outsourceRequisitionNo}, #{item.materialNo}, #{item.takenMaterial}, #{item.takingMaterial})
( #{item.outsourceRequisitionDetailId}, #{item.outsourceRequisitionNo}, #{item.outsourceOrderNo}, #{item.materialNo}, #{item.materialName}, #{item.materialType},
#{item.materialPhotoUrl}, #{item.description}, #{item.brand}, #{item.unit}, #{item.processMethod}, #{item.plannedOutsourceAmount}, #{item.actualOutsourceAmount}, #{item.correlationCodes},
#{item.outsourceProcessInfo}, #{item.chargeUnitInfo}, #{item.singleMaterialInfo}, #{item.supplierInfo}, #{item.deliveryTimeInfo},
#{item.takenMaterial}, #{item.takingMaterial})
</foreach>
</insert>
<select id="selectRequisitionDetailByNo" parameterType="OutsourceRequisitionDetail" resultMap="OutsourceRequisitionDetailResult">
<include refid="selectOutsourceRequisitionDetail"/>
<where>
<if test="outsourceRequisitionNo != null and outsourceRequisitionNo != ''"> and outsource_requisition_no = #{outsourceRequisitionNo}</if>
<if test="outsourceOrderNo != null and outsourceOrderNo != ''"> and outsource_order_no = #{outsourceOrderNo}</if>
<if test="materialNo != null and materialNo != ''"> and material_no = #{materialNo}</if>
</where>
</select>
</mapper>

300
ruoyi-admin/src/main/resources/templates/system/outsource_order/addRequisition.html

@ -6,10 +6,44 @@
<th:block th:include="include :: datetimepicker-css" />
<th:block th:include="include :: bootstrap-editable-css" />
</head>
<style>
.col-sm-12.material-table{
height: 75px;
}
.hr-line-dashed {
border-top: 1px dashed #ddd;
margin-top: 20px; /* 调整间距 */
border-bottom: 1px dashed #ddd;
margin-bottom: 20px;
}
.is-required {
position: relative;
padding-left: 5px; /* 为星号留出空间 */
}
.is-required::before {
content: '*';
font-weight: bold;
color: red;
position: absolute;
left: 0;
top: 0;
}
</style>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-order-outsourceRequisition-add" >
<div class="col-xs-11" >
<label class="col-sm-2 control-label" style="margin-left: 10px;">已选择委外计划:</label>
<div class="col-sm-8">
<input id="outsourcePlanCode" name="outsourcePlanCode" class="form-control" type="text" readonly>
</div>
</div>
<div class="col-xs-11" style="margin-left: 60px;height: 20px;">
<div class="hr-line-dashed" >
</div>
</div>
<div class="container" id="material">
</div>
@ -17,20 +51,20 @@
<!-- 订单合计-->
<div class="container">
<div class="row"><h4 class="card-header">订单合计:</h4></div>
<div class="form-group">
<label for="materialAmount" class="col-sm-2 col-form-label">物料合计:</label>
<div class="col-sm-4">
<input type="text" class="form-control" value="0" id="materialAmount">
<div class="col-xs-12">
<div class="col-sm-6">
<label for="materialAmount" class="col-sm-4 col-form-label">物料合计:</label>
<div class="col-sm-6">
<input type="text" class="form-control" value="0" id="materialAmount" disabled>
</div>
</div>
</div>
<div class="form-group">
<label for="outsourceMaterialAmount" class="col-sm-2 col-form-label">委外数量合计:</label>
<div class="col-sm-4">
<input type="text" class="form-control" value="0" id="outsourceMaterialAmount">
<div class="col-sm-6">
<label for="outsourceMaterialAmount" class="col-sm-4 col-form-label">领料数量合计:</label>
<div class="col-sm-6">
<input type="text" class="form-control" value="0" id="outsourceMaterialAmount" disabled>
</div>
</div>
</div>
</div>
</div>
</div>
<th:block th:include="include :: footer" />
@ -40,6 +74,7 @@
<script th:inline="javascript">
var prefix = ctx + "system/outsource_requisition";
$("#form-order-outsourceRequisition-add").validate({focusCleanup: true});
var processMethodDatas = [[${@dict.getType('processMethod')}]];
var outsourcePlanDetailList = [];
// var chargeUnitDatas = [[${@dict.getType("charge_unit")}]]
// var formId = "form-plan-outsourceOrder-add";
@ -60,18 +95,16 @@
// console.log(outsourceOrderList);
originMaterial = outsourceOrderList[0].materials;
// console.log(originMaterial);
$("input[name='outsourcePlanCode']").val(outsourceOrderList[0].outsourcePlanCode);
// 根据料号去重
materials = mergeRecords(originMaterial);
// console.log(materials);
console.log(materials);
// 遍历委外计划详情信息
materials.forEach(function (material, index) {
var tableId = 'materialNo-' + (index+1);
// console.log("料号:"+index);
// console.log(tableId);
var materialTable = "bootstrap-table_" + tableId;
tableIdList.push(materialTable);
tableIdList.push(tableId);
// 创建物料信息的容器
var $tableWrapper = $('<div id="material-' + tableId + '"></div>');
// 将整个物料信息容器添加到页面
@ -79,18 +112,21 @@
// 添加关联销售订单号信息
var $headerDiv =
$('<div class="row">' +
// '<div class="hr-line-dashed">' +
// '</div>'+
'<div class="row">' +
'<div class="col-xs-12" >' +
'<h3>' +
'<span><strong>物料 ' + (index+1) + ': </strong> ' + '<strong>关联订单号: </strong></span>' + '<span class="correlationCodes" style="color: blue" id="correlationCodes-' + tableId + '"></span>' +
'</h3>' +
'<div class="col-sm-12">' +
'<div class="col-sm-12 material-table">' +
'<table class="table-materialNo" id="' + materialTable + '">' + '</table>' +
'</div>' +
'</div>' +
'</div>');
$tableWrapper.append($headerDiv);
$(".correlationCodes").text(outsourceOrderList[0].outsourceOrderNo);
$(".correlationCodes").text(material.orderDetails[0].correlationCodes);
$("#materialAmount").val(materials.length);
// console.log(outsourceOrderList[0].outsourceOrderNo);
@ -113,18 +149,16 @@
tables(materialTable, materialData);
var $MaterialNumDiv =
$('<div class="row">' +
'<div class="form-group">' +
$('<div class="row" style="margin-top: 20px;margin-left: 10px;">' +
'<div class="col-xs-12">' +
'<h3>' +
'<span><strong>供应商</strong></span>' +
'</h3>' +
'</div>' +
'</div>' +
'</div>');
$tableWrapper.append($MaterialNumDiv);
var $processInfo = $('<div class="process-card" style="height: 60px;" id="processInfo-' + tableId + '"></div>');
var $processInfo = $('<div class="process-card" style="height: 60px;margin-top: 10px;" id="processInfo-' + tableId + '"></div>');
if(material.orderDetails.length <= 0){
var $noProcessDiv = $('<div class="no-process">暂无委外工序信息,请先添加委外工序信息。</div>');
@ -137,32 +171,34 @@
switch (detail.chargeUnit) {
case "0":
detail.unitInfo = "按重量计";
detail.singleMaterialInfo = detail.singleMaterial + "kg";
break;
case "1":
detail.unitInfo = "按数量计";
detail.singleMaterialInfo = detail.singleMaterial + "个";
break;
case "2":
detail.unitInfo = "按面积计";
detail.singleMaterialInfo = detail.singleMaterial + "平方英寸";
break;
default:;
}
// console.log(detail);
// console.log(processSelectId);
// console.log(process);
$processContent =
$('<div class="card-header process_card" id="process-' + tableId + '_' + (detailsIndex+1) + '">' +
'<div class="row">' +
$('<div class="card-header process_card" id="process-' + tableId + '_' + (detailsIndex+1) + '" >' +
'<div class="row" style="margin-left: 25px;height: 20px">' +
'<div class="card-text">' +
'<h5>委外工序 ' + (detailsIndex+1) + ':' +
'<span class="processNo">' + detail.outsourceProcessNo + '</span>' + '-' +
'<span class="processName">' + detail.outsourceProcessName + '</span>' +
'<span style="color: blue" class="processNo">' + detail.outsourceProcessNo + '</span>' + '-' +
'<span style="color: blue" class="processName">' + detail.outsourceProcessName + '</span>' +
'</h5>' +
'</div>' +
'<div class="col-sm-2" id="chargeUnit-'+processSelectId+'">' +
'<span class="chargeUnit">*计价单位:</span>' + '-' +
'<span class="">' + detail.unitInfo + '</span>' +
'<span class="singleMaterial">每个物料:</span>' +
'<span class="singleMaterialInfo">' + detail.singleMaterial + '</span>' +
'<div class="col-xs-12" style="padding-left: 0px;">' +
'<div class="col-sm-12" style="padding-left: 0px;" id="chargeUnit-'+processSelectId+'">' +
'<span class="chargeUnit" style="padding-right: 10px;">*计价单位:</span>' +
'<span class="chargeUnitInfo" style="padding-right: 80px;">' + detail.unitInfo + '</span>' +
'<span class="singleMaterial" style="padding-right: 10px;">每个物料:</span>' +
'<span class="singleMaterialInfo">' + detail.singleMaterialInfo + '</span>' +
'</div>' +
'</div>' +
'</div>' +
'</div>');
@ -170,30 +206,37 @@
$tableWrapper.append($processContent);
$supplierheaderContent =
$('<div class="card-header suppplier_card" id = "supplier-' + processTableId + '_' + ' ">' +
'<div class="row">' +
'<div class="card-text">' +
'<input type="radio" id="supplier-' + processTableId + '_' + '" name="supplier-' + processTableId + '" value="">' +
'<span class="supplierCode">' + detail.supplierCode + '</span>' + '-' +
'<div class="col-xs-12">' +
'<div class="col-sm-4" style="margin-top: 13px;padding-left: 10px;">' +
'<input type="radio" id="supplier-' + processTableId + '" name="supplier-' + processTableId + '" value="" checked>' +
'<span class="supplierCode">' + detail.supplierCode + '</span>' + '--' +
'<span class="supplierName">' + detail.supplierName + '</span>' +
'-最新不含税采购价: ' + '<span id="materialNormb-' + processTableId + '" class="materialNormb">' + detail.materialNoRmb + '</span>' +
' RMB 最新含税采购价: ' + '<span id="materialRmb-' + processTableId + '" class="materialRmb">' + detail.materialRmb + '</span> RMB ' +
// '<span class="supplierPurchasePlanCode" hidden="hidden" >' + material.planCodes + '</span>' +
// '<span class="supplierCorrelationCode" hidden="hidden" >' + material.correlationCodes + '</span>' +
// '<span class="supplierPurchaseQuoteCode" hidden="hidden" >' + supplier.purchaseQuoteCode + '</span>' +
'<div class="form-row deliveryTime-'+processTableId+'" >' +
'<label class="col-sm-2">计划交付时间: </label>' +
// '--最新不含税采购价: ' + '<span id="materialNormb-' + processTableId + '" class="materialNormb">' + detail.materialNoRmb + '</span>' +
// ' RMB --最新含税采购价: ' + '<span id="materialRmb-' + processTableId + '" class="materialRmb">' + detail.materialRmb + '</span> RMB ' +
'</div>' +
'<div class="col-sm-8 deliveryTime-'+processTableId+'" style="padding-top: 10px;padding-left: 0px;">' +
'<label class="col-sm-2" style="padding-left: 0px;margin-top: 5px;">计划交付时间: </label>' +
'<div class ="col-sm-4">' +
'<div class="input-group date"> ' +
'<input type="text" name="deliveryTime" value="' + detail.deliveryTime + '" class="form-control supplierDeliveryTime" id="deliveryTime_' + processTableId + '">' +
'<input type="text" disabled name="deliveryTime" value="' + detail.deliveryTime + '" class="form-control supplierDeliveryTime" id="deliveryTime_' + processTableId + '">' +
'<span class="input-group-addon"><i class="fa fa-calendar"></i></span>' +
'<hr style="border: none; height: 1px; background-color: #ccc;">' +
'</div>' +
'</div>' +
'</div>'+
'</div>' +
'</div>'+
'<div class="row">' +
'<div class="hr-line-dashed" style="margin-bottom: 0px;margin-top: 80px;">' +
'</div>' +
'</div>');
$("#"+processTableId).append($supplierheaderContent);
$("input[name='deliveryTime']").datetimepicker({
format: "yyyy-mm-dd",
minView: "month",
todayBtn: true,
autoClose: true
});
});
}
// tableSetup($processInfo, tableId);
@ -210,7 +253,6 @@
showToggle: false,
data: data,
columns: [
{checkbox: false},
{title: '料号', field: 'materialNo'},
{title: '图片', field: 'materialPhotourl', formatter: function (value, row, index) {
return $.table.imageView(value);
@ -220,11 +262,17 @@
{title: '物料描述', field: 'description'},
{title: '品牌', field: 'brand'},
{title: '单位', field: 'unit', align: 'center', },
{title: '加工方式', field: 'processMethod', align: 'center',},
{title: '加工方式', field: 'processMethod', align: 'center',
formatter: function (value, row, index) {
return $.table.selectDictLabel(processMethodDatas, value);
}
},
{title: '计划委外数', field: 'plannedOutsourceAmount'},
{title: '实际委外数', field: 'actualOutsourceAmount'},
{title: '已委外领料数', field: 'alreadyOutsourceAmount'},
{title: '本次领料数', field: 'nowRequisitionAmount',
{title: '已委外领料数', field: 'alreadyRequisitionAmount'},
{
title: '<span class="is-required">本次领料数</span>',
field: 'nowRequisitionAmount',
formatter: function(value, row, index) {
var html = $.common.sprintf("<input class='form-control' type='number' name='nowRequisitionAmount' id = 'nowRequisitionAmount_"+tableId+"'>", index, value);
return html;
@ -232,7 +280,22 @@
},
],
});
}
$('input[name="nowRequisitionAmount"]').on('input', function() {
calculateTotal();
});
};
// 计算总领料数
function calculateTotal() {
var inputs = $('input[name="nowRequisitionAmount"]');
var total = 0;
inputs.each(function() {
var value = parseFloat($(this).val()) || 0; // 将输入框的值转换为数字,默认为0
total += value;
});
// console.log("总领料数:" + total);
$("#outsourceMaterialAmount").val(total);
};
// 函数用于合并重复的material的记录
function mergeRecords(items) {
return items.reduce((merged, current) => {
@ -243,7 +306,7 @@
if (!existingRecord.orderDetails) {
existingRecord.orderDetails = [];
}
existingRecord.orderDetails = current.orderDetails;
existingRecord.orderDetails.push(current.orderDetails[0]);
} else {
// console.log(current);
// 如果是第一次遇到这个materialNo,创建一个新的记录
@ -258,73 +321,96 @@
processMethod: current.processMethod,
// correlationCodes: current.correlationCodes,
plannedOutsourceAmount: current.plannedOutsourceAmount,
orderDetails: current.orderDetails
orderDetails: [
current.orderDetails[0],
]
});
}
return merged;
}, []);
};
// 保存信息 刷新表格
function saveJson(url, data, callback) {
var config = {
url: url,
type: "post",
dataType: "json",
contentType: "application/json;charset=utf-8",
data: data,
beforeSend: function () {
$.modal.loading("正在处理中,请稍后...");
$.modal.disable();
},
success: function(result) {
if (typeof callback == "function") {
callback(result);
}
$.operate.successCallback(result);
}
};
$.ajax(config)
};
function submitHandler() {
var materialAmount = 0;
var outsourceRequisition = {
outsourceOrderNo: outsourceOrderList[0].outsourceOrderNo,
materialAmount: materials.length,
materialAmount: 0,
totalAmount: 0,
outsourceRequisitionDetailList:[]
};
if ($.validate.form()) {
let requisitionSum = 0;
var requisitionDetail;
$('.table-materialNo').each(function(index, tableElement) {
var tableId = tableIdList[index];
let materialObj = materialList[index];
if (typeof materialObj === 'undefined') return;
var rows = $("#" + tableId).bootstrapTable('getData').length;
for(var i = 0;i < rows;i++){
var data = $("#" + tableId).bootstrapTable('getData')[i];
// console.log(data.nowRequisitionAmount);
// console.log($('[id^="nowRequisitionAmount_' + tableId + '"]').val());
let value = Number($('[id^="nowRequisitionAmount_' + tableId + '"]').val());
let requisitionSum = 0;
var hasError = false;
var hasValue = false;
$('.table-materialNo').each(function(index, tableElement) {
var tableId = tableIdList[index];
let materialObj = materialList[index];
if (typeof materialObj === 'undefined') return;
var rows = $("#" + "bootstrap-table_" + tableId).bootstrapTable('getData').length;
if(rows != 0) {
var data = $("#" + "bootstrap-table_" + tableId).bootstrapTable('getData')[0];
var amountId = "nowRequisitionAmount_bootstrap-table_" + tableId;
if($('[id^="' + amountId + '"]').val() === ""){
return;
}else{
hasValue = true;
materialAmount++;
let value = Number($('[id^="' + amountId + '"]').val());
if (!isNaN(value)) {
var hasReValue = Number(data.alreadyRequisitionAmount);
if(hasReValue + value>data.actualOutsourceAmount){
hasError = true;
}
requisitionSum += value;
}
requisitionDetail = {
materialNo: data.materialNo,
// takenMaterial: (data.alreadyOutsourceAmount==='undefined'?0:data.alreadyOutsourceAmount),
takenMaterial:0,
takingMaterial: $('[id^="nowRequisitionAmount_' + tableId + '"]').val(),
};
var correlationCodes = $("#correlationCodes-" + tableId).text().trim();
$('#' + 'material-' + tableId).find('.process_card').each(function(processIndex, processCard) {
// console.log("1111");
var processNo = $(processCard).find('.processNo').text().trim();
var processName = $(processCard).find('.processName').text().trim();
var chargeUnitInfo = $(processCard).find('.chargeUnitInfo').text().trim();
var singleMaterialInfo = $(processCard).find('.singleMaterialInfo').text().trim();
var supplierCode = $(processCard).find('.supplierCode').text().trim();
var supplierName = $(processCard).find('.supplierName').text().trim();
var processInfo = processNo + '-' + processName;
var supplierInfo = supplierCode + '--' + supplierName;
var deliveryTimeInfo = $(processCard).find("input[name='deliveryTime']").val();
var requisitionDetail = {
materialNo: data.materialNo,
materialPhotourl: data.materialPhotourl,
materialName: data.materialName,
description: data.description,
brand: data.brand,
unit: data.unit,
processMethod: data.processMethod,
plannedOutsourceAmount: data.plannedOutsourceAmount,
actualOutsourceAmount: data.actualOutsourceAmount,
outsourceOrderNo: outsourceRequisition.outsourceOrderNo,
takenMaterial:data.alreadyRequisitionAmount,
takingMaterial: value,
outsourceProcessInfo: processInfo,
chargeUnitInfo: chargeUnitInfo,
singleMaterialInfo: singleMaterialInfo,
supplierInfo: supplierInfo,
deliveryTimeInfo: deliveryTimeInfo,
correlationCodes: correlationCodes,
};
outsourceRequisition.outsourceRequisitionDetailList.push(requisitionDetail);
});
}
outsourceRequisition.totalAmount += requisitionSum;
outsourceRequisition.outsourceRequisitionDetailList.push(requisitionDetail);
console.log(outsourceRequisition)
});
};
// 发送数据到后端API
saveJson(prefix + "/addRequisition",JSON.stringify(outsourceRequisition));
}
outsourceRequisition.materialAmount = materialAmount;
});
if(!hasValue){
$.modal.msgError("领料数不能全为空!");
return;
}
if(!hasError){
console.log(outsourceRequisition);
outsourceRequisition.totalAmount += requisitionSum;
$.operate.saveJson(prefix + "/addRequisition",JSON.stringify(outsourceRequisition));
}else{
$.modal.msgError("累计领料数不能大于实际委外数!");
return;
}
}
</script>
</body>

267
ruoyi-admin/src/main/resources/templates/system/outsource_requisition/detail.html

@ -0,0 +1,267 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('委外领料单详情')" />
<th:block th:include="include :: select2-css" />
<th:block th:include="include :: datetimepicker-css" />
<th:block th:include="include :: bootstrap-editable-css" />
</head>
<style>
.col-sm-12.material-table{
height: 75px;
}
.hr-line-dashed {
border-top: 1px dashed #ddd;
margin-top: 20px; /* 调整间距 */
border-bottom: 1px dashed #ddd;
margin-bottom: 20px;
}
</style>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-order-outsourceRequisition-edit" th:object="${outsourceRequisition}">
<input name="outsourceRequisitionId" id="outsourceRequisitionId" th:field="*{outsourceRequisitionId}" type="hidden">
<div class="container" id="material">
</div>
</form>
<!-- 订单合计-->
<div class="container">
<div class="row"><h4 class="card-header">订单合计:</h4></div>
<div class="col-xs-12">
<div class="col-sm-6">
<label for="materialAmount" class="col-sm-4 col-form-label">物料合计:</label>
<div class="col-sm-6">
<input type="text" class="form-control" value="0" id="materialAmount" disabled>
</div>
</div>
<div class="col-sm-6">
<label for="totalAmount" class="col-sm-4 col-form-label">领料数量合计:</label>
<div class="col-sm-6">
<input type="text" class="form-control" value="0" id="totalAmount" disabled>
</div>
</div>
</div>
</div>
</div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: select2-js" />
<th:block th:include="include :: datetimepicker-js" />
<th:block th:include="include :: bootstrap-table-editable-js" />
<script th:inline="javascript">
var prefix = ctx + "system/outsource_requisition";
$("#form-order-outsourceRequisition-edit").validate({focusCleanup: true});
var outsourcePlanDetailList = [];
// var chargeUnitDatas = [[${@dict.getType("charge_unit")}]]
// var formId = "form-plan-outsourceOrder-add";
var outsourcePlanCode = '';
var materialList = [];
var tableIdList = [];
var $processContent;
var $supplierheaderContent;
var materials;
var outsourceProcessAmount = 0;
var actualOutsourceAmount = 0;
var outsourceRequisition = [[${outsourceRequisition}]];
var originMaterial = []
$(function() {
originMaterial = outsourceRequisition.outsourceRequisitionDetailList;
materials = mergeRecords(originMaterial);
$("#totalAmount").val(outsourceRequisition.totalAmount);
// 遍历委外计划详情信息
materials.forEach(function (material, index) {
var tableId = 'materialNo-' + (index+1);
var materialTable = "bootstrap-table_" + tableId;
tableIdList.push(materialTable);
// 创建物料信息的容器
var $tableWrapper = $('<div id="material-' + tableId + '"></div>');
// 将整个物料信息容器添加到页面
$('#material').append($tableWrapper);
// 添加关联销售订单号信息
var $headerDiv =
$('<div class="row">' +
'<div class="col-xs-12" >' +
'<h3>' +
'<span><strong>物料 ' + (index+1) + ': </strong> ' + '<strong>关联订单号: </strong></span>' + '<span class="correlationCodes" style="color: blue" id="correlationCodes-' + tableId + '"></span>' +
'</h3>' +
'<div class="col-sm-12 material-table">' +
'<table class="table-materialNo" id="' + materialTable + '">' + '</table>' +
'</div>' +
'</div>' +
'</div>');
$tableWrapper.append($headerDiv);
$(".correlationCodes").text(material.correlationCodes);
$("#materialAmount").val(materials.length);
// console.log(outsourceOrderList[0].outsourceOrderNo);
var materialObj = {
outsourceRequisitionNo: material.outsourceRequisitionNo,
materialNo: material.materialNo,
materialPhotourl: material.materialPhotourl,
materialName: material.materialName,
materialType: material.materialType,
description: material.description,
unit: material.unit,
brand: material.brand,
processMethod: material.processMethod,
correlationCodes: material.correlationCodes,
actualOutsourceAmount: material.actualOutsourceAmount,
plannedOutsourceAmount: material.plannedOutsourceAmount,
alreadyRequisitionAmount: material.takenMaterial,
nowRequisitionAmount: material.takingMaterial,
};
var materialData = [materialObj]; // Bootstrap Table需要一个数组作为数据源
materialList.push(material);
tables(materialTable, materialData);
var $MaterialNumDiv =
$('<div class="row" style="margin-top: 20px;margin-left: 10px;">' +
'<div class="col-xs-12">' +
'<h3>' +
'<span><strong>供应商</strong></span>' +
'</h3>' +
'</div>' +
'</div>');
$tableWrapper.append($MaterialNumDiv);
var $processInfo = $('<div class="process-card" style="height: 60px;" id="processInfo-' + tableId + '"></div>');
if(material.processList.length <= 0){
var $noProcessDiv = $('<div class="no-process">暂无委外工序信息,请先添加委外工序信息。</div>');
$tableWrapper.append($noProcessDiv);
}else{
material.processList.forEach(function(detail, detailsIndex) {
// console.log(processIndex);
var processSelectId = 'process-select-' + tableId + '_' + (detailsIndex+1);
var processTableId = 'process-' + tableId + '_' + (detailsIndex+1);
$processContent =
$('<div class="card-header process_card" id="process-' + tableId + '_' + (detailsIndex+1) + '" >' +
'<div class="row" style="margin-left: 25px;height: 20px">' +
'<div class="card-text">' +
'<h5>委外工序 ' + (detailsIndex+1) + ':' +
'<span style="color: blue" class="outsourceProcessInfo">' + detail.outsourceProcessInfo + '</span>' +
'</h5>' +
'</div>' +
'<div class="col-xs-12" style="padding-left: 0px;">' +
'<div class="col-sm-12" style="padding-left: 0px;" id="chargeUnit-'+processSelectId+'">' +
'<span class="chargeUnit" style="padding-right: 10px;">*计价单位:</span>' +
'<span class="chargeUnitInfo" style="padding-right: 80px;">' + detail.chargeUnitInfo + '</span>' +
'<span class="singleMaterial" style="padding-right: 10px;">每个物料:</span>' +
'<span class="singleMaterialInfo">' + detail.singleMaterialInfo + '</span>' +
'</div>' +
'</div>' +
'</div>' +
'</div>');
$tableWrapper.append($processContent);
$supplierheaderContent =
$('<div class="card-header suppplier_card" id = "supplier-' + processTableId + '_' + ' ">' +
'<div class="col-xs-12">' +
'<div class="col-sm-4" style="margin-top: 13px;padding-left: 10px;">' +
'<input type="radio" id="supplier-' + processTableId + '" name="supplier-' + processTableId + '" value="" checked>' +
'<span class="supplierInfo">' + detail.supplierInfo + '</span>' +
'</div>' +
'<div class="col-sm-8 deliveryTime-'+processTableId+'" style="padding-top: 10px;padding-left: 0px;">' +
'<label class="col-sm-2" style="padding-left: 0px;margin-top: 5px;">计划交付时间: </label>' +
'<div class ="col-sm-4">' +
'<div class="input-group date"> ' +
'<input type="text" disabled name="deliveryTime" value="' + detail.deliveryTimeInfo + '" class="form-control supplierDeliveryTime" id="deliveryTime_' + processTableId + '">' +
'<span class="input-group-addon"><i class="fa fa-calendar"></i></span>' +
'</div>' +
'</div>' +
'</div>'+
'</div>' +
'</div>'+
'<div class="row">' +
'<div class="hr-line-dashed" style="margin-bottom: 0px;margin-top: 80px;">' +
'</div>' +
'</div>');
$("#"+processTableId).append($supplierheaderContent);
});
}
});
});
function tables(tableId, data) {
$('#' + tableId).bootstrapTable({
showExport: false,
showFooter: false,
showSearch: false,
showRefresh: false,
showColumns: false,
showToggle: false,
data: data,
columns: [
{title: '料号', field: 'materialNo'},
{title: '图片', field: 'materialPhotourl', formatter: function (value, row, index) {
return $.table.imageView(value);
}
},
{title: '物料名称', field: 'materialName'},
{title: '物料描述', field: 'description'},
{title: '品牌', field: 'brand'},
{title: '单位', field: 'unit', align: 'center', },
{title: '加工方式', field: 'processMethod', align: 'center',},
{title: '计划委外数', field: 'plannedOutsourceAmount'},
{title: '实际委外数', field: 'actualOutsourceAmount'},
{title: '已委外领料数', field: 'alreadyRequisitionAmount'},
{title: '本次领料数', field: 'nowRequisitionAmount',
},
],
});
}
// 函数用于合并重复的material的记录
function mergeRecords(items) {
return items.reduce((merged, current) => {
const existingRecord = merged.find(record => record.materialNo === current.materialNo);
if (existingRecord) {
if (!existingRecord.processList) {
existingRecord.processList = [];
}
existingRecord.processList.push({
outsourceProcessInfo: current.outsourceProcessInfo,
chargeUnitInfo: current.chargeUnitInfo,
singleMaterialInfo: current.singleMaterialInfo,
supplierInfo: current.supplierInfo,
deliveryTimeInfo: current.deliveryTimeInfo,
});
} else {
merged.push({
outsourceRequisitionNo: current.outsourceRequisitionNo,
materialNo: current.materialNo,
materialPhotourl: current.materialPhotourl,
materialName: current.materialName,
materialType: current.materialType,
description: current.description,
unit: current.unit,
brand: current.brand,
processMethod: current.processMethod,
correlationCodes: current.correlationCodes,
plannedOutsourceAmount: current.plannedOutsourceAmount,
actualOutsourceAmount: current.actualOutsourceAmount,
takenMaterial: current.takenMaterial,
takingMaterial: current.takingMaterial,
processList:[{
outsourceProcessInfo: current.outsourceProcessInfo,
chargeUnitInfo: current.chargeUnitInfo,
singleMaterialInfo: current.singleMaterialInfo,
supplierInfo: current.supplierInfo,
deliveryTimeInfo: current.deliveryTimeInfo,
}],
});
}
return merged;
}, []);
};
</script>
</body>
</html>

461
ruoyi-admin/src/main/resources/templates/system/outsource_requisition/edit.html

@ -1,151 +1,364 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('修改委外领料')" />
<th:block th:include="include :: header('修改委外领料单')" />
<th:block th:include="include :: select2-css" />
<th:block th:include="include :: datetimepicker-css" />
<th:block th:include="include :: bootstrap-editable-css" />
</head>
<style>
.col-sm-12.material-table{
height: 75px;
}
.hr-line-dashed {
border-top: 1px dashed #ddd;
margin-top: 20px; /* 调整间距 */
border-bottom: 1px dashed #ddd;
margin-bottom: 20px;
}
.is-required {
position: relative;
padding-left: 5px; /* 为星号留出空间 */
}
.is-required::before {
content: '*';
font-weight: bold;
color: red;
position: absolute;
left: 0;
top: 0;
}
</style>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-outsource_requisition-edit" th:object="${outsourceRequisition}">
<h4 class="form-header h4">委外领料信息</h4>
<input name="outsourceRequisitionId" th:field="*{outsourceRequisitionId}" type="hidden">
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label is-required">委外领料编号:</label>
<div class="col-sm-8">
<input name="outsourceRequisitionNo" th:field="*{outsourceRequisitionNo}" class="form-control" type="text" required>
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label is-required">委外订单编号:</label>
<div class="col-sm-8">
<input name="outsourceOrderNo" th:field="*{outsourceOrderNo}" class="form-control" type="text" required>
</div>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label">领料员:</label>
<div class="col-sm-8">
<input name="requisitionPerson" th:field="*{requisitionPerson}" class="form-control" type="text">
</div>
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-order-outsourceRequisition-edit" th:object="${outsourceRequisition}">
<input name="outsourceRequisitionId" id="outsourceRequisitionId" th:field="*{outsourceRequisitionId}" type="hidden">
<div class="container" id="material">
</div>
</form>
<!-- 订单合计-->
<div class="container">
<div class="row"><h4 class="card-header">订单合计:</h4></div>
<div class="col-xs-12">
<div class="col-sm-6">
<label for="materialAmount" class="col-sm-4 col-form-label">物料合计:</label>
<div class="col-sm-6">
<input type="text" class="form-control" value="0" id="materialAmount" disabled>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label">物料合计:</label>
<div class="col-sm-8">
<input name="materialAmount" th:field="*{materialAmount}" class="form-control" type="text">
</div>
<div class="col-sm-6">
<label for="totalAmount" class="col-sm-4 col-form-label">领料数量合计:</label>
<div class="col-sm-6">
<input type="text" class="form-control" value="0" id="totalAmount" disabled>
</div>
</div>
<div class="col-xs-12">
<div class="form-group">
<label class="col-sm-3 control-label">数量总计:</label>
<div class="col-sm-8">
<input name="totalAmount" th:field="*{totalAmount}" class="form-control" type="text">
</div>
</div>
</div>
<h4 class="form-header h4">委外领料详情信息</h4>
<div class="row">
<div class="col-sm-12">
<button type="button" class="btn btn-white btn-sm" onclick="addRow()"><i class="fa fa-plus"> 增加</i></button>
<button type="button" class="btn btn-white btn-sm" onclick="sub.delRow()"><i class="fa fa-minus"> 删除</i></button>
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
</div>
</div>
</div>
</form>
</div>
</div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var prefix = ctx + "system/outsource_requisition";
$("#form-outsource_requisition-edit").validate({
focusCleanup: true
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/edit", $('#form-outsource_requisition-edit').serialize());
</div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: select2-js" />
<th:block th:include="include :: datetimepicker-js" />
<th:block th:include="include :: bootstrap-table-editable-js" />
<script th:inline="javascript">
var prefix = ctx + "system/outsource_requisition";
$("#form-order-outsourceRequisition-edit").validate({focusCleanup: true});
var outsourcePlanDetailList = [];
// var chargeUnitDatas = [[${@dict.getType("charge_unit")}]]
// var formId = "form-plan-outsourceOrder-add";
var outsourcePlanCode = '';
var materialList = [];
var tableIdList = [];
var $processContent;
var $supplierheaderContent;
var materials;
var outsourceProcessAmount = 0;
var actualOutsourceAmount = 0;
var outsourceRequisition = [[${outsourceRequisition}]];
var outsourceRequisitionNo = [[${outsourceRequisition.outsourceRequisitionNo}]];
var originMaterial = []
$(function() {
originMaterial = outsourceRequisition.outsourceRequisitionDetailList;
materials = mergeRecords(originMaterial);
$("#totalAmount").val(outsourceRequisition.totalAmount);
console.log(materials);
// 遍历委外计划详情信息
materials.forEach(function (material, index) {
var tableId = 'materialNo-' + (index+1);
var materialTable = "bootstrap-table_" + tableId;
tableIdList.push(materialTable);
// 创建物料信息的容器
var $tableWrapper = $('<div id="material-' + tableId + '"></div>');
// 将整个物料信息容器添加到页面
$('#material').append($tableWrapper);
// 添加关联销售订单号信息
var $headerDiv =
$('<div class="row">' +
'<div class="col-xs-12" >' +
'<h3>' +
'<span><strong>物料 ' + (index+1) + ': </strong> ' + '<strong>关联订单号: </strong></span>' + '<span class="correlationCodes" style="color: blue" id="correlationCodes-' + tableId + '"></span>' +
'</h3>' +
'<div class="col-sm-12 material-table">' +
'<table class="table-materialNo" id="' + materialTable + '">' + '</table>' +
'</div>' +
'</div>' +
'</div>');
$tableWrapper.append($headerDiv);
$(".correlationCodes").text(material.correlationCodes);
$("#materialAmount").val(materials.length);
// console.log(outsourceOrderList[0].outsourceOrderNo);
var materialObj = {
outsourceRequisitionNo: material.outsourceRequisitionNo,
materialNo: material.materialNo,
materialPhotourl: material.materialPhotourl,
materialName: material.materialName,
materialType: material.materialType,
description: material.description,
unit: material.unit,
brand: material.brand,
processMethod: material.processMethod,
correlationCodes: material.correlationCodes,
actualOutsourceAmount: material.actualOutsourceAmount,
plannedOutsourceAmount: material.plannedOutsourceAmount,
alreadyRequisitionAmount: material.takenMaterial,
nowRequisitionAmount: material.takingMaterial,
};
var materialData = [materialObj]; // Bootstrap Table需要一个数组作为数据源
materialList.push(material);
tables(materialTable, materialData);
var $MaterialNumDiv =
$('<div class="row" style="margin-top: 20px;margin-left: 10px;">' +
'<div class="col-xs-12">' +
'<h3>' +
'<span><strong>供应商</strong></span>' +
'</h3>' +
'</div>' +
'</div>');
$tableWrapper.append($MaterialNumDiv);
var $processInfo = $('<div class="process-card" style="height: 60px;" id="processInfo-' + tableId + '"></div>');
if(material.processList.length <= 0){
var $noProcessDiv = $('<div class="no-process">暂无委外工序信息,请先添加委外工序信息。</div>');
$tableWrapper.append($noProcessDiv);
}else{
material.processList.forEach(function(detail, detailsIndex) {
// console.log(processIndex);
var processSelectId = 'process-select-' + tableId + '_' + (detailsIndex+1);
var processTableId = 'process-' + tableId + '_' + (detailsIndex+1);
$processContent =
$('<div class="card-header process_card" id="process-' + tableId + '_' + (detailsIndex+1) + '" >' +
'<div class="row" style="margin-left: 25px;height: 20px">' +
'<div class="card-text">' +
'<h5>委外工序 ' + (detailsIndex+1) + ':' +
'<span style="color: blue" class="outsourceProcessInfo">' + detail.outsourceProcessInfo + '</span>' +
'</h5>' +
'</div>' +
'<div class="col-xs-12" style="padding-left: 0px;">' +
'<div class="col-sm-12" style="padding-left: 0px;" id="chargeUnit-'+processSelectId+'">' +
'<span class="chargeUnit" style="padding-right: 10px;">*计价单位:</span>' +
'<span class="chargeUnitInfo" style="padding-right: 80px;">' + detail.chargeUnitInfo + '</span>' +
'<span class="singleMaterial" style="padding-right: 10px;">每个物料:</span>' +
'<span class="singleMaterialInfo">' + detail.singleMaterialInfo + '</span>' +
'</div>' +
'</div>' +
'</div>' +
'</div>');
$tableWrapper.append($processContent);
$supplierheaderContent =
$('<div class="card-header suppplier_card" id = "supplier-' + processTableId + '_' + ' ">' +
'<div class="col-xs-12">' +
'<div class="col-sm-4" style="margin-top: 13px;padding-left: 10px;">' +
'<input type="radio" id="supplier-' + processTableId + '" name="supplier-' + processTableId + '" value="" checked>' +
'<span class="supplierInfo">' + detail.supplierInfo + '</span>' +
'</div>' +
'<div class="col-sm-8 deliveryTime-'+processTableId+'" style="padding-top: 10px;padding-left: 0px;">' +
'<label class="col-sm-2" style="padding-left: 0px;margin-top: 5px;">计划交付时间: </label>' +
'<div class ="col-sm-4">' +
'<div class="input-group date"> ' +
'<input type="text" disabled name="deliveryTime" value="' + detail.deliveryTimeInfo + '" class="form-control supplierDeliveryTime" id="deliveryTime_' + processTableId + '">' +
'<span class="input-group-addon"><i class="fa fa-calendar"></i></span>' +
'</div>' +
'</div>' +
'</div>'+
'</div>' +
'</div>'+
'<div class="row">' +
'<div class="hr-line-dashed" style="margin-bottom: 0px;margin-top: 80px;">' +
'</div>' +
'</div>');
$("#"+processTableId).append($supplierheaderContent);
});
}
}
});
});
$(function() {
var options = {
data: [[${outsourceRequisition.outsourceRequisitionDetailList}]],
pagination: false,
showSearch: false,
showRefresh: false,
showToggle: false,
showColumns: false,
sidePagination: "client",
columns: [{
checkbox: true
},
{
field: 'index',
align: 'center',
title: "序号",
formatter: function (value, row, index) {
var columnIndex = $.common.sprintf("<input type='hidden' name='index' value='%s'>", $.table.serialNumber(index));
return columnIndex + $.table.serialNumber(index);
function tables(tableId, data) {
$('#' + tableId).bootstrapTable({
showExport: false,
showFooter: false,
showSearch: false,
showRefresh: false,
showColumns: false,
showToggle: false,
data: data,
columns: [
{title: '料号', field: 'materialNo'},
{title: '图片', field: 'materialPhotourl', formatter: function (value, row, index) {
return $.table.imageView(value);
}
},
{
field: 'materialNo',
align: 'center',
title: '料号',
{title: '物料名称', field: 'materialName'},
{title: '物料描述', field: 'description'},
{title: '品牌', field: 'brand'},
{title: '单位', field: 'unit', align: 'center', },
{title: '加工方式', field: 'processMethod', align: 'center',},
{title: '计划委外数', field: 'plannedOutsourceAmount'},
{title: '实际委外数', field: 'actualOutsourceAmount'},
{title: '已委外领料数', field: 'alreadyRequisitionAmount'},
{title: '本次领料数', field: 'nowRequisitionAmount',
formatter: function(value, row, index) {
var html = $.common.sprintf("<input class='form-control' type='text' name='outsourceRequisitionDetailList[%s].materialNo' value='%s'>", index, value);
var html = $.common.sprintf("<input class='form-control' type='number' name='nowRequisitionAmount' id = 'nowRequisitionAmount_"+tableId+"' value='"+data[index].nowRequisitionAmount+"'>", index, value);
return html;
}
},
],
});
$('input[name="nowRequisitionAmount"]').on('input', function() {
calculateTotal();
});
}
// 计算总领料数
function calculateTotal() {
var inputs = $('input[name="nowRequisitionAmount"]');
var total = 0;
{
field: 'takenMaterial',
align: 'center',
title: '已委外领料数',
formatter: function(value, row, index) {
var html = $.common.sprintf("<input class='form-control' type='text' name='outsourceRequisitionDetailList[%s].takenMaterial' value='%s'>", index, value);
return html;
}
},
inputs.each(function() {
var value = parseFloat($(this).val()) || 0; // 将输入框的值转换为数字,默认为0
total += value;
});
// console.log("总领料数:" + total);
$("#totalAmount").val(total);
};
// 函数用于合并重复的material的记录
function mergeRecords(items) {
return items.reduce((merged, current) => {
const existingRecord = merged.find(record => record.materialNo === current.materialNo);
if (existingRecord) {
if (!existingRecord.processList) {
existingRecord.processList = [];
}
existingRecord.processList.push({
outsourceProcessInfo: current.outsourceProcessInfo,
chargeUnitInfo: current.chargeUnitInfo,
singleMaterialInfo: current.singleMaterialInfo,
supplierInfo: current.supplierInfo,
deliveryTimeInfo: current.deliveryTimeInfo,
});
} else {
merged.push({
outsourceRequisitionNo: current.outsourceRequisitionNo,
materialNo: current.materialNo,
materialPhotourl: current.materialPhotourl,
materialName: current.materialName,
materialType: current.materialType,
description: current.description,
unit: current.unit,
brand: current.brand,
processMethod: current.processMethod,
correlationCodes: current.correlationCodes,
plannedOutsourceAmount: current.plannedOutsourceAmount,
actualOutsourceAmount: current.actualOutsourceAmount,
takenMaterial: current.takenMaterial,
takingMaterial: current.takingMaterial,
processList:[{
outsourceProcessInfo: current.outsourceProcessInfo,
chargeUnitInfo: current.chargeUnitInfo,
singleMaterialInfo: current.singleMaterialInfo,
supplierInfo: current.supplierInfo,
deliveryTimeInfo: current.deliveryTimeInfo,
}],
});
}
return merged;
}, []);
};
function submitHandler() {
var materialAmount = 0;
var outsourceRequisition = {
outsourceRequisitionId: $("#outsourceRequisitionId").val(),
outsourceRequisitionNo: outsourceRequisitionNo,
materialAmount: 0,
totalAmount: 0,
outsourceRequisitionDetailList:[]
};
let requisitionSum = 0;
var hasError = false;
var hasValue = false;
$('.table-materialNo').each(function(index, tableElement) {
var tableId = tableIdList[index];
let materialObj = materialList[index];
{
field: 'takingMaterial',
align: 'center',
title: '本次委外领料数',
formatter: function(value, row, index) {
var html = $.common.sprintf("<input class='form-control' type='text' name='outsourceRequisitionDetailList[%s].takingMaterial' value='%s'>", index, value);
return html;
}
},
if (typeof materialObj === 'undefined') return;
var rows = $("#" + tableId).bootstrapTable('getData').length;
if(rows != 0) {
var data = $("#" + tableId).bootstrapTable('getData')[0];
if($('[id^="nowRequisitionAmount_' + tableId + '"]').val() === ""){
var requisitionDetail = {
outsourceRequisitionNo: outsourceRequisitionNo,
materialNo: data.materialNo,
takingMaterial: 0,
};
outsourceRequisition.outsourceRequisitionDetailList.push(requisitionDetail);
}else{
hasValue = true;
materialAmount++;
let value = Number($('[id^="nowRequisitionAmount_' + tableId + '"]').val());
{
title: '操作',
align: 'center',
formatter: function(value, row, index) {
var value = $.common.isNotEmpty(row.index) ? row.index : $.table.serialNumber(index);
return '<a class="btn btn-danger btn-xs" href="javascript:void(0)" onclick="sub.delRowByIndex(\'' + value + '\')"><i class="fa fa-remove"></i>删除</a>';
if (!isNaN(value)) {
var hasReValue = Number(data.alreadyRequisitionAmount);
if(hasReValue + value>data.actualOutsourceAmount){
hasError = true;
}
requisitionSum += value;
}
}]
};
$.table.init(options);
});
function addRow() {
var count = $("#" + table.options.id).bootstrapTable('getData').length;
var row = {
index: $.table.serialNumber(count),
materialNo: "",
takenMaterial: "",
takingMaterial: "",
var requisitionDetail = {
outsourceRequisitionNo: outsourceRequisitionNo,
materialNo: data.materialNo,
takingMaterial: value,
};
outsourceRequisition.outsourceRequisitionDetailList.push(requisitionDetail);
}
}
sub.addRow(row);
outsourceRequisition.materialAmount = materialAmount;
});
if(!hasValue){
$.modal.msgError("领料数不能全为空!");
return;
}
if(!hasError){
console.log(outsourceRequisition);
outsourceRequisition.totalAmount += requisitionSum;
$.operate.saveJson(prefix + "/edit",JSON.stringify(outsourceRequisition));
}else{
$.modal.msgError("累计领料数不能大于实际委外数!");
return;
}
</script>
}
</script>
</body>
</html>

75
ruoyi-admin/src/main/resources/templates/system/outsource_requisition/outsource_requisition.html

@ -41,7 +41,7 @@
</a>
</div>
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
<table id="bootstrap-table" style="white-space:nowrap"></table>
</div>
</div>
</div>
@ -53,7 +53,7 @@
var detailFlag = [[${@permission.hasPermi('system:outsource_requisition:detail')}]];
var prefix = ctx + "system/outsource_requisition";
var auditStatusDatas = [[${@dict.getType('auditStatus')}]];
var requisitionStatusDatas = [[${@dict.getType('requisitionStatus')}]];
var requisitionStatusDatas = [[${@dict.getType('pickStatus')}]];
var loginName = [[${@permission.getPrincipalProperty('loginName')}]];
@ -66,9 +66,27 @@
removeUrl: prefix + "/remove",
exportUrl: prefix + "/export",
modalName: "委外领料",
pageList: [5, 10, 25, 50],
pageSize: 10,
// fixedColumns: true, // 启用冻结列
// fixedRightNumber: 1, // 冻结右列个数
columns: [{
checkbox: true
},
{
field: 'taskStatus',
title: '当前状态',
align: 'center',
formatter: function(value, row, index) {
if(row.auditStatus!="1"&&value != "未启动"){
return '<span class="badge badge-danger">' + value + '</span>';
}
if(value === "未启动"){
return '<span class="badge badge-primary">' + value + '</span>';
}
return '<span class="badge badge-primary">' + value + '</span>';
}
},
{
field: 'auditStatus',
title: '审核状态',
@ -77,13 +95,7 @@
return $.table.selectDictLabel(auditStatusDatas, value);
}
},
{
field: 'requisitionStatus',
title: '领料状态',
formatter: function(value, row, index) {
return $.table.selectDictLabel(requisitionStatusDatas, value);
}
}, {
{
field: 'instanceId',
title: '流程实例ID',
visible: false
@ -124,29 +136,27 @@
field: 'applyTime',
title: '申请时间'
},
{
field: 'requisitionStatus',
title: '领料状态',
formatter: function(value, row, index) {
return $.table.selectDictLabel(requisitionStatusDatas, value);
}
},
{
field: 'taskId',
title: '当前任务ID',
visible: false
},
{
field: 'todoUserId',
title: '待办用户ID',
field: 'taskName',
title: '当前任务名称',
visible: false
},
{
field: 'taskName',
title: '当前状态',
align: 'center',
formatter: function(value, row, index) {
if(row.auditStatus!="1"&&value != "未启动"){
return '<span class="badge badge-danger">' + value + '</span>';
}
if(value === "未启动"){
return '<span class="badge badge-primary">' + value + '</span>';
}
return '<span class="badge badge-primary">' + value + '</span>';
}
field: 'todoUserId',
title: '待办用户ID',
visible: false
},
{
field: 'outsourceRequisitionId',
@ -175,7 +185,8 @@
},
{
field: 'createTime',
title: '录入时间'
title: '录入时间',
visible: false,
},
{
field: 'updateBy',
@ -190,14 +201,11 @@
align: 'center',
formatter: function(value, row, index) {
var actions = [];
// 审核状态-审核通过 使用状态-是 未发起作废流程
if(row.auditStatus=="1"){
// 作废
// actions.push('<a class="btn btn-danger btn-xs" href="javascript:void(0)" onclick="$.operate.cancel(\'' + row.id + '\')"><i class="fa fa-remove"></i> 作废</a>');
// 编辑
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.outsourceQuoteId + '\')"><i class="fa fa-edit"></i> 编辑</a> ');
// 审核状态-审核拒绝
if(row.auditStatus=="2"){
// actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.outsourceQuoteId + '\')"><i class="fa fa-edit"></i> 编辑</a> ');
}else{
actions.push('<a class="btn btn-default btn-xs" disabled href="javascript:void(0)"><i class="fa fa-edit"></i> 编辑</a> ');
// actions.push('<a class="btn btn-default btn-xs" disabled href="javascript:void(0)"><i class="fa fa-edit"></i> 编辑</a> ');
}
// 有流程实例id
if (row.instanceId) {
@ -212,9 +220,10 @@
// 审批历史
actions.push('<a class="btn btn-warning btn-xs" href="javascript:void(0)" onclick="showHistoryDialog(\'' + row.instanceId + '\')"><i class="fa fa-list"></i> 审批历史</a> ');
// 进度查看
actions.push('<a class="btn btn-info btn-xs" href="javascript:void(0)" onclick="showProcessImgDialog(\'' + row.instanceId + '\')"><i class="fa fa-image"></i> 进度查看</a> ');
actions.push('<a class="btn btn-info btn-xs" href="javascript:void(0)" onclick="showProcessImgDialog(\'' + row.instanceId + '\')"><i class="fa fa-image"></i> 进度</a> ');
}
actions.push('<a class="btn btn-info btn-xs ' + detailFlag + '" href="javascript:void(0)" onclick="$.operate.detail(\'' + row.outsourceRequisitionId + '\')"><i class="fa fa-detail"></i>详情</a>');
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.outsourceRequisitionId + '\')"><i class="fa fa-edit"></i> 编辑</a> ');
actions.push('<a class="btn btn-info btn-xs ' + detailFlag + '" href="javascript:void(0)" onclick="$.operate.detail(\'' + row.outsourceRequisitionId + '\')"><i class="fa fa-eye"></i>详情</a>');
return actions.join('');
}
}],

323
ruoyi-admin/src/main/resources/templates/system/outsource_requisition/taskModifyApply.html

@ -0,0 +1,323 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('驳回调整')" />
<th:block th:include="include :: datetimepicker-css" />
<th:block th:include="include :: summernote-css" />
</head>
<style>
.col-sm-12.material-table{
height: 75px;
}
.hr-line-dashed {
border-top: 1px dashed #ddd;
margin-top: 20px; /* 调整间距 */
border-bottom: 1px dashed #ddd;
margin-bottom: 20px;
}
.is-required {
position: relative;
padding-left: 5px; /* 为星号留出空间 */
}
.is-required::before {
content: '*';
font-weight: bold;
color: red;
position: absolute;
left: 0;
top: 0;
}
</style>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-outsourceRequisition-edit" th:object="${formData}">
<input name="outsourceRequisitionId" id="outsourceRequisitionId" th:field="*{outsourceRequisitionId}" type="hidden">
<input name="taskId" th:field="*{taskId}" type="hidden">
<div class="form-group">
<label class="col-sm-3 control-label">委外领料单号:</label>
<div class="col-sm-6">
<input name="outsourceRequisitionNo" th:field="*{outsourceRequisitionNo}" class="form-control" type="text" readonly>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label" for="reApply">是否继续申请:</label>
<div class="col-sm-6">
<select id="reApply" name="p_B_reApply" class="form-control m-b">
<option value="true">重新申请</option>
<option value="false">结束流程</option>
</select>
</div>
</div>
<div class="container" id="material">
</div>
</form>
<!-- 订单合计-->
<div class="container">
<div class="row"><h4 class="card-header">订单合计:</h4></div>
<div class="col-xs-12">
<div class="col-sm-6">
<label for="materialAmount" class="col-sm-4 col-form-label">物料合计:</label>
<div class="col-sm-6">
<input type="text" class="form-control" value="0" id="materialAmount" disabled>
</div>
</div>
<div class="col-sm-6">
<label for="totalAmount" class="col-sm-4 col-form-label">领料数量合计:</label>
<div class="col-sm-6">
<input type="text" class="form-control" value="0" id="totalAmount" disabled>
</div>
</div>
</div>
</div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: datetimepicker-js" />
<th:block th:include="include :: summernote-js" />
<script th:inline="javascript">
var prefix = ctx + "system/outsourceRequisition";
$("#form-outsourceRequisition-edit").validate({
focusCleanup: true
});
var outsourcePlanDetailList = [];
// var chargeUnitDatas = [[${@dict.getType("charge_unit")}]]
// var formId = "form-plan-outsourceOrder-add";
var outsourcePlanCode = '';
var materialList = [];
var tableIdList = [];
var $processContent;
var $supplierheaderContent;
var materials;
var outsourceProcessAmount = 0;
var actualOutsourceAmount = 0;
var outsourceRequisition = [[${outsourceRequisition}]];
var outsourceRequisitionNo = [[${outsourceRequisition.outsourceRequisitionNo}]];
var originMaterial = []
$(function() {
originMaterial = outsourceRequisition.outsourceRequisitionDetailList;
materials = mergeRecords(originMaterial);
$("#totalAmount").val(outsourceRequisition.totalAmount);
console.log(materials);
// 遍历委外计划详情信息
materials.forEach(function (material, index) {
var tableId = 'materialNo-' + (index+1);
var materialTable = "bootstrap-table_" + tableId;
tableIdList.push(materialTable);
// 创建物料信息的容器
var $tableWrapper = $('<div id="material-' + tableId + '"></div>');
// 将整个物料信息容器添加到页面
$('#material').append($tableWrapper);
// 添加关联销售订单号信息
var $headerDiv =
$('<div class="row">' +
'<div class="col-xs-12" >' +
'<h3>' +
'<span><strong>物料 ' + (index+1) + ': </strong> ' + '<strong>关联订单号: </strong></span>' + '<span class="correlationCodes" style="color: blue" id="correlationCodes-' + tableId + '"></span>' +
'</h3>' +
'<div class="col-sm-12 material-table">' +
'<table class="table-materialNo" id="' + materialTable + '">' + '</table>' +
'</div>' +
'</div>' +
'</div>');
$tableWrapper.append($headerDiv);
$(".correlationCodes").text(material.correlationCodes);
$("#materialAmount").val(materials.length);
// console.log(outsourceOrderList[0].outsourceOrderNo);
var materialObj = {
outsourceRequisitionNo: material.outsourceRequisitionNo,
materialNo: material.materialNo,
materialPhotourl: material.materialPhotourl,
materialName: material.materialName,
materialType: material.materialType,
description: material.description,
unit: material.unit,
brand: material.brand,
processMethod: material.processMethod,
correlationCodes: material.correlationCodes,
actualOutsourceAmount: material.actualOutsourceAmount,
plannedOutsourceAmount: material.plannedOutsourceAmount,
alreadyRequisitionAmount: material.takenMaterial,
nowRequisitionAmount: material.takingMaterial,
};
var materialData = [materialObj]; // Bootstrap Table需要一个数组作为数据源
materialList.push(material);
tables(materialTable, materialData);
var $MaterialNumDiv =
$('<div class="row" style="margin-top: 20px;margin-left: 10px;">' +
'<div class="col-xs-12">' +
'<h3>' +
'<span><strong>供应商</strong></span>' +
'</h3>' +
'</div>' +
'</div>');
$tableWrapper.append($MaterialNumDiv);
var $processInfo = $('<div class="process-card" style="height: 60px;" id="processInfo-' + tableId + '"></div>');
if(material.processList.length <= 0){
var $noProcessDiv = $('<div class="no-process">暂无委外工序信息,请先添加委外工序信息。</div>');
$tableWrapper.append($noProcessDiv);
}else{
material.processList.forEach(function(detail, detailsIndex) {
// console.log(processIndex);
var processSelectId = 'process-select-' + tableId + '_' + (detailsIndex+1);
var processTableId = 'process-' + tableId + '_' + (detailsIndex+1);
$processContent =
$('<div class="card-header process_card" id="process-' + tableId + '_' + (detailsIndex+1) + '" >' +
'<div class="row" style="margin-left: 25px;height: 20px">' +
'<div class="card-text">' +
'<h5>委外工序 ' + (detailsIndex+1) + ':' +
'<span style="color: blue" class="outsourceProcessInfo">' + detail.outsourceProcessInfo + '</span>' +
'</h5>' +
'</div>' +
'<div class="col-xs-12" style="padding-left: 0px;">' +
'<div class="col-sm-12" style="padding-left: 0px;" id="chargeUnit-'+processSelectId+'">' +
'<span class="chargeUnit" style="padding-right: 10px;">*计价单位:</span>' +
'<span class="chargeUnitInfo" style="padding-right: 80px;">' + detail.chargeUnitInfo + '</span>' +
'<span class="singleMaterial" style="padding-right: 10px;">每个物料:</span>' +
'<span class="singleMaterialInfo">' + detail.singleMaterialInfo + '</span>' +
'</div>' +
'</div>' +
'</div>' +
'</div>');
$tableWrapper.append($processContent);
$supplierheaderContent =
$('<div class="card-header suppplier_card" id = "supplier-' + processTableId + '_' + ' ">' +
'<div class="col-xs-12">' +
'<div class="col-sm-4" style="margin-top: 13px;padding-left: 10px;">' +
'<input type="radio" id="supplier-' + processTableId + '" name="supplier-' + processTableId + '" value="" checked>' +
'<span class="supplierInfo">' + detail.supplierInfo + '</span>' +
'</div>' +
'<div class="col-sm-8 deliveryTime-'+processTableId+'" style="padding-top: 10px;padding-left: 0px;">' +
'<label class="col-sm-2" style="padding-left: 0px;margin-top: 5px;">计划交付时间: </label>' +
'<div class ="col-sm-4">' +
'<div class="input-group date"> ' +
'<input type="text" disabled name="deliveryTime" value="' + detail.deliveryTimeInfo + '" class="form-control supplierDeliveryTime" id="deliveryTime_' + processTableId + '">' +
'<span class="input-group-addon"><i class="fa fa-calendar"></i></span>' +
'</div>' +
'</div>' +
'</div>'+
'</div>' +
'</div>'+
'<div class="row">' +
'<div class="hr-line-dashed" style="margin-bottom: 0px;margin-top: 80px;">' +
'</div>' +
'</div>');
$("#"+processTableId).append($supplierheaderContent);
});
}
});
});
function tables(tableId, data) {
$('#' + tableId).bootstrapTable({
showExport: false,
showFooter: false,
showSearch: false,
showRefresh: false,
showColumns: false,
showToggle: false,
data: data,
columns: [
{title: '料号', field: 'materialNo'},
{title: '图片', field: 'materialPhotourl', formatter: function (value, row, index) {
return $.table.imageView(value);
}
},
{title: '物料名称', field: 'materialName'},
{title: '物料描述', field: 'description'},
{title: '品牌', field: 'brand'},
{title: '单位', field: 'unit', align: 'center', },
{title: '加工方式', field: 'processMethod', align: 'center',},
{title: '计划委外数', field: 'plannedOutsourceAmount'},
{title: '实际委外数', field: 'actualOutsourceAmount'},
{title: '已委外领料数', field: 'alreadyRequisitionAmount'},
{title: '本次领料数', field: 'nowRequisitionAmount',
formatter: function(value, row, index) {
var html = $.common.sprintf("<input class='form-control' type='number' name='nowRequisitionAmount' id = 'nowRequisitionAmount_"+tableId+"' value='"+data[index].nowRequisitionAmount+"'>", index, value);
return html;
}
},
],
});
$('input[name="nowRequisitionAmount"]').on('input', function() {
calculateTotal();
});
}
// 计算总领料数
function calculateTotal() {
var inputs = $('input[name="nowRequisitionAmount"]');
var total = 0;
inputs.each(function() {
var value = parseFloat($(this).val()) || 0; // 将输入框的值转换为数字,默认为0
total += value;
});
// console.log("总领料数:" + total);
$("#totalAmount").val(total);
};
// 函数用于合并重复的material的记录
function mergeRecords(items) {
return items.reduce((merged, current) => {
const existingRecord = merged.find(record => record.materialNo === current.materialNo);
if (existingRecord) {
if (!existingRecord.processList) {
existingRecord.processList = [];
}
existingRecord.processList.push({
outsourceProcessInfo: current.outsourceProcessInfo,
chargeUnitInfo: current.chargeUnitInfo,
singleMaterialInfo: current.singleMaterialInfo,
supplierInfo: current.supplierInfo,
deliveryTimeInfo: current.deliveryTimeInfo,
});
} else {
merged.push({
outsourceRequisitionNo: current.outsourceRequisitionNo,
materialNo: current.materialNo,
materialPhotourl: current.materialPhotourl,
materialName: current.materialName,
materialType: current.materialType,
description: current.description,
unit: current.unit,
brand: current.brand,
processMethod: current.processMethod,
correlationCodes: current.correlationCodes,
plannedOutsourceAmount: current.plannedOutsourceAmount,
actualOutsourceAmount: current.actualOutsourceAmount,
takenMaterial: current.takenMaterial,
takingMaterial: current.takingMaterial,
processList:[{
outsourceProcessInfo: current.outsourceProcessInfo,
chargeUnitInfo: current.chargeUnitInfo,
singleMaterialInfo: current.singleMaterialInfo,
supplierInfo: current.supplierInfo,
deliveryTimeInfo: current.deliveryTimeInfo,
}],
});
}
return merged;
}, []);
};
function submitHandler() {
if ($.validate.form()) {
var taskId = [[${taskId}]];
$.operate.save(prefix + "/complete/" + taskId, $('#form-outsourceRequisition-edit').serialize());
}
}
</script>
</body>
</html>

306
ruoyi-admin/src/main/resources/templates/system/outsource_requisition/taskWwjlVerify.html

@ -5,9 +5,20 @@
<th:block th:include="include :: datetimepicker-css" />
<th:block th:include="include :: summernote-css" />
</head>
<style>
.col-sm-12.material-table{
height: 75px;
}
.hr-line-dashed {
border-top: 1px dashed #ddd;
margin-top: 20px; /* 调整间距 */
border-bottom: 1px dashed #ddd;
margin-bottom: 20px;
}
</style>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-outsourceQuote-wwjl" th:object="${formData}">
<form class="form-horizontal m" id="form-outsourceRequisition-wwjl" th:object="${formData}">
<input name="outsourceRequisitionId" th:field="*{outsourceRequisitionId}" type="hidden">
<input name="taskId" th:field="*{taskId}" type="hidden">
<input name="taskName" th:field="*{taskName}" type="hidden">
@ -16,47 +27,31 @@
<input type="hidden" name="p_COM_comment" />
<div class="form-group">
<label class="col-sm-3 control-label">委外领料单号:</label>
<div class="col-sm-8">
<div class="col-sm-6">
<input name="outsourceRequisitionNo" th:field="*{outsourceRequisitionNo}" class="form-control" type="text" readonly>
</div>
</div>
<!-- <div class="form-group">-->
<!-- <label class="col-sm-3 control-label">供应商编号:</label>-->
<!-- <div class="col-sm-8">-->
<!-- <input name="supplierQuoteCode" th:field="*{supplierQuoteCode}" class="form-control" type="text" readonly>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="form-group">-->
<!-- <label class="col-sm-3 control-label">供应商名称:</label>-->
<!-- <div class="col-sm-8">-->
<!-- <input name="supplierName" th:field="*{supplierName}" class="form-control" type="text" readonly>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="form-group">-->
<!-- <label class="col-sm-3 control-label">工序合计:</label>-->
<!-- <div class="col-sm-8">-->
<!-- <input name="processAmount" th:field="*{processAmount}" class="form-control" type="text" readonly>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="form-group">-->
<!-- <label class="col-sm-3 control-label">税率:</label>-->
<!-- <div class="col-sm-8">-->
<!-- <input name="taxRate" th:field="*{taxRate}" class="form-control" type="text" readonly>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="form-group">-->
<!-- <label class="col-sm-3 control-label">定价日期:</label>-->
<!-- <div class="col-sm-8">-->
<!-- <input name="pricingDate" th:field="*{pricingDate}" class="form-control" type="text" readonly>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="form-group">-->
<!-- <label class="col-sm-3 control-label">备注:</label>-->
<!-- <div class="col-sm-8">-->
<!-- <input name="remark" th:field="*{remark}" class="form-control" type="text" readonly>-->
<!-- </div>-->
<!-- </div>-->
<div class="form-group">
<label class="col-sm-3 control-label">申请人:</label>
<div class="col-sm-6">
<input name="applyUser" th:field="*{applyUser}" class="form-control" type="text" readonly>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">申请时间:</label>
<div class="col-sm-6">
<div class="input-group date">
<input name="applyTime" th:value="${#dates.format(formData.applyTime, 'yyyy-MM-dd HH:mm')}" class="form-control" type="text" readonly>
<span class="input-group-addon" disabled><i class="fa fa-calendar"></i></span>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">标题:</label>
<div class="col-sm-6">
<input name="title" th:field="*{applyTitle}" class="form-control" type="text" readonly>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label is-required" for="wwjlVerifyApproved">审批意见:</label>
<div class="col-sm-6">
@ -68,15 +63,33 @@
</div>
</div>
<div class="form-group">
<label class="col-sm-6 control-label">批注:</label>
<label class="col-sm-3 control-label">批注:</label>
<div class="col-sm-6">
<textarea name="comment" class="form-control"></textarea>
</div>
</div>
<div class="form-group">
<div class="container" id="material">
</div>
</form>
<!-- 订单合计-->
<div class="container">
<div class="row"><h4 class="card-header">订单合计:</h4></div>
<div class="col-xs-12">
<div class="col-sm-6">
<label for="materialAmount" class="col-sm-4 col-form-label">物料合计:</label>
<div class="col-sm-6">
<input type="text" class="form-control" value="0" id="materialAmount" disabled>
</div>
</div>
<div class="col-sm-6">
<label for="totalAmount" class="col-sm-4 col-form-label">领料数量合计:</label>
<div class="col-sm-6">
<input type="text" class="form-control" value="0" id="totalAmount" disabled>
</div>
</div>
</div>
</div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: datetimepicker-js" />
@ -84,10 +97,20 @@
<script th:src="@{/js/activiti.js}"></script>
<script th:inline="javascript">
var prefix = ctx + "system/outsource_requisition";
$("#form-outsourceQuote-wwjl").validate({
$("#form-outsourceRequisition-wwjl").validate({
focusCleanup: true
});
var childData = [[${formData}]];
var outsourcePlanDetailList = [];
var outsourcePlanCode = '';
var materialList = [];
var tableIdList = [];
var $processContent;
var $supplierheaderContent;
var materials;
var outsourceProcessAmount = 0;
var actualOutsourceAmount = 0;
var outsourceRequisition = [[${formData}]];
var originMaterial = []
function submitHandler() {
if ($.validate.form()) {
@ -95,14 +118,205 @@
$('input[name="p_COM_comment"]').val($('textarea[name="comment"]').val());
}
var taskId = [[${taskId}]];
$.operate.save(prefix + "/complete/" + taskId, $('#form-outsourceQuote-wwjl').serialize());
$.operate.save(prefix + "/complete/" + taskId, $('#form-outsourceRequisition-wwjl').serialize());
}
}
$(function() {
originMaterial = outsourceRequisition.outsourceRequisitionDetailList;
materials = mergeRecords(originMaterial);
$("#totalAmount").val(outsourceRequisition.totalAmount);
// 遍历委外计划详情信息
materials.forEach(function (material, index) {
var tableId = 'materialNo-' + (index+1);
var materialTable = "bootstrap-table_" + tableId;
tableIdList.push(materialTable);
// 创建物料信息的容器
var $tableWrapper = $('<div id="material-' + tableId + '"></div>');
// 将整个物料信息容器添加到页面
$('#material').append($tableWrapper);
// 添加关联销售订单号信息
var $headerDiv =
$('<div class="row">' +
'<div class="col-xs-12" >' +
'<h3>' +
'<span><strong>物料 ' + (index+1) + ': </strong> ' + '<strong>关联订单号: </strong></span>' + '<span class="correlationCodes" style="color: blue" id="correlationCodes-' + tableId + '"></span>' +
'</h3>' +
'<div class="col-sm-12 material-table">' +
'<table class="table-materialNo" id="' + materialTable + '">' + '</table>' +
'</div>' +
'</div>' +
'</div>');
$tableWrapper.append($headerDiv);
$(".correlationCodes").text(material.correlationCodes);
$("#materialAmount").val(materials.length);
// console.log(outsourceOrderList[0].outsourceOrderNo);
var materialObj = {
outsourceRequisitionNo: material.outsourceRequisitionNo,
materialNo: material.materialNo,
materialPhotourl: material.materialPhotourl,
materialName: material.materialName,
materialType: material.materialType,
description: material.description,
unit: material.unit,
brand: material.brand,
processMethod: material.processMethod,
correlationCodes: material.correlationCodes,
actualOutsourceAmount: material.actualOutsourceAmount,
plannedOutsourceAmount: material.plannedOutsourceAmount,
alreadyRequisitionAmount: material.takenMaterial,
nowRequisitionAmount: material.takingMaterial,
};
var materialData = [materialObj]; // Bootstrap Table需要一个数组作为数据源
materialList.push(material);
tables(materialTable, materialData);
var $MaterialNumDiv =
$('<div class="row" style="margin-top: 20px;margin-left: 10px;">' +
'<div class="col-xs-12">' +
'<h3>' +
'<span><strong>供应商</strong></span>' +
'</h3>' +
'</div>' +
'</div>');
$tableWrapper.append($MaterialNumDiv);
console.log(childData);
var $processInfo = $('<div class="process-card" style="height: 60px;" id="processInfo-' + tableId + '"></div>');
if(material.processList.length <= 0){
var $noProcessDiv = $('<div class="no-process">暂无委外工序信息,请先添加委外工序信息。</div>');
$tableWrapper.append($noProcessDiv);
}else{
material.processList.forEach(function(detail, detailsIndex) {
// console.log(processIndex);
var processSelectId = 'process-select-' + tableId + '_' + (detailsIndex+1);
var processTableId = 'process-' + tableId + '_' + (detailsIndex+1);
$processContent =
$('<div class="card-header process_card" id="process-' + tableId + '_' + (detailsIndex+1) + '" >' +
'<div class="row" style="margin-left: 25px;height: 20px">' +
'<div class="card-text">' +
'<h5>委外工序 ' + (detailsIndex+1) + ':' +
'<span style="color: blue" class="outsourceProcessInfo">' + detail.outsourceProcessInfo + '</span>' +
'</h5>' +
'</div>' +
'<div class="col-xs-12" style="padding-left: 0px;">' +
'<div class="col-sm-12" style="padding-left: 0px;" id="chargeUnit-'+processSelectId+'">' +
'<span class="chargeUnit" style="padding-right: 10px;">*计价单位:</span>' +
'<span class="chargeUnitInfo" style="padding-right: 80px;">' + detail.chargeUnitInfo + '</span>' +
'<span class="singleMaterial" style="padding-right: 10px;">每个物料:</span>' +
'<span class="singleMaterialInfo">' + detail.singleMaterialInfo + '</span>' +
'</div>' +
'</div>' +
'</div>' +
'</div>');
$tableWrapper.append($processContent);
$supplierheaderContent =
$('<div class="card-header suppplier_card" id = "supplier-' + processTableId + '_' + ' ">' +
'<div class="col-xs-12">' +
'<div class="col-sm-4" style="margin-top: 13px;padding-left: 10px;">' +
'<input type="radio" id="supplier-' + processTableId + '" name="supplier-' + processTableId + '" value="" checked>' +
'<span class="supplierInfo">' + detail.supplierInfo + '</span>' +
'</div>' +
'<div class="col-sm-8 deliveryTime-'+processTableId+'" style="padding-top: 10px;padding-left: 0px;">' +
'<label class="col-sm-2" style="padding-left: 0px;margin-top: 5px;">计划交付时间: </label>' +
'<div class ="col-sm-4">' +
'<div class="input-group date"> ' +
'<input type="text" disabled name="deliveryTime" value="' + detail.deliveryTimeInfo + '" class="form-control supplierDeliveryTime" id="deliveryTime_' + processTableId + '">' +
'<span class="input-group-addon"><i class="fa fa-calendar"></i></span>' +
'</div>' +
'</div>' +
'</div>'+
'</div>' +
'</div>'+
'<div class="row">' +
'<div class="hr-line-dashed" style="margin-bottom: 0px;margin-top: 80px;">' +
'</div>' +
'</div>');
$("#"+processTableId).append($supplierheaderContent);
});
}
});
});
function tables(tableId, data) {
$('#' + tableId).bootstrapTable({
showExport: false,
showFooter: false,
showSearch: false,
showRefresh: false,
showColumns: false,
showToggle: false,
data: data,
columns: [
{title: '料号', field: 'materialNo'},
{title: '图片', field: 'materialPhotourl', formatter: function (value, row, index) {
return $.table.imageView(value);
}
},
{title: '物料名称', field: 'materialName'},
{title: '物料描述', field: 'description'},
{title: '品牌', field: 'brand'},
{title: '单位', field: 'unit', align: 'center', },
{title: '加工方式', field: 'processMethod', align: 'center',},
{title: '计划委外数', field: 'plannedOutsourceAmount'},
{title: '实际委外数', field: 'actualOutsourceAmount'},
{title: '已委外领料数', field: 'alreadyRequisitionAmount'},
{title: '本次领料数', field: 'nowRequisitionAmount',
},
],
});
}
// 函数用于合并重复的material的记录
function mergeRecords(items) {
return items.reduce((merged, current) => {
const existingRecord = merged.find(record => record.materialNo === current.materialNo);
if (existingRecord) {
if (!existingRecord.processList) {
existingRecord.processList = [];
}
existingRecord.processList.push({
outsourceProcessInfo: current.outsourceProcessInfo,
chargeUnitInfo: current.chargeUnitInfo,
singleMaterialInfo: current.singleMaterialInfo,
supplierInfo: current.supplierInfo,
deliveryTimeInfo: current.deliveryTimeInfo,
});
} else {
merged.push({
outsourceRequisitionNo: current.outsourceRequisitionNo,
materialNo: current.materialNo,
materialPhotourl: current.materialPhotourl,
materialName: current.materialName,
materialType: current.materialType,
description: current.description,
unit: current.unit,
brand: current.brand,
processMethod: current.processMethod,
correlationCodes: current.correlationCodes,
plannedOutsourceAmount: current.plannedOutsourceAmount,
actualOutsourceAmount: current.actualOutsourceAmount,
takenMaterial: current.takenMaterial,
takingMaterial: current.takingMaterial,
processList:[{
outsourceProcessInfo: current.outsourceProcessInfo,
chargeUnitInfo: current.chargeUnitInfo,
singleMaterialInfo: current.singleMaterialInfo,
supplierInfo: current.supplierInfo,
deliveryTimeInfo: current.deliveryTimeInfo,
}],
});
}
return merged;
}, []);
};
</script>
</body>
</html>

308
ruoyi-admin/src/main/resources/templates/system/outsource_requisition/taskWwzgVerify.html

@ -5,9 +5,20 @@
<th:block th:include="include :: datetimepicker-css" />
<th:block th:include="include :: summernote-css" />
</head>
<style>
.col-sm-12.material-table{
height: 75px;
}
.hr-line-dashed {
border-top: 1px dashed #ddd;
margin-top: 20px; /* 调整间距 */
border-bottom: 1px dashed #ddd;
margin-bottom: 20px;
}
</style>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-outsourceQuote-wwzg" th:object="${formData}">
<form class="form-horizontal m" id="form-outsourceRequisition-wwzg" th:object="${formData}">
<input name="outsourceRequisitionId" th:field="*{outsourceRequisitionId}" type="hidden">
<input name="taskId" th:field="*{taskId}" type="hidden">
<input name="taskName" th:field="*{taskName}" type="hidden">
@ -16,47 +27,31 @@
<input type="hidden" name="p_COM_comment" />
<div class="form-group">
<label class="col-sm-3 control-label">委外领料单号:</label>
<div class="col-sm-8">
<div class="col-sm-6">
<input name="outsourceRequisitionNo" th:field="*{outsourceRequisitionNo}" class="form-control" type="text" readonly>
</div>
</div>
<!-- <div class="form-group">-->
<!-- <label class="col-sm-3 control-label">供应商编号:</label>-->
<!-- <div class="col-sm-8">-->
<!-- <input name="supplierQuoteCode" th:field="*{supplierQuoteCode}" class="form-control" type="text" readonly>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="form-group">-->
<!-- <label class="col-sm-3 control-label">供应商名称:</label>-->
<!-- <div class="col-sm-8">-->
<!-- <input name="supplierName" th:field="*{supplierName}" class="form-control" type="text" readonly>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="form-group">-->
<!-- <label class="col-sm-3 control-label">工序合计:</label>-->
<!-- <div class="col-sm-8">-->
<!-- <input name="processAmount" th:field="*{processAmount}" class="form-control" type="text" readonly>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="form-group">-->
<!-- <label class="col-sm-3 control-label">税率:</label>-->
<!-- <div class="col-sm-8">-->
<!-- <input name="taxRate" th:field="*{taxRate}" class="form-control" type="text" readonly>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="form-group">-->
<!-- <label class="col-sm-3 control-label">定价日期:</label>-->
<!-- <div class="col-sm-8">-->
<!-- <input name="pricingDate" th:field="*{pricingDate}" class="form-control" type="text" readonly>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="form-group">-->
<!-- <label class="col-sm-3 control-label">备注:</label>-->
<!-- <div class="col-sm-8">-->
<!-- <input name="remark" th:field="*{remark}" class="form-control" type="text" readonly>-->
<!-- </div>-->
<!-- </div>-->
<div class="form-group">
<label class="col-sm-3 control-label">申请人:</label>
<div class="col-sm-6">
<input name="applyUser" th:field="*{applyUser}" class="form-control" type="text" readonly>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">申请时间:</label>
<div class="col-sm-6">
<div class="input-group date">
<input name="applyTime" th:value="${#dates.format(formData.applyTime, 'yyyy-MM-dd HH:mm')}" class="form-control" type="text" readonly>
<span class="input-group-addon" disabled><i class="fa fa-calendar"></i></span>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">标题:</label>
<div class="col-sm-6">
<input name="title" th:field="*{applyTitle}" class="form-control" type="text" readonly>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label is-required" for="wwzgVerifyApproved">审批意见:</label>
<div class="col-sm-6">
@ -68,15 +63,33 @@
</div>
</div>
<div class="form-group">
<label class="col-sm-6 control-label">批注:</label>
<label class="col-sm-3 control-label">批注:</label>
<div class="col-sm-6">
<textarea name="comment" class="form-control"></textarea>
</div>
</div>
<div class="form-group">
<div class="container" id="material">
</div>
</form>
<!-- 订单合计-->
<div class="container">
<div class="row"><h4 class="card-header">订单合计:</h4></div>
<div class="col-xs-12">
<div class="col-sm-6">
<label for="materialAmount" class="col-sm-4 col-form-label">物料合计:</label>
<div class="col-sm-6">
<input type="text" class="form-control" value="0" id="materialAmount" disabled>
</div>
</div>
<div class="col-sm-6">
<label for="totalAmount" class="col-sm-4 col-form-label">领料数量合计:</label>
<div class="col-sm-6">
<input type="text" class="form-control" value="0" id="totalAmount" disabled>
</div>
</div>
</div>
</div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: datetimepicker-js" />
@ -84,10 +97,20 @@
<script th:src="@{/js/activiti.js}"></script>
<script th:inline="javascript">
var prefix = ctx + "system/outsource_requisition";
$("#form-outsourceQuote-wwzg").validate({
$("#form-outsourceRequisition-wwzg").validate({
focusCleanup: true
});
var childData = [[${formData}]];
var outsourcePlanDetailList = [];
var outsourcePlanCode = '';
var materialList = [];
var tableIdList = [];
var $processContent;
var $supplierheaderContent;
var materials;
var outsourceProcessAmount = 0;
var actualOutsourceAmount = 0;
var outsourceRequisition = [[${formData}]];
var originMaterial = [];
function submitHandler() {
if ($.validate.form()) {
@ -95,14 +118,205 @@
$('input[name="p_COM_comment"]').val($('textarea[name="comment"]').val());
}
var taskId = [[${taskId}]];
$.operate.save(prefix + "/complete/" + taskId, $('#form-outsourceQuote-wwzg').serialize());
$.operate.save(prefix + "/complete/" + taskId, $('#form-outsourceRequisition-wwzg').serialize());
}
}
$(function() {
originMaterial = outsourceRequisition.outsourceRequisitionDetailList;
materials = mergeRecords(originMaterial);
$("#totalAmount").val(outsourceRequisition.totalAmount);
// 遍历委外计划详情信息
materials.forEach(function (material, index) {
var tableId = 'materialNo-' + (index+1);
var materialTable = "bootstrap-table_" + tableId;
tableIdList.push(materialTable);
// 创建物料信息的容器
var $tableWrapper = $('<div id="material-' + tableId + '"></div>');
// 将整个物料信息容器添加到页面
$('#material').append($tableWrapper);
// 添加关联销售订单号信息
var $headerDiv =
$('<div class="row">' +
'<div class="col-xs-12" >' +
'<h3>' +
'<span><strong>物料 ' + (index+1) + ': </strong> ' + '<strong>关联订单号: </strong></span>' + '<span class="correlationCodes" style="color: blue" id="correlationCodes-' + tableId + '"></span>' +
'</h3>' +
'<div class="col-sm-12 material-table">' +
'<table class="table-materialNo" id="' + materialTable + '">' + '</table>' +
'</div>' +
'</div>' +
'</div>');
$tableWrapper.append($headerDiv);
$(".correlationCodes").text(material.correlationCodes);
$("#materialAmount").val(materials.length);
// console.log(outsourceOrderList[0].outsourceOrderNo);
var materialObj = {
outsourceRequisitionNo: material.outsourceRequisitionNo,
materialNo: material.materialNo,
materialPhotourl: material.materialPhotourl,
materialName: material.materialName,
materialType: material.materialType,
description: material.description,
unit: material.unit,
brand: material.brand,
processMethod: material.processMethod,
correlationCodes: material.correlationCodes,
actualOutsourceAmount: material.actualOutsourceAmount,
plannedOutsourceAmount: material.plannedOutsourceAmount,
alreadyRequisitionAmount: material.takenMaterial,
nowRequisitionAmount: material.takingMaterial,
};
var materialData = [materialObj]; // Bootstrap Table需要一个数组作为数据源
materialList.push(material);
tables(materialTable, materialData);
var $MaterialNumDiv =
$('<div class="row" style="margin-top: 20px;margin-left: 10px;">' +
'<div class="col-xs-12">' +
'<h3>' +
'<span><strong>供应商</strong></span>' +
'</h3>' +
'</div>' +
'</div>');
$tableWrapper.append($MaterialNumDiv);
console.log(childData);
var $processInfo = $('<div class="process-card" style="height: 60px;" id="processInfo-' + tableId + '"></div>');
if(material.processList.length <= 0){
var $noProcessDiv = $('<div class="no-process">暂无委外工序信息,请先添加委外工序信息。</div>');
$tableWrapper.append($noProcessDiv);
}else{
material.processList.forEach(function(detail, detailsIndex) {
// console.log(processIndex);
var processSelectId = 'process-select-' + tableId + '_' + (detailsIndex+1);
var processTableId = 'process-' + tableId + '_' + (detailsIndex+1);
$processContent =
$('<div class="card-header process_card" id="process-' + tableId + '_' + (detailsIndex+1) + '" >' +
'<div class="row" style="margin-left: 25px;height: 20px">' +
'<div class="card-text">' +
'<h5>委外工序 ' + (detailsIndex+1) + ':' +
'<span style="color: blue" class="outsourceProcessInfo">' + detail.outsourceProcessInfo + '</span>' +
'</h5>' +
'</div>' +
'<div class="col-xs-12" style="padding-left: 0px;">' +
'<div class="col-sm-12" style="padding-left: 0px;" id="chargeUnit-'+processSelectId+'">' +
'<span class="chargeUnit" style="padding-right: 10px;">*计价单位:</span>' +
'<span class="chargeUnitInfo" style="padding-right: 80px;">' + detail.chargeUnitInfo + '</span>' +
'<span class="singleMaterial" style="padding-right: 10px;">每个物料:</span>' +
'<span class="singleMaterialInfo">' + detail.singleMaterialInfo + '</span>' +
'</div>' +
'</div>' +
'</div>' +
'</div>');
$tableWrapper.append($processContent);
$supplierheaderContent =
$('<div class="card-header suppplier_card" id = "supplier-' + processTableId + '_' + ' ">' +
'<div class="col-xs-12">' +
'<div class="col-sm-4" style="margin-top: 13px;padding-left: 10px;">' +
'<input type="radio" id="supplier-' + processTableId + '" name="supplier-' + processTableId + '" value="" checked>' +
'<span class="supplierInfo">' + detail.supplierInfo + '</span>' +
'</div>' +
'<div class="col-sm-8 deliveryTime-'+processTableId+'" style="padding-top: 10px;padding-left: 0px;">' +
'<label class="col-sm-2" style="padding-left: 0px;margin-top: 5px;">计划交付时间: </label>' +
'<div class ="col-sm-4">' +
'<div class="input-group date"> ' +
'<input type="text" disabled name="deliveryTime" value="' + detail.deliveryTimeInfo + '" class="form-control supplierDeliveryTime" id="deliveryTime_' + processTableId + '">' +
'<span class="input-group-addon"><i class="fa fa-calendar"></i></span>' +
'</div>' +
'</div>' +
'</div>'+
'</div>' +
'</div>'+
'<div class="row">' +
'<div class="hr-line-dashed" style="margin-bottom: 0px;margin-top: 80px;">' +
'</div>' +
'</div>');
$("#"+processTableId).append($supplierheaderContent);
});
}
});
});
function tables(tableId, data) {
$('#' + tableId).bootstrapTable({
showExport: false,
showFooter: false,
showSearch: false,
showRefresh: false,
showColumns: false,
showToggle: false,
data: data,
columns: [
{title: '料号', field: 'materialNo'},
{title: '图片', field: 'materialPhotourl', formatter: function (value, row, index) {
return $.table.imageView(value);
}
},
{title: '物料名称', field: 'materialName'},
{title: '物料描述', field: 'description'},
{title: '品牌', field: 'brand'},
{title: '单位', field: 'unit', align: 'center', },
{title: '加工方式', field: 'processMethod', align: 'center',},
{title: '计划委外数', field: 'plannedOutsourceAmount'},
{title: '实际委外数', field: 'actualOutsourceAmount'},
{title: '已委外领料数', field: 'alreadyRequisitionAmount'},
{title: '本次领料数', field: 'nowRequisitionAmount',
},
],
});
}
// 函数用于合并重复的material的记录
function mergeRecords(items) {
return items.reduce((merged, current) => {
const existingRecord = merged.find(record => record.materialNo === current.materialNo);
if (existingRecord) {
if (!existingRecord.processList) {
existingRecord.processList = [];
}
existingRecord.processList.push({
outsourceProcessInfo: current.outsourceProcessInfo,
chargeUnitInfo: current.chargeUnitInfo,
singleMaterialInfo: current.singleMaterialInfo,
supplierInfo: current.supplierInfo,
deliveryTimeInfo: current.deliveryTimeInfo,
});
} else {
merged.push({
outsourceRequisitionNo: current.outsourceRequisitionNo,
materialNo: current.materialNo,
materialPhotourl: current.materialPhotourl,
materialName: current.materialName,
materialType: current.materialType,
description: current.description,
unit: current.unit,
brand: current.brand,
processMethod: current.processMethod,
correlationCodes: current.correlationCodes,
plannedOutsourceAmount: current.plannedOutsourceAmount,
actualOutsourceAmount: current.actualOutsourceAmount,
takenMaterial: current.takenMaterial,
takingMaterial: current.takingMaterial,
processList:[{
outsourceProcessInfo: current.outsourceProcessInfo,
chargeUnitInfo: current.chargeUnitInfo,
singleMaterialInfo: current.singleMaterialInfo,
supplierInfo: current.supplierInfo,
deliveryTimeInfo: current.deliveryTimeInfo,
}],
});
}
return merged;
}, []);
};
</script>
</body>
</html>
Loading…
Cancel
Save